diff options
author | José Fonseca <jfonseca@vmware.com> | 2010-01-08 15:42:57 +0000 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2010-01-08 15:42:57 +0000 |
commit | 080c40ab32b2abd6d8381b4a0cc143d36a1652b2 (patch) | |
tree | e173767ebc5a82d81b9fc086449d915e29348976 /src/mesa/shader/prog_parameter_layout.c | |
parent | 9cdf6f025b2ed55cfb13dd09f870f01d0c7947d3 (diff) | |
parent | a1de400e8de06a80ab140bb0fa950e990607572d (diff) |
Merge remote branch 'origin/master' into lp-binning
Conflicts:
src/gallium/auxiliary/util/u_surface.c
src/gallium/drivers/llvmpipe/Makefile
src/gallium/drivers/llvmpipe/SConscript
src/gallium/drivers/llvmpipe/lp_bld_arit.c
src/gallium/drivers/llvmpipe/lp_bld_flow.c
src/gallium/drivers/llvmpipe/lp_bld_interp.c
src/gallium/drivers/llvmpipe/lp_clear.c
src/gallium/drivers/llvmpipe/lp_context.c
src/gallium/drivers/llvmpipe/lp_context.h
src/gallium/drivers/llvmpipe/lp_draw_arrays.c
src/gallium/drivers/llvmpipe/lp_jit.c
src/gallium/drivers/llvmpipe/lp_jit.h
src/gallium/drivers/llvmpipe/lp_prim_vbuf.c
src/gallium/drivers/llvmpipe/lp_setup.c
src/gallium/drivers/llvmpipe/lp_setup_point.c
src/gallium/drivers/llvmpipe/lp_state.h
src/gallium/drivers/llvmpipe/lp_state_blend.c
src/gallium/drivers/llvmpipe/lp_state_derived.c
src/gallium/drivers/llvmpipe/lp_state_fs.c
src/gallium/drivers/llvmpipe/lp_state_sampler.c
src/gallium/drivers/llvmpipe/lp_state_surface.c
src/gallium/drivers/llvmpipe/lp_tex_cache.c
src/gallium/drivers/llvmpipe/lp_tex_cache.h
src/gallium/drivers/llvmpipe/lp_tex_sample.h
src/gallium/drivers/llvmpipe/lp_tile_cache.c
Diffstat (limited to 'src/mesa/shader/prog_parameter_layout.c')
-rw-r--r-- | src/mesa/shader/prog_parameter_layout.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/src/mesa/shader/prog_parameter_layout.c b/src/mesa/shader/prog_parameter_layout.c index 1c37b3a7a5..a888573832 100644 --- a/src/mesa/shader/prog_parameter_layout.c +++ b/src/mesa/shader/prog_parameter_layout.c @@ -72,14 +72,11 @@ copy_indirect_accessed_array(struct gl_program_parameter_list *src, unsigned first, unsigned count) { const int base = dst->NumParameters; - unsigned i; - unsigned j; - + unsigned i, j; for (i = first; i < (first + count); i++) { struct gl_program_parameter *curr = & src->Parameters[i]; - if (curr->Type == PROGRAM_CONSTANT) { j = dst->NumParameters; } else { @@ -93,10 +90,15 @@ copy_indirect_accessed_array(struct gl_program_parameter_list *src, assert(j == dst->NumParameters); + /* copy src parameter [i] to dest parameter [j] */ memcpy(& dst->Parameters[j], curr, sizeof(dst->Parameters[j])); memcpy(dst->ParameterValues[j], src->ParameterValues[i], sizeof(GLfloat) * 4); + + /* Pointer to the string name was copied. Null-out src param name + * to prevent double free later. + */ curr->Name = NULL; dst->NumParameters++; @@ -117,11 +119,9 @@ _mesa_layout_parameters(struct asm_parser_state *state) struct asm_instruction *inst; unsigned i; - layout = _mesa_new_parameter_list_sized(state->prog->Parameters->NumParameters); - /* PASS 1: Move any parameters that are accessed indirectly from the * original parameter list to the new parameter list. */ @@ -155,7 +155,6 @@ _mesa_layout_parameters(struct asm_parser_state *state) } } - /* PASS 2: Move any parameters that are not accessed indirectly from the * original parameter list to the new parameter list. */ @@ -165,7 +164,6 @@ _mesa_layout_parameters(struct asm_parser_state *state) const int idx = inst->SrcReg[i].Base.Index; unsigned swizzle = SWIZZLE_NOOP; - /* All relative addressed operands were processed on the first * pass. Just skip them here. */ @@ -173,7 +171,6 @@ _mesa_layout_parameters(struct asm_parser_state *state) continue; } - if ((inst->SrcReg[i].Base.File <= PROGRAM_VARYING ) || (inst->SrcReg[i].Base.File >= PROGRAM_WRITE_ONLY)) { continue; @@ -209,7 +206,6 @@ _mesa_layout_parameters(struct asm_parser_state *state) } } - _mesa_free_parameter_list(state->prog->Parameters); state->prog->Parameters = layout; |