r300g: Fix indexbuf upper limits.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Thu, 4 Mar 2010 20:46:20 +0000 (12:46 -0800)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Thu, 4 Mar 2010 20:49:44 +0000 (12:49 -0800)
Wine tends to pessimistically use ~0 for its max index, but r300s
only can go up to 2^24-1, causing the kernel checker to freak out.

Civ4 is marginally improved now. Still crashes, but not as bad.

src/gallium/drivers/r300/r300_render.c

index 770a92be74fa63b8a07d1eaf531a336f370cb472..6c891029a56e70f119435cbe6e7d1ee686a429d2 100644 (file)
@@ -273,9 +273,14 @@ static void r300_emit_draw_elements(struct r300_context *r300,
     CS_LOCALS(r300);
 
     assert((start * indexSize)  % 4 == 0);
+    assert(count < (1 << 24));
+
+    DBG(r300, DBG_DRAW, "r300: Indexbuf of %u indices, min %u max %u\n",
+        count, minIndex, maxIndex);
+
+    maxIndex = MIN2(maxIndex, ((1 << 24) - 1));
 
     if (alt_num_verts) {
-        assert(count < (1 << 24));
         BEGIN_CS(16);
         OUT_CS_REG(R500_VAP_ALT_NUM_VERTICES, count);
     } else {