summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2012-08-16 19:05:22 +0200
committerMarek Olšák <maraeo@gmail.com>2012-08-16 20:44:54 +0200
commit6fd9218bb44b8719da60ce325d4f41c4a611e871 (patch)
treef19f16d39f75ed72442a4ce95cc6fa79780476ad
parentb8e9cf5d965ce09227cd9875c4381c73f237f196 (diff)
downloadmesa-6fd9218bb44b8719da60ce325d4f41c4a611e871.tar.gz
mesa-6fd9218bb44b8719da60ce325d4f41c4a611e871.tar.xz
mesa-6fd9218bb44b8719da60ce325d4f41c4a611e871.zip
r600g: fix copying between NPOT mipmapped compressed textures
We aligned the dimensions to the blocksize, then divided by it (in r600_blit.c), then minified, which was wrong. The minification must be done first, not last. This fixes piglit/fbo-generatemipmap-formats with S3TC and maybe a bunch of other tests too. Tested on RV730.
-rw-r--r--src/gallium/drivers/r600/r600_texture.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index ac49038c47..c1499e6633 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -340,6 +340,7 @@ static struct pipe_surface *r600_create_surface(struct pipe_context *pipe,
struct pipe_resource *texture,
const struct pipe_surface *templ)
{
+ struct r600_texture *rtex = (struct r600_texture*)texture;
struct r600_surface *surface = CALLOC_STRUCT(r600_surface);
unsigned level = templ->u.tex.level;
@@ -350,8 +351,8 @@ static struct pipe_surface *r600_create_surface(struct pipe_context *pipe,
pipe_resource_reference(&surface->base.texture, texture);
surface->base.context = pipe;
surface->base.format = templ->format;
- surface->base.width = u_minify(texture->width0, level);
- surface->base.height = u_minify(texture->height0, level);
+ surface->base.width = rtex->surface.level[level].npix_x;
+ surface->base.height = rtex->surface.level[level].npix_y;
surface->base.usage = templ->usage;
surface->base.u = templ->u;
return &surface->base;