summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Barbieri <luca@luca-barbieri.com>2010-09-04 17:48:19 +0200
committerLuca Barbieri <luca@luca-barbieri.com>2010-09-04 22:45:21 +0200
commitf7392eb23a700ab7a131f4a0d23426996ac352a5 (patch)
treeaad81953b043bb1ddae45145fb37e493887f403b
parent280665be7026c978acead9713c10271c36a571ee (diff)
nvfx: prevent swizzled rendering into formats where it's not supported
-rw-r--r--src/gallium/drivers/nvfx/nvfx_state_fb.c6
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