From 6fd9218bb44b8719da60ce325d4f41c4a611e871 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 16 Aug 2012 19:05:22 +0200 Subject: [PATCH] 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. --- src/gallium/drivers/r600/r600_texture.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c index ac49038..c1499e6 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; -- 2.7.4