freedreno: fix staging resource size for arrays
authorRob Clark <robdclark@gmail.com>
Wed, 2 Jan 2019 18:24:31 +0000 (13:24 -0500)
committerRob Clark <robdclark@gmail.com>
Thu, 3 Jan 2019 13:11:40 +0000 (08:11 -0500)
A 2d-array texture (for example), should get the # of array elements
from box->depth, rather than depth0 which is minified.

Fixes dEQP-GLES3.functional.shaders.texture_functions.texture.sampler2darray_bias_float_fragment
with tiled textures.

Reported-by: Kristian H. Kristensen <hoegsberg@chromium.org>
Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/freedreno_resource.c

index 838881cf1502c1f2bf3bfcb2b662526127ecb2db..f19f38add8552bd7a265394f8ad62d8aa8112459 100644 (file)
@@ -294,8 +294,16 @@ fd_alloc_staging(struct fd_context *ctx, struct fd_resource *rsc,
 
        tmpl.width0  = box->width;
        tmpl.height0 = box->height;
-       tmpl.depth0  = box->depth;
-       tmpl.array_size = 1;
+       /* for array textures, box->depth is the array_size, otherwise
+        * for 3d textures, it is the depth:
+        */
+       if (tmpl.array_size > 1) {
+               tmpl.array_size = box->depth;
+               tmpl.depth0 = 1;
+       } else {
+               tmpl.array_size = 1;
+               tmpl.depth0 = box->depth;
+       }
        tmpl.last_level = 0;
        tmpl.bind |= PIPE_BIND_LINEAR;