nvfx: prevent swizzled rendering into formats where it's not supported
authorLuca Barbieri <luca@luca-barbieri.com>
Sat, 4 Sep 2010 15:48:19 +0000 (17:48 +0200)
committerLuca Barbieri <luca@luca-barbieri.com>
Sat, 4 Sep 2010 20:45:21 +0000 (22:45 +0200)
src/gallium/drivers/nvfx/nvfx_state_fb.c

index b9d30c4eb136b1e308dd6f3e1acfdd64983e9e1f..667b0843c0d5cc4ac43f7b1825832687176f7c45 100644 (file)
@@ -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