From f30aab400463d186e9cabb59fddbb5896e316a0a Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 7 Jun 2021 17:01:59 -0400 Subject: [PATCH] panfrost: Fix BUFFER image handling Fixes: KHR-GLES31.core.shader_image_load_store.advanced-allMips-cs KHR-GLES31.core.shader_image_load_store.advanced-allMips-fs Signed-off-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index dc62c73..68ae632 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -1555,20 +1555,32 @@ emit_image_bufs(struct panfrost_batch *batch, enum pipe_shader_type shader, cfg.size = rsrc->image.data.bo->size; } + if (is_buffer) { + pan_pack(bufs + (i * 2) + 1, ATTRIBUTE_BUFFER_CONTINUATION_3D, cfg) { + cfg.s_dimension = rsrc->base.width0 / + util_format_get_blocksize(image->format); + cfg.t_dimension = cfg.r_dimension = 1; + } + + continue; + } + pan_pack(bufs + (i * 2) + 1, ATTRIBUTE_BUFFER_CONTINUATION_3D, cfg) { - cfg.s_dimension = rsrc->base.width0; - cfg.t_dimension = rsrc->base.height0; - cfg.r_dimension = is_buffer ? 1 : - is_3d ? rsrc->base.depth0 : + unsigned level = image->u.tex.level; + + cfg.s_dimension = u_minify(rsrc->base.width0, level); + cfg.t_dimension = u_minify(rsrc->base.height0, level); + cfg.r_dimension = is_3d ? + u_minify(rsrc->base.depth0, level) : image->u.tex.last_layer - image->u.tex.first_layer + 1; cfg.row_stride = - is_buffer ? 0 : rsrc->image.layout.slices[image->u.tex.level].row_stride; + rsrc->image.layout.slices[level].row_stride; - if (rsrc->base.target != PIPE_TEXTURE_2D && !is_buffer) { + if (rsrc->base.target != PIPE_TEXTURE_2D) { cfg.slice_stride = panfrost_get_layer_stride(&rsrc->image.layout, - image->u.tex.level); + level); } } } -- 2.7.4