r300g: fix emission of which textures are enabled
authorMarek Olšák <maraeo@gmail.com>
Tue, 15 Dec 2009 04:35:03 +0000 (05:35 +0100)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Wed, 16 Dec 2009 03:04:46 +0000 (19:04 -0800)
It fixes most of the "Bad CS" issues in piglit/texCombine and piglit/fbo.
Some other issues of this kind will get fixed in the kernel soon (depth-only
rendering, S3TC, and RGTC).

src/gallium/drivers/r300/r300_emit.c

index 55e4f94afe2e2ab6cc3d3b9945d514e37a8ca1a5..55c8aa07bdf5d8f433e702ad8e06f008a1decb82 100644 (file)
@@ -883,10 +883,21 @@ void r300_emit_viewport_state(struct r300_context* r300,
 
 void r300_emit_texture_count(struct r300_context* r300)
 {
+    uint32_t tx_enable = 0;
+    int i;
     CS_LOCALS(r300);
 
+    /* Notice that texture_count and sampler_count are just sizes
+     * of the respective arrays. We still have to check for the individual
+     * elements. */
+    for (i = 0; i < MIN2(r300->sampler_count, r300->texture_count); i++) {
+        if (r300->textures[i]) {
+            tx_enable |= 1 << i;
+        }
+    }
+
     BEGIN_CS(2);
-    OUT_CS_REG(R300_TX_ENABLE, (1 << r300->texture_count) - 1);
+    OUT_CS_REG(R300_TX_ENABLE, tx_enable);
     END_CS;
 
 }