summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJerome Glisse <[email protected]>2010-09-28 14:34:25 -0400
committerJerome Glisse <[email protected]>2010-09-28 14:34:25 -0400
commit723a655ed3f3092f6fa74a903fb774a3cec93b79 (patch)
treea74876c5288161b03a62c873c4f8984c24530d43 /src
parentfe790a3c346b5edb8b64cfc937b0d5cd9e337412 (diff)
r600g: avoid rebuilding the vertex shader if no change to input format
Signed-off-by: Jerome Glisse <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/r600/r600_pipe.h14
-rw-r--r--src/gallium/drivers/r600/r600_state2.c4
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 5abf910c81c..e161dc5066a 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 72d04534e62..796442f5a4b 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;
}