spirv: Sign-extend array indices

The SPIR-V spec was recently updated to clarify that array indices are
treated as signed integers.

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
Jason Ekstrand
2018-12-15 09:57:26 -06:00
committed by Jason Ekstrand
parent f8992eb5ba
commit c59f07684c

View File

@@ -132,12 +132,12 @@ vtn_access_link_as_ssa(struct vtn_builder *b, struct vtn_access_link link,
} else if (stride == 1) { } else if (stride == 1) {
nir_ssa_def *ssa = vtn_ssa_value(b, link.id)->def; nir_ssa_def *ssa = vtn_ssa_value(b, link.id)->def;
if (ssa->bit_size != 32) if (ssa->bit_size != 32)
ssa = nir_u2u32(&b->nb, ssa); ssa = nir_i2i32(&b->nb, ssa);
return ssa; return ssa;
} else { } else {
nir_ssa_def *src0 = vtn_ssa_value(b, link.id)->def; nir_ssa_def *src0 = vtn_ssa_value(b, link.id)->def;
if (src0->bit_size != 32) if (src0->bit_size != 32)
src0 = nir_u2u32(&b->nb, src0); src0 = nir_i2i32(&b->nb, src0);
return nir_imul_imm(&b->nb, src0, stride); return nir_imul_imm(&b->nb, src0, stride);
} }
} }