Module: Mesa
Branch: main
Commit: e233eee492f8169ecbc6420a26ba73d92bc1ee03
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e233eee492f8169ecbc6420a26ba73d92bc1ee03

Author: Erik Faye-Lund <erik.faye-l...@collabora.com>
Date:   Wed Nov 15 10:10:58 2023 +0100

lavapipe: do not use NONE-swizzle

The NONE-swizzle isn't supported for texture views in LLVMpipe, because
it's not meant for this purpose in the first place.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26192>

---

 src/gallium/frontends/lavapipe/lvp_conv.h  | 6 ++++--
 src/gallium/frontends/lavapipe/lvp_image.c | 8 ++++----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/gallium/frontends/lavapipe/lvp_conv.h 
b/src/gallium/frontends/lavapipe/lvp_conv.h
index 2dd3cd20d24..5ebb46445f4 100644
--- a/src/gallium/frontends/lavapipe/lvp_conv.h
+++ b/src/gallium/frontends/lavapipe/lvp_conv.h
@@ -110,7 +110,8 @@ static inline unsigned vk_conv_wrap_mode(enum 
VkSamplerAddressMode addr_mode)
    }
 }
 
-static inline enum pipe_swizzle vk_conv_swizzle(VkComponentSwizzle swiz)
+static inline enum pipe_swizzle vk_conv_swizzle(VkComponentSwizzle swiz,
+                                                enum pipe_swizzle identity)
 {
    switch (swiz) {
    case VK_COMPONENT_SWIZZLE_ZERO:
@@ -126,7 +127,8 @@ static inline enum pipe_swizzle 
vk_conv_swizzle(VkComponentSwizzle swiz)
    case VK_COMPONENT_SWIZZLE_A:
       return PIPE_SWIZZLE_W;
    case VK_COMPONENT_SWIZZLE_IDENTITY:
+      return identity;
    default:
-      return PIPE_SWIZZLE_NONE;
+      unreachable("Invalid VkComponentSwizzle value");
    }
 }
diff --git a/src/gallium/frontends/lavapipe/lvp_image.c 
b/src/gallium/frontends/lavapipe/lvp_image.c
index 0b9a58f6472..31faf18a1cc 100644
--- a/src/gallium/frontends/lavapipe/lvp_image.c
+++ b/src/gallium/frontends/lavapipe/lvp_image.c
@@ -230,10 +230,10 @@ lvp_create_samplerview(struct pipe_context *pctx, struct 
lvp_image_view *iv, VkF
    templ.u.tex.last_layer = iv->vk.base_array_layer + iv->vk.layer_count - 1;
    templ.u.tex.first_level = iv->vk.base_mip_level;
    templ.u.tex.last_level = iv->vk.base_mip_level + iv->vk.level_count - 1;
-   templ.swizzle_r = vk_conv_swizzle(iv->vk.swizzle.r);
-   templ.swizzle_g = vk_conv_swizzle(iv->vk.swizzle.g);
-   templ.swizzle_b = vk_conv_swizzle(iv->vk.swizzle.b);
-   templ.swizzle_a = vk_conv_swizzle(iv->vk.swizzle.a);
+   templ.swizzle_r = vk_conv_swizzle(iv->vk.swizzle.r, PIPE_SWIZZLE_X);
+   templ.swizzle_g = vk_conv_swizzle(iv->vk.swizzle.g, PIPE_SWIZZLE_Y);
+   templ.swizzle_b = vk_conv_swizzle(iv->vk.swizzle.b, PIPE_SWIZZLE_Z);
+   templ.swizzle_a = vk_conv_swizzle(iv->vk.swizzle.a, PIPE_SWIZZLE_W);
 
    /* depth stencil swizzles need special handling to pass VK CTS
     * but also for zink GL tests.

Reply via email to