zink: use better mapping for PIPE_FORMAT_X24S8_UINT
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 10 Feb 2021 14:47:57 +0000 (09:47 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 10 Feb 2021 20:20:38 +0000 (20:20 +0000)
this needs to be unconditionally supported in some way, and it also
needs to use a more compatible fallback format if the base format is unavailable

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8959>

src/gallium/drivers/zink/zink_screen.c

index 6a30c1f4a744cfd9110d62c9cc8b2584832a8156..b5b1896f0cb2ebbcb7e722b53eace15a94ca0b39 100644 (file)
@@ -906,6 +906,11 @@ zink_get_format(struct zink_screen *screen, enum pipe_format format)
 {
    VkFormat ret = zink_pipe_format_to_vk_format(emulate_x8(format));
 
+   if (format == PIPE_FORMAT_X24S8_UINT)
+      /* valid when using aspects to extract stencil,
+       * fails format test because it's emulated */
+      ret = VK_FORMAT_D24_UNORM_S8_UINT;
+
    if (ret == VK_FORMAT_X8_D24_UNORM_PACK32 &&
        !screen->have_X8_D24_UNORM_PACK32) {
       assert(zink_is_depth_format_supported(screen, VK_FORMAT_D32_SFLOAT));
@@ -925,11 +930,6 @@ zink_get_format(struct zink_screen *screen, enum pipe_format format)
         !screen->info.format_4444_feats.formatA4R4G4B4))
       return VK_FORMAT_UNDEFINED;
 
-   if (format == PIPE_FORMAT_X24S8_UINT)
-      /* valid when using aspects to extract stencil,
-       * fails format test because it's emulated */
-      return VK_FORMAT_X8_D24_UNORM_PACK32;
-
    return ret;
 }