diff options
author | Luca Barbieri <[email protected]> | 2010-09-04 17:48:19 +0200 |
---|---|---|
committer | Luca Barbieri <[email protected]> | 2010-09-04 22:45:21 +0200 |
commit | f7392eb23a700ab7a131f4a0d23426996ac352a5 (patch) | |
tree | aad81953b043bb1ddae45145fb37e493887f403b /src/gallium | |
parent | 280665be7026c978acead9713c10271c36a571ee (diff) |
nvfx: prevent swizzled rendering into formats where it's not supported
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/nvfx/nvfx_state_fb.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/gallium/drivers/nvfx/nvfx_state_fb.c b/src/gallium/drivers/nvfx/nvfx_state_fb.c index b9d30c4eb13..667b0843c0d 100644 --- a/src/gallium/drivers/nvfx/nvfx_state_fb.c +++ b/src/gallium/drivers/nvfx/nvfx_state_fb.c @@ -5,6 +5,7 @@ static inline boolean nvfx_surface_linear_renderable(struct pipe_surface* surf) { + /* TODO: precompute this in nvfx_surface creation */ return (surf->texture->flags & NVFX_RESOURCE_FLAG_LINEAR) && !(surf->offset & 63) && !(((struct nvfx_surface*)surf)->pitch & 63); @@ -13,13 +14,14 @@ nvfx_surface_linear_renderable(struct pipe_surface* surf) static inline boolean nvfx_surface_swizzled_renderable(struct pipe_framebuffer_state* fb, struct pipe_surface* surf) { - /* TODO: return FALSE if we have a format not supporting swizzled rendering (e.g. r8); currently those are not supported at all */ + /* TODO: precompute this in nvfx_surface creation */ return !((struct nvfx_miptree*)surf->texture)->linear_pitch && (surf->texture->target != PIPE_TEXTURE_3D || u_minify(surf->texture->depth0, surf->level) <= 1) && !(surf->offset & 127) && (surf->width == fb->width) && (surf->height == fb->height) - && !((struct nvfx_surface*)surf)->temp; + && !((struct nvfx_surface*)surf)->temp + && (surf->format == PIPE_FORMAT_B8G8R8A8_UNORM || surf->format == PIPE_FORMAT_B8G8R8X8_UNORM || surf->format == PIPE_FORMAT_B5G6R5_UNORM); } static boolean |