directfb2 / DirectFB2

Core DirectFB library
GNU Lesser General Public License v2.1
136 stars 16 forks source link

drmkms: Set default pixel format using drmModePlane formats array #86

Closed caramelli closed 1 year ago

caramelli commented 1 year ago

Set default pixel format using drmModePlane formats array if AR24 is not supported

fifteenhex commented 1 year ago

Note getting a segfault atm:

Thread 1 "scummvm" received signal SIGSEGV, Segmentation fault.
0xb67e6948 in system_initialize (core=0x160e430, ret_data=0x160f698) at ../systems/drmkms/drmkms_system.c:224
224     ../systems/drmkms/drmkms_system.c: No such file or directory.
(gdb) bt
#0  0xb67e6948 in system_initialize (core=0x160e430, ret_data=0x160f698) at ../systems/drmkms/drmkms_system.c:224
#1  0xb68db608 in dfb_system_core_initialize (core=0x160e430, data=0x1613078, shared=0x1613088) at ../src/core/system.c:71
#2  0xb68ba17c in dfb_core_part_initialize (core=core@entry=0x160e430, core_part=0xb69e2998 <dfb_system_core>) at ../src/core/core_parts.c:54
#3  0xb68b780c in dfb_core_initialize (core=0x160e430) at ../src/core/core.c:435
#4  0xb68b362c in ICore_Real__Initialize (obj=obj@entry=0x160e430) at ../src/core/CoreDFB_real.c:41
#5  0xb689d4c8 in CoreDFB_Initialize (obj=obj@entry=0x160e430) at src/core/CoreDFB.c:66
#6  0xb68b8838 in dfb_core_arena_initialize (ctx=0x160e430) at ../src/core/core.c:1845
#7  dfb_core_create (ret_core=ret_core@entry=0xb69e2df8 <core_dfb>) at ../src/core/core.c:226
#8  0xb68b3150 in IDirectFB_Construct (thiz=thiz@entry=0x160e8f0) at ../src/idirectfb.c:2074
#9  0xb68aebec in DirectFBCreate (ret_interface=0xbe827b38, ret_interface@entry=0xbe827b30) at ../src/directfb.c:163
#10 0xb6efe704 in DirectFB_VideoInit (_this=0x160c6c8) at buildroot/build/sdl2-d8b252743dc2effe6afe887b53af07b0edff7a0a/src/video/directfb/SDL_DirectFB_video.c:238
#11 0xb6eee260 in SDL_VideoInit_REAL (driver_name=<optimized out>) at buildroot/build/sdl2-d8b252743dc2effe6afe887b53af07b0edff7a0a/src/video/SDL_video.c:515
#12 0xb6e62e7c in SDL_InitSubSystem_REAL (flags=16416) at buildroot/build/sdl2-d8b252743dc2effe6afe887b53af07b0edff7a0a/src/SDL.c:247
#13 SDL_InitSubSystem_REAL (flags=<optimized out>) at buildroot/build/sdl2-d8b252743dc2effe6afe887b53af07b0edff7a0a/src/SDL.c:168
#14 0x00058960 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) 

Around:

plane = drmModeGetPlane( drmkms->fd, drmkms->plane_resources->planes[0] );
(gdb) print *drmkms
$1 = {shared = 0x1613260, core = 0x160e430, fd = 4, resources = 0x1613628, plane_resources = 0x1613690, connector = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, encoder = {0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0}, crtc = 0x0, layer_ids = {1, 0, 0, 0, 0, 0, 0, 0}, layer_id_next = 1, event_context = {version = 0, vblank_handler = 0x0, page_flip_handler = 0x0, 
    page_flip_handler2 = 0x0, sequence_handler = 0x0}, thread = 0x0}
(gdb) print *drmkms->plane_resources 
$2 = {count_planes = 0, planes = 0x0}
(gdb) 

drmkms->plane_resources->planes is NULL?

Dump of modetest for the panel

# modetest -M ili9341
Encoders:
id      crtc    type    possible crtcs  possible clones
35      34      none    0x00000001      0x00000001

Connectors:
id      encoder status          name            size (mm)       modes   encoders
31      35      connected       SPI-1           49x37           1       35
  modes:
        index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 320x240 0.01 320 320 320 320 240 240 240 240 1 flags: ; type: preferred, driver
  props:
        1 EDID:
                flags: immutable blob
                blobs:

                value:
        2 DPMS:
                flags: enum
                enums: On=0 Standby=1 Suspend=2 Off=3
                value: 0
        5 link-status:
                flags: enum
                enums: Good=0 Bad=1
                value: 0
        6 non-desktop:
                flags: immutable range
                values: 0 1
                value: 0
        4 TILE:
                flags: immutable blob
                blobs:

                value:

CRTCs:
id      fb      pos     size
34      36      (0,0)   (320x240)
  #0 320x240 0.01 320 320 320 320 240 240 240 240 1 flags: ; type: preferred, driver
  props:
        24 VRR_ENABLED:
                flags: range
                values: 0 1
                value: 0

Planes:
id      crtc    fb      CRTC x,y        x,y     gamma size      possible crtcs
32      34      36      0,0             0,0     0               0x00000001
  formats: RG16 XR24
  props:
        8 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 1
        30 IN_FORMATS:
                flags: immutable blob
                blobs:

                value:
                        01000000000000000200000018000000
                        01000000200000005247313658523234
                        03000000000000000000000000000000
                        0000000000000000
                in_formats blob decoded:
                         RG16:  LINEAR
                         XR24:  LINEAR

Frame buffers:
id      size    pitch

# 
fifteenhex commented 1 year ago

Hi @caramelli

If I add this little bit of extra code https://github.com/fifteenhex/DirectFB2/commit/10caecdc3abd0f0094d6544b55212f1c69408c22 this seems to work as intended.