diff options
author | Eric Anholt <[email protected]> | 2017-09-07 10:17:02 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2017-09-18 16:14:27 -0700 |
commit | 6e3d7a59162a48cd55c7405295061301839c8135 (patch) | |
tree | 64098cc010594eedf9f5979e22e5e02e13081ef2 | |
parent | 9f763c1f9b7654912e3fcfac814a55eed68881fe (diff) |
ttn: Fix out-of-bounds accesses since the always-2D-constants change.
Only one of the three checks for dim was updated, so we would try to set a
UBO buffer index source value on a nir_load_uniform, and wouldn't actually
declare non-UBO uniforms.
Fixes: 37dd8e8dee1d ("gallium: all drivers should accept two-dimensional constant buffer indexing")
Tested-by: Derek Foreman <[email protected]>
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r-- | src/gallium/auxiliary/nir/tgsi_to_nir.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index aa715dcae2d..1b630096ffa 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -314,7 +314,8 @@ ttn_emit_declaration(struct ttn_compile *c) file == TGSI_FILE_CONSTANT); /* nothing to do for UBOs: */ - if ((file == TGSI_FILE_CONSTANT) && decl->Declaration.Dimension) { + if ((file == TGSI_FILE_CONSTANT) && decl->Declaration.Dimension && + decl->Dim.Index2D != 0) { b->shader->info.num_ubos = MAX2(b->shader->info.num_ubos, decl->Dim.Index2D); return; @@ -638,7 +639,7 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index, load = nir_intrinsic_instr_create(b->shader, op); load->num_components = 4; - if (dim) { + if (dim && (dim->Index > 0 || dim->Indirect)) { if (dimind) { load->src[srcn] = ttn_src_for_file_and_index(c, dimind->File, dimind->Index, |