r200: fix vbo array rendering
authorJerome Glisse <glisse@freedesktop.org>
Wed, 20 May 2009 20:18:31 +0000 (22:18 +0200)
committerJerome Glisse <glisse@freedesktop.org>
Wed, 20 May 2009 20:19:40 +0000 (22:19 +0200)
src/mesa/drivers/dri/r200/r200_cmdbuf.c
src/mesa/drivers/dri/radeon/radeon_dma.c

index 0487c3fcf59bee4f46457b6e762415fdc59969b6..55ea81a57cf1bb68b11b1a256076ab66a29beaf3 100644 (file)
@@ -148,12 +148,12 @@ static void r200FireEB(r200ContextPtr rmesa, int vertex_count, int type)
                                        rmesa->radeon.tcl.elt_dma_bo,
                                        rmesa->radeon.tcl.elt_dma_offset,
                                        RADEON_GEM_DOMAIN_GTT, 0, 0);
-                       OUT_BATCH(vertex_count/2);
+                       OUT_BATCH((vertex_count + 1)/2);
                } else {
                        OUT_BATCH_PACKET3(R200_CP_CMD_INDX_BUFFER, 2);
                        OUT_BATCH((0x80 << 24) | (0 << 16) | 0x810);
                        OUT_BATCH(rmesa->radeon.tcl.elt_dma_offset);
-                       OUT_BATCH(vertex_count/2);
+                       OUT_BATCH((vertex_count + 1)/2);
                        radeon_cs_write_reloc(rmesa->radeon.cmdbuf.cs,
                                              rmesa->radeon.tcl.elt_dma_bo,
                                              RADEON_GEM_DOMAIN_GTT, 0, 0);
@@ -173,8 +173,6 @@ void r200FlushElts(GLcontext *ctx)
    assert( rmesa->radeon.dma.flush == r200FlushElts );
    rmesa->radeon.dma.flush = NULL;
 
-   elt_used = (elt_used + 2) & ~2;
-
    nr = elt_used / 2;
 
    radeon_bo_unmap(rmesa->radeon.tcl.elt_dma_bo);
index 5ffee86e5a33266a90589a41b1609eb01be9ec1f..574e47ed302f25c7d20ccc8156d18a45426a056c 100644 (file)
@@ -319,6 +319,9 @@ void radeonReleaseArrays( GLcontext *ctx, GLuint newinputs )
    radeonContextPtr radeon = RADEON_CONTEXT( ctx );
    int i;
 
+   if (radeon->dma.flush) {
+       radeon->dma.flush(radeon->glCtx);
+   }
    if (radeon->tcl.elt_dma_bo) {
           radeon_bo_unref(radeon->tcl.elt_dma_bo);
           radeon->tcl.elt_dma_bo = NULL;