Mesa (master): r600g: avoid rebuilding the vertex shader if no change to input format

Jerome Glisse glisse at kemper.freedesktop.org
Tue Sep 28 18:35:31 UTC 2010


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

Author: Jerome Glisse <jglisse at redhat.com>
Date:   Tue Sep 28 14:34:25 2010 -0400

r600g: avoid rebuilding the vertex shader if no change to input format

Signed-off-by: Jerome Glisse <jglisse at redhat.com>

---

 src/gallium/drivers/r600/r600_pipe.h   |   14 ++++++++------
 src/gallium/drivers/r600/r600_state2.c |    4 ++++
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h
index 5abf910..e161dc5 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -69,12 +69,6 @@ struct r600_pipe_blend {
 	unsigned			cb_target_mask;
 };
 
-struct r600_pipe_shader {
-	struct r600_shader		shader;
-	struct r600_pipe_state		rstate;
-	struct radeon_ws_bo		*bo;
-};
-
 struct r600_vertex_element
 {
 	unsigned			count;
@@ -82,6 +76,14 @@ struct r600_vertex_element
 	struct pipe_vertex_element	elements[32];
 };
 
+struct r600_pipe_shader {
+	struct r600_shader		shader;
+	struct r600_pipe_state		rstate;
+	struct radeon_ws_bo		*bo;
+	struct r600_vertex_element	vertex_elements;
+};
+
+
 struct r600_pipe_context {
 	struct pipe_context		context;
 	struct blitter_context		*blitter;
diff --git a/src/gallium/drivers/r600/r600_state2.c b/src/gallium/drivers/r600/r600_state2.c
index 72d0453..796442f 100644
--- a/src/gallium/drivers/r600/r600_state2.c
+++ b/src/gallium/drivers/r600/r600_state2.c
@@ -257,6 +257,10 @@ static int r600_shader_update(struct pipe_context *ctx, struct r600_pipe_shader
 
 	if (shader->processor_type != TGSI_PROCESSOR_VERTEX)
 		return 0;
+	if (!memcmp(&rshader->vertex_elements, rctx->vertex_elements, sizeof(struct r600_vertex_element))) {
+		return 0;
+	}
+	rshader->vertex_elements = *rctx->vertex_elements;
 	for (i = 0; i < rctx->vertex_elements->count; i++) {
 		resource_format[nresources++] = rctx->vertex_elements->elements[i].src_format;
 	}




More information about the mesa-commit mailing list