Mesa (master): r600: try and get everything in the draw in one IB

Alex Deucher agd5f at kemper.freedesktop.org
Thu Aug 20 16:13:08 UTC 2009


Module: Mesa
Branch: master
Commit: 0f0a9e3ee752f1746d6dba748522fb3e15e4af1a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0f0a9e3ee752f1746d6dba748522fb3e15e4af1a

Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Thu Aug 20 12:10:42 2009 -0400

r600: try and get everything in the draw in one IB

fixes corruption issues with apps like teapot and
geartrain.

---

 src/mesa/drivers/dri/r600/r700_render.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_render.c b/src/mesa/drivers/dri/r600/r700_render.c
index 58b4491..80df78f 100644
--- a/src/mesa/drivers/dri/r600/r700_render.c
+++ b/src/mesa/drivers/dri/r600/r700_render.c
@@ -341,10 +341,9 @@ void r700EmitState(GLcontext * ctx)
 		return;
 
 	rcommonEnsureCmdBufSpace(&context->radeon,
-				 context->radeon.hw.max_state_size, __FUNCTION__);
+				 652, __FUNCTION__);
 
 	r700SendSQConfig(context);
-
 	r700SendUCPState(context);
 	r700SendContextStates(context);
 	r700SendViewportState(context, 0);
@@ -357,10 +356,18 @@ static GLboolean r700RunRender(GLcontext * ctx,
 			                   struct tnl_pipeline_stage *stage)
 {
     context_t *context = R700_CONTEXT(ctx);
-    unsigned int i;
+    radeonContextPtr radeon = &context->radeon;
+    unsigned int i, ind_count = 0;
     TNLcontext *tnl = TNL_CONTEXT(ctx);
     struct vertex_buffer *vb = &tnl->vb;
 
+    for (i = 0; i < vb->PrimitiveCount; i++)
+	    ind_count += vb->Primitive[i].count + 10;
+
+    /* just an estimate, need to properly calculate this */
+    rcommonEnsureCmdBufSpace(&context->radeon,
+			     radeon->hw.max_state_size + ind_count, __FUNCTION__);
+
     r700Start3D(context);
 
     r700UpdateShaders(ctx);




More information about the mesa-commit mailing list