llvmpipe backend fails on device with pitch/width restrictions
System information
- OS: Custom build using OE/Debian containers
- GPU: No GPU, display controller only DRM device (mxsfb)
- Kernel version: 5.6.0-rc5-01269-g2f0fe683a06b-dirty
- Mesa version: Mesa 19.3.3
- Desktop manager and compositor: Weston 8.0.0
Describe the issue
Using Weston with Mesa and llvmpipe software renderer leads to the DRM driver rejecting Weston's plane configuration. It seems that Mesa llvmpipe is trying to use a stride/pitch which is not valid for that particular device (dumping the atomic state in the driver shows that the pitch is 3328, so it seems user space is trying to align the width of 800 by 64, leading to a pitch of 832).
The problem appears only when using 800x480 (640 divides by 64 which seems to be fine) and llvmpipe. Using softpipe on 800x480 resolution works, as well as using llvmpipe on 640x480.
Regression
Not that I am aware of.
Log files as attachment
[11:33:21.057] weston 8.0.0
https://wayland.freedesktop.org
Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
Build: 8.0.0
[11:33:21.057] Command line: weston --tty=8
[11:33:21.058] OS: Linux, 5.6.0-rc5-01269-g2f0fe683a06b-dirty, #48 SMP PREEMPT Tue Mar 24 12:10:50 CET 2020, armv7l
...
[11:33:21.409] using /dev/dri/card0
[11:33:21.410] DRM: supports universal planes
[11:33:21.410] DRM: supports atomic modesetting
[11:33:21.410] DRM: supports picture aspect ratio
[11:33:21.411] Loading module '/usr/lib/arm-linux-gnueabihf/libweston-8/gl-renderer.so'
[11:33:22.659] EGL client extensions: EGL_EXT_device_base
EGL_EXT_device_enumeration EGL_EXT_device_query
EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses
EGL_EXT_client_extensions EGL_KHR_debug
EGL_EXT_platform_wayland EGL_EXT_platform_x11
EGL_MESA_platform_gbm EGL_MESA_platform_surfaceless
EGL_EXT_platform_device
[11:33:22.667] EGL version: 1.4
[11:33:22.668] EGL vendor: Mesa Project
[11:33:22.668] EGL client APIs: OpenGL OpenGL_ES
[11:33:22.669] EGL extensions: EGL_ANDROID_blob_cache EGL_EXT_buffer_age
EGL_EXT_image_dma_buf_import EGL_KHR_cl_event2
EGL_KHR_config_attribs EGL_KHR_create_context
EGL_KHR_create_context_no_error EGL_KHR_fence_sync
EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace
EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image
EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image
EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap
EGL_KHR_no_config_context EGL_KHR_reusable_sync
EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float
EGL_KHR_wait_sync EGL_MESA_configless_context
EGL_MESA_image_dma_buf_export EGL_MESA_query_driver
[11:33:22.673] warning: Disabling render GPU timeline and explicit synchronization due to missing EGL_ANDROID_native_fence_sync extension
[11:33:22.673] EGL_KHR_surfaceless_context available
[11:33:22.766] GL version: OpenGL ES 3.1 Mesa 19.3.3
[11:33:22.767] GLSL version: OpenGL ES GLSL ES 3.10
[11:33:22.767] GL vendor: VMware, Inc.
[11:33:22.767] GL renderer: llvmpipe (LLVM 9.0.1, 128 bits)
[11:33:22.768] GL extensions: GL_EXT_blend_minmax GL_EXT_multi_draw_arrays
GL_EXT_texture_compression_s3tc GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_rgtc GL_EXT_texture_format_BGRA8888
GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24
GL_OES_element_index_uint GL_OES_fbo_render_mipmap
GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives
GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float
GL_OES_texture_float_linear GL_OES_texture_half_float
GL_OES_texture_half_float_linear GL_OES_texture_npot
GL_OES_vertex_half_float GL_EXT_texture_sRGB_decode
GL_OES_EGL_image GL_OES_depth_texture
GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV
GL_NV_conditional_render GL_OES_get_program_binary
GL_APPLE_texture_max_level GL_EXT_discard_framebuffer
GL_EXT_read_format_bgra GL_EXT_frag_depth
GL_NV_fbo_color_attachments GL_OES_EGL_image_external
GL_OES_EGL_sync GL_OES_vertex_array_object
GL_ANGLE_texture_compression_dxt3
GL_ANGLE_texture_compression_dxt5
GL_EXT_occlusion_query_boolean GL_EXT_texture_rg
GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer
GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil
GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug
GL_KHR_texture_compression_astc_ldr
GL_OES_depth_texture_cube_map GL_OES_required_internalformat
GL_OES_surfaceless_context GL_EXT_color_buffer_float
GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects
GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix
GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture
GL_EXT_copy_image GL_EXT_draw_buffers_indexed
GL_EXT_draw_elements_base_vertex GL_EXT_polygon_offset_clamp
GL_EXT_render_snorm GL_EXT_shader_io_blocks
GL_EXT_texture_border_clamp GL_EXT_texture_buffer
GL_EXT_texture_norm16 GL_EXT_texture_view
GL_KHR_context_flush_control GL_NV_image_formats
GL_OES_copy_image GL_OES_draw_buffers_indexed
GL_OES_draw_elements_base_vertex GL_OES_shader_io_blocks
GL_OES_texture_border_clamp GL_OES_texture_buffer
GL_OES_texture_stencil8
GL_OES_texture_storage_multisample_2d_array GL_OES_texture_view
GL_EXT_blend_func_extended GL_EXT_buffer_storage
GL_EXT_float_blend GL_KHR_no_error
GL_KHR_texture_compression_astc_sliced_3d
GL_OES_EGL_image_external_essl3 GL_OES_shader_image_atomic
GL_EXT_clip_cull_distance GL_EXT_disjoint_timer_query
GL_EXT_texture_compression_s3tc_srgb
GL_MESA_shader_integer_functions GL_EXT_clip_control
GL_EXT_texture_compression_bptc GL_KHR_parallel_shader_compile
GL_EXT_texture_sRGB_R8 GL_MESA_framebuffer_flip_y
GL_EXT_depth_clamp GL_EXT_texture_query_lod
[11:33:22.769] GL ES 2 renderer features:
read-back format: BGRA
wl_shm sub-image to texture: yes
EGL Wayland extension: no
[11:33:22.812] event1 - gpio-keys: is tagged by udev as: Keyboard
[11:33:22.813] event1 - gpio-keys: device is a keyboard
[11:33:22.829] event0 - Logitech USB Receiver: is tagged by udev as: Keyboard
[11:33:22.830] event0 - Logitech USB Receiver: device is a keyboard
[11:33:22.847] event2 - Logitech USB Receiver Mouse: is tagged by udev as: Mouse
[11:33:22.849] event2 - Logitech USB Receiver Mouse: device is a pointer
[11:33:22.866] event3 - Logitech USB Receiver Consumer Control: is tagged by udev as: Keyboard
[11:33:22.867] event3 - Logitech USB Receiver Consumer Control: device is a keyboard
[11:33:22.885] event4 - Logitech USB Receiver System Control: is tagged by udev as: Keyboard
[11:33:22.886] event4 - Logitech USB Receiver System Control: device is a keyboard
[11:33:22.935] libinput: configuring device "gpio-keys".
[11:33:22.935] libinput: configuring device "Logitech USB Receiver".
[11:33:22.935] libinput: configuring device "Logitech USB Receiver Mouse".
[11:33:22.935] libinput: configuring device "Logitech USB Receiver Consumer Control".
[11:33:22.936] libinput: configuring device "Logitech USB Receiver System Control".
[11:33:22.937] DRM: head 'DPI-1' found, connector 34 is connected, EDID make 'unknown', model 'unknown', serial 'unknown'
[11:33:22.937] Registered plugin API 'weston_drm_output_api_v1' of size 12
[11:33:22.938] Registered plugin API 'weston_drm_virtual_output_api_v1' of size 24
[11:33:22.939] Chosen EGL config details: id: 16 rgba: 8 8 8 0 buf: 24 dep: 0 stcl: 0 int: 1-1 type: win vis_id: XRGB8888 (0x34325258)
[11:33:22.939] Output DPI-1 (crtc 32) video modes:
800x480@57.8, preferred, current, 33.3 MHz
[11:33:22.939] associating input device event1 with output DPI-1 (none by udev)
[11:33:22.939] associating input device event0 with output DPI-1 (none by udev)
[11:33:22.940] associating input device event2 with output DPI-1 (none by udev)
[11:33:22.940] associating input device event3 with output DPI-1 (none by udev)
[11:33:22.940] associating input device event4 with output DPI-1 (none by udev)
[11:33:22.940] Output 'DPI-1' enabled with head(s) DPI-1
[11:33:22.940] Compositor capabilities:
arbitrary surface rotation: yes
screen capture uses y-flip: yes
presentation clock: CLOCK_MONOTONIC, id 1
presentation clock resolution: 0.000000001 s
[11:33:22.941] Loading module '/usr/lib/arm-linux-gnueabihf/weston/desktop-shell.so'
[11:33:22.946] launching '/usr/lib/arm-linux-gnueabihf/weston-keyboard'
[11:33:22.952] launching '/usr/lib/arm-linux-gnueabihf/weston-desktop-shell'
[ 1181.714804] mxsfb 30730000.lcdif: Invalid pitch: fb and crtc widths must be the same
[11:33:23.884] atomic: couldn't commit new state: Invalid argument
[11:33:23.884] repaint-flush failed: Invalid argument
A dump of the DRM atomic state object in the driver:
mxsfb 30730000.lcdif: [drm] plane[31]: plane-0
mxsfb 30730000.lcdif: [drm] crtc=crtc-0
mxsfb 30730000.lcdif: [drm] fb=36
mxsfb 30730000.lcdif: [drm] allocated by = weston
mxsfb 30730000.lcdif: [drm] refcount=2
mxsfb 30730000.lcdif: [drm] format=XR24 little-endian (0x34325258)
mxsfb 30730000.lcdif: [drm] modifier=0x0
mxsfb 30730000.lcdif: [drm] size=800x480
mxsfb 30730000.lcdif: [drm] layers:
mxsfb 30730000.lcdif: [drm] size[0]=800x480
mxsfb 30730000.lcdif: [drm] pitch[0]=3328
mxsfb 30730000.lcdif: [drm] offset[0]=0
mxsfb 30730000.lcdif: [drm] obj[0]:
mxsfb 30730000.lcdif: [drm] name=0
mxsfb 30730000.lcdif: [drm] refcount=2
mxsfb 30730000.lcdif: [drm] start=00010317
mxsfb 30730000.lcdif: [drm] size=1703936
mxsfb 30730000.lcdif: [drm] imported=no
mxsfb 30730000.lcdif: [drm] crtc-pos=800x480+0+0
mxsfb 30730000.lcdif: [drm] src-pos=800.000000x480.000000+0.000000+0.000000
mxsfb 30730000.lcdif: [drm] rotation=1
mxsfb 30730000.lcdif: [drm] normalized-zpos=0
mxsfb 30730000.lcdif: [drm] color-encoding=ITU-R BT.601 YCbCr
mxsfb 30730000.lcdif: [drm] color-range=YCbCr limited range
mxsfb 30730000.lcdif: [drm] crtc[32]: crtc-0
mxsfb 30730000.lcdif: [drm] enable=1
mxsfb 30730000.lcdif: [drm] active=1
mxsfb 30730000.lcdif: [drm] self_refresh_active=0
mxsfb 30730000.lcdif: [drm] planes_changed=1
mxsfb 30730000.lcdif: [drm] mode_changed=0
mxsfb 30730000.lcdif: [drm] active_changed=0
mxsfb 30730000.lcdif: [drm] connectors_changed=0
mxsfb 30730000.lcdif: [drm] color_mgmt_changed=0
mxsfb 30730000.lcdif: [drm] plane_mask=1
mxsfb 30730000.lcdif: [drm] connector_mask=1
mxsfb 30730000.lcdif: [drm] encoder_mask=1
mxsfb 30730000.lcdif: [drm] mode: "800x480": 58 33300 800 1010 1030 1076 480 502 512 535 0x48 0xa
mxsfb 30730000.lcdif: [drm] connector[34]: DPI-1
mxsfb 30730000.lcdif: [drm] crtc=crtc-0
mxsfb 30730000.lcdif: [drm] self_refresh_aware=0
Any extra information would be greatly appreciated
The issue has been discussed on #dri-devel: https://people.freedesktop.org/~cbrill/dri-log/?date=2020-03-24