spirv: Sign-extend array indices
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 15 Dec 2018 15:57:26 +0000 (09:57 -0600)
committerJason Ekstrand <jason@jlekstrand.net>
Tue, 8 Jan 2019 00:38:29 +0000 (00:38 +0000)
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>
src/compiler/spirv/vtn_variables.c

index 025c6a237344dfbc524b5c906f866de7578383fd..23fcd8b54d21d40f169fc3fc165c9fdfc828a39a 100644 (file)
@@ -132,12 +132,12 @@ vtn_access_link_as_ssa(struct vtn_builder *b, struct vtn_access_link link,
    } else if (stride == 1) {
        nir_ssa_def *ssa = vtn_ssa_value(b, link.id)->def;
        if (ssa->bit_size != 32)
-          ssa = nir_u2u32(&b->nb, ssa);
+          ssa = nir_i2i32(&b->nb, ssa);
       return ssa;
    } else {
       nir_ssa_def *src0 = vtn_ssa_value(b, link.id)->def;
       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);
    }
 }