mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-29 09:30:20 +01:00
st/mesa: copy num_immediates field when copying the immediates array
Two assignments to num_immediates were missing in get_pixel_transfer_visitor() and get_bitmap_visitor(). The uninitialized value led to valgrind errors and crashes in some cases. Added new assertions to catch future problems in this area. Also changed num_immediates to unsigned to avoid signed/unsigned comparison warnings. NOTE: This is a candidate for the 8.0 branch. Reviewed-by: José Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
f0ea46790f
commit
fdae0eaf22
1 changed files with 5 additions and 1 deletions
|
|
@ -357,7 +357,7 @@ public:
|
|||
|
||||
/** List of immediate_storage */
|
||||
exec_list immediates;
|
||||
int num_immediates;
|
||||
unsigned num_immediates;
|
||||
|
||||
/** List of function_entry */
|
||||
exec_list function_signatures;
|
||||
|
|
@ -3645,6 +3645,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
|
|||
v->indirect_addr_temps = original->indirect_addr_temps;
|
||||
v->indirect_addr_consts = original->indirect_addr_consts;
|
||||
memcpy(&v->immediates, &original->immediates, sizeof(v->immediates));
|
||||
v->num_immediates = original->num_immediates;
|
||||
|
||||
/*
|
||||
* Get initial pixel color from the texture.
|
||||
|
|
@ -3775,6 +3776,7 @@ get_bitmap_visitor(struct st_fragment_program *fp,
|
|||
v->indirect_addr_temps = original->indirect_addr_temps;
|
||||
v->indirect_addr_consts = original->indirect_addr_consts;
|
||||
memcpy(&v->immediates, &original->immediates, sizeof(v->immediates));
|
||||
v->num_immediates = original->num_immediates;
|
||||
|
||||
/* TEX tmp0, fragment.texcoord[0], texture[0], 2D; */
|
||||
coord = st_src_reg(PROGRAM_INPUT, FRAG_ATTRIB_TEX0, glsl_type::vec2_type);
|
||||
|
|
@ -4679,8 +4681,10 @@ st_translate_program(
|
|||
i = 0;
|
||||
foreach_iter(exec_list_iterator, iter, program->immediates) {
|
||||
immediate_storage *imm = (immediate_storage *)iter.get();
|
||||
assert(i < program->num_immediates);
|
||||
t->immediates[i++] = emit_immediate(t, imm->values, imm->type, imm->size);
|
||||
}
|
||||
assert(i == program->num_immediates);
|
||||
|
||||
/* texture samplers */
|
||||
for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue