** Tags added: kernel-daily-bug -- You received this bug notification because you are subscribed to linux in Ubuntu. Matching subscriptions: Bgg, Bmail, Nb https://bugs.launchpad.net/bugs/2154769 Title: amdgpu forces YCbCr 4:4:4 on compatible HDMI monitors Status in linux package in Ubuntu: New Bug description: The amdgpu driver has a logic bug that forces YCbCr 4:4:4 on monitors that support the signal format, despite being suboptimal for desktop purposes. This YCbCr mode causes washed out colors and patterns due to the multiple lossy conversions (desktop framebuffer in RGB -> YCbCr over HDMI -> RGB for driving the LCD panel), as well as forcing "limited RGB (16-235)" which causes even further signal degradation. This is a widespread known issue, with multiple bug reports over the internet dating back to 2018, and with advanced EDID workarounds as the only solution: - https://lists.freedesktop.org/archives/amd-gfx/2021-May/063434.html - https://monado.freedesktop.org/edid-override.html - https://www.wezm.net/v2/posts/2020/linux-amdgpu-pixel-format/ - https://www.camillescott.org/2020/12/16/amdgpu-edid/ This is caused by the function fill_stream_properties_from_drm_display_mode in drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c: /* TODO: un-hardcode */ if (drm_mode_is_420_only(info, mode_in) && stream->signal == SIGNAL_TYPE_HDMI_TYPE_A) timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420; else if (drm_mode_is_420_also(info, mode_in) && aconnector && aconnector->force_yuv420_output) timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420; else if ((connector->display_info.color_formats & BIT(DRM_OUTPUT_COLOR_FORMAT_YCBCR422)) && aconnector && aconnector->force_yuv422_output) timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR422; else if ((connector->display_info.color_formats & BIT(DRM_OUTPUT_COLOR_FORMAT_YCBCR444)) && stream->signal == SIGNAL_TYPE_HDMI_TYPE_A) timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR444; else timing_out->pixel_encoding = PIXEL_ENCODING_RGB; While YCbCr 4:2:0 and YCbCr 4:2:2 can be manually enabled and disabling using properties of the display, YCbCr 4:4:4 is forced by the function logic as long as supported by the display. Until the patches for manually changing the pixel encoding are merged (https://lkml.org/lkml/2026/3/24/1938 is the latest version from 2026, the first being from 2021), I suggest that the function is modified to *never* output YCbCr 4:4:4, by eg using a "#ifdef 0" block. Rationale being: - Intel and NVidia already prefer RGB 4:4:4, so this would make amdgpu behave as the other two mainstream drivers. - Unlike YCbCr 4:2:2 or 4:2:0 which result in lower bandwidth, YCbCr 4:4:4 uses the exact same HDMI bandwidth as RGB 4:4:4, so there is bandwidth budgetary reasons that would make it a preferred option over eg limited HDMI links. - YCbCr 4:4:4 is an optional mode specified in EDID. The CEA-861 standard *mandates* that all YCbCr 4:4:4 displays also support RGB, so supporting this mode does not allow using any more displays than RGB alone. To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2154769/+subscriptions
Комментариев нет:
Отправить комментарий