From fae8aeae44a599beb6bd1e955e483895f583cc79 Mon Sep 17 00:00:00 2001 From: Nicolai Hähnle Date: Tue, 6 Jun 2017 19:21:26 +0200 Subject: gallium/radeon/gfx9: fix PBO texture uploads to compressed textures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit st/mesa creates a surface that reinterprets the compressed blocks as RGBA16UI or RGBA32UI. We have to adjust width0 & height0 accordingly to avoid out-of-bounds memory accesses by CB. Cc: 17.1 Reviewed-by: Marek Olšák (cherry picked from commit 25e5534734b7de2a2359c42eeff5fd0c3c0507da) --- src/gallium/drivers/radeon/r600_texture.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c index 57e3960268f..3ee1a2057ff 100644 --- a/src/gallium/drivers/radeon/r600_texture.c +++ b/src/gallium/drivers/radeon/r600_texture.c @@ -1965,6 +1965,8 @@ static struct pipe_surface *r600_create_surface(struct pipe_context *pipe, unsigned level = templ->u.tex.level; unsigned width = u_minify(tex->width0, level); unsigned height = u_minify(tex->height0, level); + unsigned width0 = tex->width0; + unsigned height0 = tex->height0; if (tex->target != PIPE_BUFFER && templ->format != tex->format) { const struct util_format_description *tex_desc @@ -1983,11 +1985,14 @@ static struct pipe_surface *r600_create_surface(struct pipe_context *pipe, width = nblks_x * templ_desc->block.width; height = nblks_y * templ_desc->block.height; + + width0 = util_format_get_nblocksx(tex->format, width0); + height0 = util_format_get_nblocksy(tex->format, height0); } } return r600_create_surface_custom(pipe, tex, templ, - tex->width0, tex->height0, + width0, height0, width, height); } -- cgit v1.2.3