r300-gallium: Fix hardlocks on trivial/clear.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Sat, 28 Feb 2009 21:27:28 +0000 (13:27 -0800)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Sat, 28 Feb 2009 21:27:28 +0000 (13:27 -0800)
I'm so happy I could cry.

src/gallium/drivers/r300/r300_state_inlines.h
src/gallium/drivers/r300/r300_surface.c

index e12540535de3df99c8bddff268baafb2a76605d7..630ac3b2fc48cd837275777a35c6936fd490e6bc 100644 (file)
@@ -323,4 +323,25 @@ static INLINE uint32_t r300_translate_zsformat(enum pipe_format format)
     return 0;
 }
 
+/* Non-CSO state. (For now.) */
+
+static INLINE uint32_t r300_translate_gb_pipes(int pipe_count)
+{
+    switch (pipe_count) {
+        case 1:
+            return R300_GB_TILE_PIPE_COUNT_RV300;
+            break;
+        case 2:
+            return R300_GB_TILE_PIPE_COUNT_R300;
+            break;
+        case 3:
+            return R300_GB_TILE_PIPE_COUNT_R420_3P;
+            break;
+        case 4:
+            return R300_GB_TILE_PIPE_COUNT_R420;
+            break;
+    }
+    return 0;
+}
+
 #endif /* R300_STATE_INLINES_H */
index 4380bf4b24a951d4a82b4c46b4fbeeb3ecbc732d..48f6dfcf86926c242b63c27ec21143649446cad0 100644 (file)
@@ -97,7 +97,8 @@ static void r300_surface_fill(struct pipe_context* pipe,
     OUT_CS_REG(R300_GB_MSPOS0, 0x66666666);
     OUT_CS_REG(R300_GB_MSPOS1, 0x66666666);
     /* XXX why doesn't classic Mesa write the number of pipes, too? */
-    OUT_CS_REG(R300_GB_TILE_CONFIG, R300_GB_TILE_ENABLE |
+    OUT_CS_REG(R300_GB_TILE_CONFIG, R300_GB_TILE_DISABLE |
+        r300_translate_gb_pipes(caps->num_frag_pipes) |
         R300_GB_TILE_SIZE_16);
     OUT_CS_REG(R300_GB_SELECT, R300_GB_FOG_SELECT_1_1_W);
     OUT_CS_REG(R300_GB_AA_CONFIG, 0x0);