From 723a655ed3f3092f6fa74a903fb774a3cec93b79 Mon Sep 17 00:00:00 2001 From: Jerome Glisse Date: Tue, 28 Sep 2010 14:34:25 -0400 Subject: [PATCH] r600g: avoid rebuilding the vertex shader if no change to input format Signed-off-by: Jerome Glisse --- 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 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; } -- 2.30.2