Smithay / smithay

A smithy for rusty wayland compositors
MIT License
1.91k stars 169 forks source link

Accept non-alpha variants of surface formats for primary plane #408

Closed vurpo closed 3 years ago

vurpo commented 3 years ago

Quoted from Matrix room:

So it seems your drm-device (older intel gpu?) supports no alpha color formats.

Which is not really a problem, because it supports 4-bit formats, where it ignores the alpha channel and because a primary plane cannot be transparent anyway, we should need to accept rendering an alpha-format to a primary-plane supporting the matching non-alpha variant

So it fix it, we need to adjust the code here, so that it does not do a simple intersection: https://github.com/Smithay/smithay/blob/master/src/backend/drm/surface/gbm.rs#L112 But instead converts alpha formats to non-alpha variants.

Or add add this here: https://github.com/Smithay/smithay/blob/master/src/backend/drm/surface/mod.rs#L365 If the requested plane is a PlaneType::Primary also add all non-alpha-variants, so the gbm code can later select one for rendering.

vurpo commented 3 years ago

Related excerpt from anvil trace logs:

Nov 02 20:13:32.301 INFO GL Renderer: "Mesa DRI Intel(R) HD Graphics 4400 (HSW GT2)", smithay_module: renderer_gles2
Nov 02 20:13:32.301 INFO Supported GL Extensions: ["GL_EXT_blend_minmax", "GL_EXT_multi_draw_arrays", "GL_EXT_texture_filter_anisotropic", "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_draw_instanced", "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_OES_viewport_array", "GL_ANGLE_pack_reverse_row_order", "GL_ANGLE_texture_compression_dxt3", "GL_ANGLE_texture_compression_dxt5", "GL_EXT_occlusion_query_boolean", "GL_EXT_robustness", "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_robustness", "GL_NV_pixel_buffer_object", "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_group_vote", "GL_EXT_shader_implicit_conversions", "GL_EXT_shader_integer_mix", "GL_EXT_tessellation_point_size", "GL_EXT_tessellation_shader", "GL_INTEL_performance_query", "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_gpu_shader5", "GL_EXT_polygon_offset_clamp", "GL_EXT_primitive_bounding_box", "GL_EXT_render_snorm", "GL_EXT_shader_io_blocks", "GL_EXT_texture_border_clamp", "GL_EXT_texture_buffer", "GL_EXT_texture_cube_map_array", "GL_EXT_texture_norm16", "GL_KHR_blend_equation_advanced", "GL_KHR_context_flush_control", "GL_KHR_robust_buffer_access_behavior", "GL_NV_image_formats", "GL_OES_copy_image", "GL_OES_draw_buffers_indexed", "GL_OES_draw_elements_base_vertex", "GL_OES_gpu_shader5", "GL_OES_primitive_bounding_box", "GL_OES_sample_shading", "GL_OES_sample_variables", "GL_OES_shader_io_blocks", "GL_OES_shader_multisample_interpolation", "GL_OES_tessellation_point_size", "GL_OES_tessellation_shader", "GL_OES_texture_border_clamp", "GL_OES_texture_buffer", "GL_OES_texture_cube_map_array", "GL_OES_texture_stencil8", "GL_OES_texture_storage_multisample_2d_array", "GL_EXT_blend_func_extended", "GL_EXT_buffer_storage", "GL_EXT_float_blend", "GL_EXT_geometry_point_size", "GL_EXT_geometry_shader", "GL_EXT_shader_samples_identical", "GL_EXT_texture_sRGB_R8", "GL_KHR_no_error", "GL_OES_EGL_image_external_essl3", "GL_OES_geometry_point_size", "GL_OES_geometry_shader", "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_color_buffer_half_float", "GL_EXT_texture_compression_bptc", "GL_KHR_parallel_shader_compile", "GL_EXT_EGL_image_storage", "GL_EXT_shader_framebuffer_fetch_non_coherent", "GL_EXT_texture_shadow_lod", "GL_INTEL_blackhole_render", "GL_MESA_framebuffer_flip_y", "GL_EXT_demote_to_helper_invocation", "GL_EXT_depth_clamp", "GL_EXT_texture_query_lod", ""], smithay_module: renderer_gles2
Nov 02 20:13:32.306 INFO Initializing EGL Hardware Acceleration via "/dev/dri/card0"
Nov 02 20:13:32.306 INFO EGL hardware-acceleration enabled
Nov 02 20:13:32.758 INFO Connected: EmbeddedDisplayPort
Nov 02 20:13:33.058 INFO Trying to setup connector EmbeddedDisplayPort-1 with crtc crtc::Handle(45)
Nov 02 20:13:33.058 INFO Initializing drm surface with mode Mode { name: "1920x1080", clock: 140100, size: (1920, 1080), hsync: (1980, 2016, 2092), vsync: (1083, 1088, 1116), hskew: 0, vscan: 0, vrefresh: 60 } and connectors [connector::Handle(77)], drm_module: surface, smithay_module: backend_drm_legacy, smithay_module: backend_drm
Nov 02 20:13:33.362 TRCE Supported scan-out formats for plane (plane::Handle(31)): {DrmFormat { code: DrmFourcc(XR24), modifier: Invalid }, DrmFormat { code: DrmFourcc(XB24), modifier: Invalid }, DrmFormat { code: DrmFourcc(XR30), modifier: I915_x_tiled }, DrmFormat { code: DrmFourcc(C8  ), modifier: Invalid }, DrmFormat { code: DrmFourcc(XB4H), modifier: I915_x_tiled }, DrmFormat { code: DrmFourcc(XR30), modifier: Invalid }, DrmFormat { code: DrmFourcc(XB4H), modifier: Invalid }, DrmFormat { code: DrmFourcc(XB4H), modifier: Linear }, DrmFormat { code: DrmFourcc(XB30), modifier: Invalid }, DrmFormat { code: DrmFourcc(XR24), modifier: I915_x_tiled }, DrmFormat { code: DrmFourcc(RG16), modifier: Linear }, DrmFormat { code: DrmFourcc(C8  ), modifier: I915_x_tiled }, DrmFormat { code: DrmFourcc(RG16), modifier: Invalid }, DrmFormat { code: DrmFourcc(XB30), modifier: I915_x_tiled }, DrmFormat { code: DrmFourcc(XR24), modifier: Linear }, DrmFormat { code: DrmFourcc(XB24), modifier: Linear }, DrmFormat { code: DrmFourcc(C8  ), modifier: Linear }, DrmFormat { code: DrmFourcc(RG16), modifier: I915_x_tiled }, DrmFormat { code: DrmFourcc(XB30), modifier: Linear }, DrmFormat { code: DrmFourcc(XB24), modifier: I915_x_tiled }, DrmFormat { code: DrmFourcc(XR30), modifier: Linear }}, drm_module: surface, smithay_module: backend_drm_legacy, smithay_module: backend_drm
Nov 02 20:13:33.362 TRCE Plane formats: {}, backend: drm_render
Nov 02 20:13:33.362 TRCE Renderer formats: {DrmFormat { code: DrmFourcc(AR24), modifier: Linear }, DrmFormat { code: DrmFourcc(AR24), modifier: I915_x_tiled }, DrmFormat { code: DrmFourcc(AR24), modifier: I915_y_tiled }}, backend: drm_render
Nov 02 20:13:33.363 DEBG Remaining intersected formats: {}, backend: drm_render
Nov 02 20:13:33.363 WARN Failed to create rendering surface: No supported plane buffer format found