zink: support PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_FREEDRENO
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 22 Jun 2022 13:16:17 +0000 (09:16 -0400)
committerMarge Bot <emma+marge@anholt.net>
Thu, 7 Jul 2022 20:39:31 +0000 (20:39 +0000)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17189>

src/gallium/drivers/zink/zink_context.c
src/gallium/drivers/zink/zink_screen.c

index 5552522..12190f4 100644 (file)
@@ -379,7 +379,7 @@ zink_create_sampler_state(struct pipe_context *pctx,
          warn_missing_feature(warned, "customBorderColorWithoutFormat");
       }
       if (screen->info.have_EXT_custom_border_color &&
-          screen->info.border_color_feats.customBorderColorWithoutFormat) {
+          (screen->info.border_color_feats.customBorderColorWithoutFormat || state->border_color_format)) {
          if (!screen->info.have_EXT_border_color_swizzle) {
             static bool warned = false;
             warn_missing_feature(warned, "VK_EXT_border_color_swizzle");
@@ -401,7 +401,7 @@ zink_create_sampler_state(struct pipe_context *pctx,
             }
          }
          cbci.sType = VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT;
-         cbci.format = VK_FORMAT_UNDEFINED;
+         cbci.format = screen->info.border_color_feats.customBorderColorWithoutFormat ? VK_FORMAT_UNDEFINED : zink_get_format(screen, state->border_color_format);
          /* these are identical unions */
          memcpy(&cbci.customBorderColor, &state->border_color, sizeof(union pipe_color_union));
          cbci.pNext = sci.pNext;
index 612a4cc..b37ec89 100644 (file)
@@ -532,6 +532,8 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
       return 0;
 
    case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
+      if (!screen->info.border_color_feats.customBorderColorWithoutFormat)
+         return PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_FREEDRENO;
       /* assume that if drivers don't implement this extension they either:
        * - don't support custom border colors
        * - handle things correctly