r600g: the code to check whether a new vertex shader is needed was wrong

this code was memcmp'ing two structs, but refcounting one of them afterwards,
so any subsequent memcmp was never going to work.

again this stops unnecessary uploads of vertex program,
This commit is contained in:
Dave Airlie 2010-10-04 16:24:59 +10:00
parent 92aba9c1f5
commit 6dc051557d
1 changed files with 3 additions and 1 deletions

View File

@ -245,7 +245,9 @@ 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))) {
/* doing a full memcmp fell over the refcount */
if ((rshader->vertex_elements.count == rctx->vertex_elements->count) &&
(!memcmp(&rshader->vertex_elements.elements, &rctx->vertex_elements->elements, 32 * sizeof(struct pipe_vertex_element)))) {
return 0;
}
rshader->vertex_elements = *rctx->vertex_elements;