asahi: Use a 2D Array texture for array render targets
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Wed, 16 Aug 2023 19:53:13 +0000 (15:53 -0400)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 1 Oct 2023 16:37:55 +0000 (12:37 -0400)
Fixes KHR-GLES31.core.geometry_shader.layered_framebuffer.blending_support with
eMRT forced.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
src/gallium/drivers/asahi/agx_state.c

index 524483d4568e8657759b16c6b51ca956022acf74..454d72b2c23f1388376566632e828e8315645853 100644 (file)
@@ -1073,12 +1073,13 @@ image_view_for_surface(struct pipe_surface *surf)
 static struct pipe_sampler_view
 sampler_view_for_surface(struct pipe_surface *surf)
 {
+   bool layered = surf->u.tex.last_layer > surf->u.tex.first_layer;
+
    return (struct pipe_sampler_view){
-      /* To reduce shader variants, we always use a 2D
-       * texture. For reloads of arrays and cube maps, we
-       * map a single layer as a 2D image.
+      /* To reduce shader variants, we always use a 2D texture. For reloads of
+       * arrays and cube maps, we map a single layer as a 2D image.
        */
-      .target = PIPE_TEXTURE_2D,
+      .target = layered ? PIPE_TEXTURE_2D_ARRAY : PIPE_TEXTURE_2D,
       .swizzle_r = PIPE_SWIZZLE_X,
       .swizzle_g = PIPE_SWIZZLE_Y,
       .swizzle_b = PIPE_SWIZZLE_Z,