st/mesa: fix PBO download for TEXTURE_1D_ARRAY textures
authorYevhenii Kharchenko <yevhenii.kharchenko@globallogic.com>
Thu, 4 Feb 2021 10:23:30 +0000 (12:23 +0200)
committerMarge Bot <eric+marge@anholt.net>
Fri, 19 Feb 2021 19:29:57 +0000 (19:29 +0000)
Fixes 'nir_tex_src_coord' param was provided to NIR 'txf' operation as a
vec3 for TEXTURE_1D_ARRAY target, causing an assert.
Only following targets require vec3: TEXTURE_2D_ARRAY, TEXTURE_3D,
TEXTURE_CUBE, TEXTURE_CUBE_ARRAY. The rest must use vec2.

Packing layer value into Y-coordinate the same way it was done in
'create_fs' in commit 2bf6dfac.

Fixes: a01ad311 ("st/mesa: Add NIR versions of the PBO upload/download
shaders. ")

Signed-off-by: Yevhenii Kharchenko <yevhenii.kharchenko@globallogic.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9014>

src/mesa/state_tracker/st_pbo.c

index b4326aa..ddd3a19 100644 (file)
@@ -486,9 +486,14 @@ create_fs(struct st_context *st, bool download,
             src_layer = nir_iadd(&b, layer, layer_offset);
          }
 
-         texcoord = nir_vec3(&b, nir_channel(&b, texcoord, 0),
-                                 nir_channel(&b, texcoord, 1),
-                                 src_layer);
+         if (target == PIPE_TEXTURE_1D_ARRAY) {
+            texcoord = nir_vec2(&b, nir_channel(&b, texcoord, 0),
+                                    src_layer);
+         } else {
+            texcoord = nir_vec3(&b, nir_channel(&b, texcoord, 0),
+                                    nir_channel(&b, texcoord, 1),
+                                    src_layer);
+         }
       }
    } else {
       texcoord = pbo_addr;