diff options
author | Eric Anholt <[email protected]> | 2010-07-27 15:10:38 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2010-07-27 15:10:38 -0700 |
commit | 9a670c2e9b7e07ba43d175f3bfb23951296794c4 (patch) | |
tree | 07587f7d985e2825a5b6e8f79fb4e1e1ca781958 | |
parent | 59c45e9e6cf80be149c6e5d94763e98312f49be2 (diff) |
ir_to_mesa: Provide a restricted type size to _mesa_add_uniform.
Fixes:
glsl-uniform-out-of-bounds.
-rw-r--r-- | src/mesa/program/ir_to_mesa.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index bd79913dcf4..fe0c19acea0 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -1061,6 +1061,7 @@ ir_to_mesa_visitor::visit(ir_dereference_variable *ir) ir_to_mesa_src_reg src_reg; variable_storage *entry = find_variable_storage(ir->var); unsigned int loc; + int len; if (!entry) { switch (ir->var->mode) { @@ -1089,9 +1090,17 @@ ir_to_mesa_visitor::visit(ir_dereference_variable *ir) assert(ir->var->type->gl_type != 0 && ir->var->type->gl_type != GL_INVALID_ENUM); + + if (ir->var->type->is_vector() || + ir->var->type->is_scalar()) { + len = ir->var->type->vector_elements; + } else { + len = type_size(ir->var->type) * 4; + } + loc = _mesa_add_uniform(this->prog->Parameters, ir->var->name, - type_size(ir->var->type) * 4, + len, ir->var->type->gl_type, NULL); |