nv30: only bail on color/depth bpp mismatch when surfaces are swizzled
authorIlia Mirkin <imirkin@alum.mit.edu>
Wed, 31 Aug 2016 04:54:17 +0000 (00:54 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 31 Aug 2016 05:17:55 +0000 (01:17 -0400)
The actual restriction is a little weaker than I originally thought. See
https://bugs.freedesktop.org/show_bug.cgi?id=92306#c17 for the
suggestion. This also explain why things weren't *always* failing
before, only sometimes. We will allocate a non-swizzled depth buffer for
NPOT winsys buffer sizes, which they almost always are.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
src/gallium/drivers/nouveau/nv30/nv30_state.c

index 3655e0cb7f6c6c2d954df812aa77126de7d40e02..c6eddd0486c9b41896b097d4f142f02dd8b8ae15 100644 (file)
@@ -379,8 +379,9 @@ nv30_set_framebuffer_state(struct pipe_context *pipe,
        struct nv30_miptree *zeta_mt = nv30_miptree(fb->zsbuf->texture);
 
        if (color_mt->swizzled != zeta_mt->swizzled ||
-           (util_format_get_blocksize(fb->zsbuf->format) > 2) !=
-           (util_format_get_blocksize(fb->cbufs[0]->format) > 2)) {
+           (color_mt->swizzled &&
+            (util_format_get_blocksize(fb->zsbuf->format) > 2) !=
+            (util_format_get_blocksize(fb->cbufs[0]->format) > 2))) {
           nv30->framebuffer.zsbuf = NULL;
           debug_printf("Mismatched color and zeta formats, ignoring zeta.\n");
        }