r300g: if no colorbuffers are set, disable blending and set the color mask to 0
authorMarek Olšák <maraeo@gmail.com>
Mon, 14 Dec 2009 04:29:12 +0000 (05:29 +0100)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Wed, 16 Dec 2009 03:04:46 +0000 (19:04 -0800)
This seems to be the only way to disable the first colorbuffer.

src/gallium/drivers/r300/r300_emit.c
src/gallium/drivers/r300/r300_state.c

index 9644efb7174bd5bcfebfd118e6d6ddb7966b49b8..55e4f94afe2e2ab6cc3d3b9945d514e37a8ca1a5 100644 (file)
@@ -41,9 +41,16 @@ void r300_emit_blend_state(struct r300_context* r300,
     CS_LOCALS(r300);
     BEGIN_CS(8);
     OUT_CS_REG_SEQ(R300_RB3D_CBLEND, 3);
-    OUT_CS(blend->blend_control);
-    OUT_CS(blend->alpha_blend_control);
-    OUT_CS(blend->color_channel_mask);
+    if (r300->framebuffer_state.nr_cbufs) {
+        OUT_CS(blend->blend_control);
+        OUT_CS(blend->alpha_blend_control);
+        OUT_CS(blend->color_channel_mask);
+    } else {
+        OUT_CS(0);
+        OUT_CS(0);
+        OUT_CS(0);
+        /* XXX also disable fastfill here once it's supported */
+    }
     OUT_CS_REG(R300_RB3D_ROPCNTL, blend->rop);
     OUT_CS_REG(R300_RB3D_DITHER_CTL, blend->dither);
     END_CS;
index 3cfa2e63f902a5441e553f0801d2d5c020857cd2..91cf972edee4fa46d026f3b09b645d62c6444c3b 100644 (file)
@@ -339,6 +339,7 @@ static void
         r300->dirty_state |= R300_NEW_SCISSOR;
     }
     r300->dirty_state |= R300_NEW_FRAMEBUFFERS;
+    r300->dirty_state |= R300_NEW_BLEND;
 }
 
 /* Create fragment shader state. */