r300: fix vertex limits
authorMaciej Cencora <m.cencora@gmail.com>
Mon, 29 Jun 2009 17:50:39 +0000 (19:50 +0200)
committerMaciej Cencora <m.cencora@gmail.com>
Sun, 5 Jul 2009 13:22:37 +0000 (15:22 +0200)
- don't limit vertex count if we are using indices
- max indices count is 65535 not 65536
- remove some comments that don't apply anymore
- remove unreachable code

src/mesa/drivers/dri/r300/r300_draw.c
src/mesa/drivers/dri/r300/r300_render.c

index 92bb0ee3385b33aaef6f4db8f1a1d77729cbd173..20fe8dbf17f7290048e70946e7e4bd6cf8c87e3b 100644 (file)
@@ -442,8 +442,6 @@ static GLboolean r300TryDrawPrims(GLcontext *ctx,
        return GL_TRUE;
 }
 
-/* TODO: rebase if number of indices in any of primitives is > 8192 for 32bit indices or 16384 for 16bit indices */
-
 static void r300DrawPrims(GLcontext *ctx,
                         const struct gl_client_array *arrays[],
                         const struct _mesa_prim *prim,
@@ -455,7 +453,11 @@ static void r300DrawPrims(GLcontext *ctx,
        struct split_limits limits;
        GLboolean retval;
 
-       limits.max_verts = 65535;
+       if (ib)
+               limits.max_verts = 0xffffffff;
+       else
+               limits.max_verts = 65535;
+
        limits.max_indices = 65535;
        limits.max_vb_size = 1024*1024;
 
@@ -463,7 +465,7 @@ static void r300DrawPrims(GLcontext *ctx,
                vbo_rebase_prims( ctx, arrays, prim, nr_prims, ib, min_index, max_index, r300DrawPrims );
                return;
        }
-       if ((ib && ib->count > 65536)) {
+       if ((ib && ib->count > 65535)) {
                vbo_split_prims (ctx, arrays, prim, nr_prims, ib, min_index, max_index, r300DrawPrims, &limits);
                return;
        }
index bf50b062f6ce65ac9ded40bcc4eb2c9a531dd623..36c5ca74abb26d9f3aec3fc25b4c006338bd4570 100644 (file)
@@ -359,31 +359,14 @@ void r300RunRenderPrimitive(GLcontext * ctx, int start, int end, int prim)
        if (type < 0 || num_verts <= 0)
                return;
 
-       /* Make space for at least 64 dwords.
+       /* Make space for at least 128 dwords.
         * This is supposed to ensure that we can get all rendering
         * commands into a single command buffer.
         */
        rcommonEnsureCmdBufSpace(&rmesa->radeon, 128, __FUNCTION__);
 
        if (rmesa->ind_buf.ptr) {
-               if (num_verts > 65535) {
-                       /* not implemented yet */
-                       WARN_ONCE("Too many elts\n");
-                       return;
-               }
-               /* Note: The following is incorrect, but it's the best I can do
-                * without a major refactoring of how DMA memory is handled.
-                * The problem: Ensuring that both vertex arrays *and* index
-                * arrays are at the right position, and then ensuring that
-                * the LOAD_VBPNTR, DRAW_INDX and INDX_BUFFER packets are emitted
-                * at once.
-                *
-                * So why is the following incorrect? Well, it seems like
-                * allocating the index array might actually evict the vertex
-                * arrays. *sigh*
-                */
                r300EmitElts(ctx, num_verts);
-               /* don't pass start if we are split up */
                r300EmitAOS(rmesa, rmesa->radeon.tcl.aos_count, 0);
                if (rmesa->radeon.radeonScreen->kernel_mm) {
                        BEGIN_BATCH_NO_AUTOSTATE(2);