[Mesa-dev] [PATCH] anv/wsi: Advertise UNORM formats as well as sRGB

Lionel Landwerlin lionel.g.landwerlin at intel.com
Thu Oct 6 23:45:01 UTC 2016


Thanks, I was wondering why those weren't available.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 05/10/16 21:26, Jason Ekstrand wrote:
> Because WSI images are created with VkImageCreateInfo::flags explicitly set
> to 0, they don't ever have the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT set.
> This means that you can't create an image view of it with a different
> format so applications can't render directly in sRGB (without automatic
> encoding) unless we actually advertise UNORM formats.  There are a lot of
> applications that want to do their own sRGB conversion, so we should allow
> for that.  We do, however, make UNORM come after sRGB in the list so that
> the default for dumb apps that just grab the first thing is to render in
> linear and let the sRGB conversion happen automatically.
>
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
>   src/intel/vulkan/anv_wsi_wayland.c | 4 ++++
>   src/intel/vulkan/anv_wsi_x11.c     | 1 +
>   2 files changed, 5 insertions(+)
>
> diff --git a/src/intel/vulkan/anv_wsi_wayland.c b/src/intel/vulkan/anv_wsi_wayland.c
> index d210e79..afce96f 100644
> --- a/src/intel/vulkan/anv_wsi_wayland.c
> +++ b/src/intel/vulkan/anv_wsi_wayland.c
> @@ -106,8 +106,10 @@ wl_drm_format_for_vk_format(VkFormat vk_format, bool alpha)
>      case VK_FORMAT_B5G5R5A1_UNORM:
>         return alpha ? WL_DRM_FORMAT_XRGB1555 : WL_DRM_FORMAT_XRGB1555;
>   #endif
> +   case VK_FORMAT_B8G8R8_UNORM:
>      case VK_FORMAT_B8G8R8_SRGB:
>         return WL_DRM_FORMAT_BGRX8888;
> +   case VK_FORMAT_B8G8R8A8_UNORM:
>      case VK_FORMAT_B8G8R8A8_SRGB:
>         return alpha ? WL_DRM_FORMAT_ARGB8888 : WL_DRM_FORMAT_XRGB8888;
>   #if 0
> @@ -163,9 +165,11 @@ drm_handle_format(void *data, struct wl_drm *drm, uint32_t wl_format)
>   #endif
>      case WL_DRM_FORMAT_XRGB8888:
>         wsi_wl_display_add_vk_format(display, VK_FORMAT_B8G8R8_SRGB);
> +      wsi_wl_display_add_vk_format(display, VK_FORMAT_B8G8R8_UNORM);
>         /* fallthrough */
>      case WL_DRM_FORMAT_ARGB8888:
>         wsi_wl_display_add_vk_format(display, VK_FORMAT_B8G8R8A8_SRGB);
> +      wsi_wl_display_add_vk_format(display, VK_FORMAT_B8G8R8A8_UNORM);
>         break;
>   #if 0
>      case WL_DRM_FORMAT_ARGB2101010:
> diff --git a/src/intel/vulkan/anv_wsi_x11.c b/src/intel/vulkan/anv_wsi_x11.c
> index 7c6ef97..25c585f 100644
> --- a/src/intel/vulkan/anv_wsi_x11.c
> +++ b/src/intel/vulkan/anv_wsi_x11.c
> @@ -123,6 +123,7 @@ wsi_x11_get_connection(struct anv_physical_device *device,
>   
>   static const VkSurfaceFormatKHR formats[] = {
>      { .format = VK_FORMAT_B8G8R8A8_SRGB, },
> +   { .format = VK_FORMAT_B8G8R8A8_UNORM, },
>   };
>   
>   static const VkPresentModeKHR present_modes[] = {




More information about the mesa-dev mailing list