Mesa (master): r600: handle state emit better

Alex Deucher agd5f at kemper.freedesktop.org
Sun Aug 2 22:27:43 UTC 2009


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

Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Sun Aug  2 18:26:12 2009 -0400

r600: handle state emit better

- move shader-related state with the rest of the shader setup/emit
- start to track dirty state better

---

 src/mesa/drivers/dri/r600/r600_cmdbuf.c |    3 +++
 src/mesa/drivers/dri/r600/r700_render.c |   19 +++++++++++--------
 src/mesa/drivers/dri/r600/r700_state.c  |    2 ++
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r600_cmdbuf.c b/src/mesa/drivers/dri/r600/r600_cmdbuf.c
index 8debecb..dc2fb01 100644
--- a/src/mesa/drivers/dri/r600/r600_cmdbuf.c
+++ b/src/mesa/drivers/dri/r600/r600_cmdbuf.c
@@ -457,6 +457,9 @@ void r600InitCmdBuf(context_t *r600) /* from rcommonInitCmdBuf */
     GLuint size;
     rmesa->hw.max_state_size = 4000; /* rough estimate */
 
+    rmesa->hw.all_dirty = GL_TRUE;
+    rmesa->hw.is_dirty = GL_TRUE;
+
 	/* Initialize command buffer */
 	size = 256 * driQueryOptioni(&rmesa->optionCache,
 				     "command_buffer_size");
diff --git a/src/mesa/drivers/dri/r600/r700_render.c b/src/mesa/drivers/dri/r600/r700_render.c
index 34a4385..20376d2 100644
--- a/src/mesa/drivers/dri/r600/r700_render.c
+++ b/src/mesa/drivers/dri/r600/r700_render.c
@@ -139,6 +139,13 @@ static GLboolean r700SetupShaders(GLcontext * ctx)
 
     r600UpdateTextureState(ctx);
 
+    r700SendFSState(context); // FIXME just a place holder for now
+    r700SendPSState(context);
+    r700SendVSState(context);
+
+    r700SendTextureState(context);
+    r700SetupStreams(ctx);
+
     return GL_TRUE;
 }
 
@@ -274,18 +281,16 @@ static void r700RunRenderPrimitive(GLcontext * ctx, int start, int end, int prim
 void r700EmitState(GLcontext * ctx)
 {
 	context_t *context = R700_CONTEXT(ctx);
+	radeonContextPtr radeon = &context->radeon;
+
+	if (radeon->cmdbuf.cs->cdw && !radeon->hw.is_dirty && !radeon->hw.all_dirty)
+		return;
 
 	rcommonEnsureCmdBufSpace(&context->radeon,
 				 context->radeon.hw.max_state_size, __FUNCTION__);
 
 	r700Start3D(context);
 	r700SendSQConfig(context);
-	r700SendFSState(context); // FIXME just a place holder for now
-	r700SendPSState(context);
-	r700SendVSState(context);
-
-	r700SendTextureState(context);
-	r700SetupStreams(ctx);
 
 	r700SendUCPState(context);
 	r700SendContextStates(context);
@@ -325,8 +330,6 @@ static GLboolean r700RunRender(GLcontext * ctx,
 
     radeonReleaseArrays(ctx, ~0);
 
-    rcommonFlushCmdBuf( &context->radeon, __FUNCTION__ );
-
     return GL_FALSE;
 }
 
diff --git a/src/mesa/drivers/dri/r600/r700_state.c b/src/mesa/drivers/dri/r600/r700_state.c
index b75f531..e95f524 100644
--- a/src/mesa/drivers/dri/r600/r700_state.c
+++ b/src/mesa/drivers/dri/r600/r700_state.c
@@ -1854,6 +1854,8 @@ void r700InitState(GLcontext * ctx) //-------------------
     /* Set up color compare mask */
     r700->CB_CLRCMP_MSK.u32All = 0xFFFFFFFF;
 
+    context->radeon.hw.all_dirty = GL_TRUE;
+
 }
 
 void r700InitStateFuncs(struct dd_function_table *functions) //-----------------




More information about the mesa-commit mailing list