From 55d1a77c29e2bf122e56d462aac255739b6f85e2 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Thu, 7 Jun 2018 15:44:28 -0400 Subject: [PATCH] freedreno/ir3: use pipe_image_view's cpp At least for PIPE_BUFFER, we could get the resource used as (for example) R32F imageBuffer. So using cpp=1 from the rsc is wrong. Signed-off-by: Rob Clark --- src/gallium/drivers/freedreno/ir3/ir3_shader.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/freedreno/ir3/ir3_shader.c b/src/gallium/drivers/freedreno/ir3/ir3_shader.c index 8ed7f5673c8..6ee732f9918 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_shader.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_shader.c @@ -660,9 +660,14 @@ emit_image_dims(struct fd_context *ctx, const struct ir3_shader_variant *v, img = &si->si[index]; rsc = fd_resource(img->resource); - dims[off + 0] = rsc->cpp; + dims[off + 0] = util_format_get_blocksize(img->format); if (img->resource->target != PIPE_BUFFER) { unsigned lvl = img->u.tex.level; + /* note for 2d/cube/etc images, even if re-interpreted + * as a different color format, the pixel size should + * be the same, so use original dimensions for y and z + * stride: + */ dims[off + 1] = rsc->slices[lvl].pitch * rsc->cpp; dims[off + 2] = rsc->slices[lvl].size0; } -- 2.30.2