Module: Mesa
Branch: master
Commit: 8c486083d0c132c42e4ad750ebb2fd0f3d5fa2d6
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c486083d0c132c42e4ad750ebb2fd0f3d5fa2d6

Author: Rob Clark <[email protected]>
Date:   Tue Feb 19 08:51:30 2019 -0500

freedreno/a6xx: 3d and cube image fixes

Fixes dEQP-GLES31.functional.image_load_store.{3d,cube}.store.*
and a bunch more

Signed-off-by: Rob Clark <[email protected]>

---

 src/gallium/drivers/freedreno/a6xx/fd6_image.c | 35 +++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_image.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_image.c
index 153c00435f6..e7874139bec 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_image.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_image.c
@@ -85,14 +85,39 @@ static void translate_image(struct fd6_image *img, const 
struct pipe_image_view
                img->depth  = 0;
        } else {
                img->buffer = false;
+
                unsigned lvl = pimg->u.tex.level;
-               img->offset = rsc->slices[lvl].offset;
+               unsigned layers = pimg->u.tex.last_layer - 
pimg->u.tex.first_layer + 1;
+
+               img->offset = fd_resource_offset(rsc, lvl, 
pimg->u.tex.first_layer);
                img->pitch  = rsc->slices[lvl].pitch * rsc->cpp;
-               img->array_pitch = rsc->layer_size;
+
+               switch (prsc->target) {
+               case PIPE_TEXTURE_RECT:
+               case PIPE_TEXTURE_1D:
+               case PIPE_TEXTURE_2D:
+                       img->array_pitch = rsc->layer_size;
+                       img->depth = 1;
+                       break;
+               case PIPE_TEXTURE_1D_ARRAY:
+               case PIPE_TEXTURE_2D_ARRAY:
+               case PIPE_TEXTURE_CUBE:
+               case PIPE_TEXTURE_CUBE_ARRAY:
+                       img->array_pitch = rsc->layer_size;
+                       // TODO the CUBE/CUBE_ARRAY might need to be layers/6 
for tex state,
+                       // but empirically for ibo state it shouldn't be 
divided.
+                       img->depth = layers;
+                       break;
+               case PIPE_TEXTURE_3D:
+                       img->array_pitch = rsc->slices[lvl].size0;
+                       img->depth  = u_minify(prsc->depth0, lvl);
+                       break;
+               default:
+                       break;
+               }
 
                img->width  = u_minify(prsc->width0, lvl);
                img->height = u_minify(prsc->height0, lvl);
-               img->depth  = u_minify(prsc->depth0, lvl);
        }
 }
 
@@ -132,9 +157,11 @@ static void translate_buf(struct fd6_image *img, const 
struct pipe_shader_buffer
 
 static void emit_image_tex(struct fd_ringbuffer *ring, struct fd6_image *img)
 {
+       debug_assert(fd_resource(img->prsc)->tile_mode == 0);
+
        OUT_RING(ring, A6XX_TEX_CONST_0_FMT(img->fmt) |
                A6XX_TEX_CONST_0_TILE_MODE(fd_resource(img->prsc)->tile_mode) |
-               fd6_tex_swiz(img->prsc, img->fmt, PIPE_SWIZZLE_X, 
PIPE_SWIZZLE_Y,
+               fd6_tex_swiz(img->prsc, img->pfmt, PIPE_SWIZZLE_X, 
PIPE_SWIZZLE_Y,
                        PIPE_SWIZZLE_Z, PIPE_SWIZZLE_W) |
                COND(img->srgb, A6XX_TEX_CONST_0_SRGB));
        OUT_RING(ring, A6XX_TEX_CONST_1_WIDTH(img->width) |

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to