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.
This commit is contained in:
parent
b8e9cf5d96
commit
6fd9218bb4
|
@ -340,6 +340,7 @@ static struct pipe_surface *r600_create_surface(struct pipe_context *pipe,
|
||||||
struct pipe_resource *texture,
|
struct pipe_resource *texture,
|
||||||
const struct pipe_surface *templ)
|
const struct pipe_surface *templ)
|
||||||
{
|
{
|
||||||
|
struct r600_texture *rtex = (struct r600_texture*)texture;
|
||||||
struct r600_surface *surface = CALLOC_STRUCT(r600_surface);
|
struct r600_surface *surface = CALLOC_STRUCT(r600_surface);
|
||||||
unsigned level = templ->u.tex.level;
|
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);
|
pipe_resource_reference(&surface->base.texture, texture);
|
||||||
surface->base.context = pipe;
|
surface->base.context = pipe;
|
||||||
surface->base.format = templ->format;
|
surface->base.format = templ->format;
|
||||||
surface->base.width = u_minify(texture->width0, level);
|
surface->base.width = rtex->surface.level[level].npix_x;
|
||||||
surface->base.height = u_minify(texture->height0, level);
|
surface->base.height = rtex->surface.level[level].npix_y;
|
||||||
surface->base.usage = templ->usage;
|
surface->base.usage = templ->usage;
|
||||||
surface->base.u = templ->u;
|
surface->base.u = templ->u;
|
||||||
return &surface->base;
|
return &surface->base;
|
||||||
|
|
Loading…
Reference in New Issue