Module: Mesa Branch: staging/18.2 Commit: e69b51d632e9e36c85e1799488d362fd276bd584 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e69b51d632e9e36c85e1799488d362fd276bd584
Author: Jason Ekstrand <[email protected]> Date: Fri Oct 19 19:08:58 2018 -0500 spirv: Use the right bit-size for spec constant ops Previously, we would always pull the bit size from the destination which is wrong for opcodes like nir_ilt where the sources are variable-sized but the destination is a fixed size. We were getting lucky before because nir_op_ilt returns a 32-bit value and basically everyone who uses spec constants uses 32-bit ones. Cc: [email protected] Reviewed-by: Ian Romanick <[email protected]> (cherry picked from commit 8fa70cfcfdda1094bc19e9707eb9333477a2d2bf) --- src/compiler/spirv/spirv_to_nir.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 32ebdd78a1..688b33e660 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -1771,11 +1771,17 @@ vtn_handle_constant(struct vtn_builder *b, SpvOp opcode, nir_const_value src[4]; for (unsigned i = 0; i < count - 4; i++) { - nir_constant *c = - vtn_value(b, w[4 + i], vtn_value_type_constant)->constant; + struct vtn_value *src_val = + vtn_value(b, w[4 + i], vtn_value_type_constant); + + /* If this is an unsized source, pull the bit size from the + * source; otherwise, we'll use the bit size from the destination. + */ + if (!nir_alu_type_get_type_size(nir_op_infos[op].input_types[i])) + bit_size = glsl_get_bit_size(src_val->type->type); unsigned j = swap ? 1 - i : i; - src[j] = c->values[0]; + src[j] = src_val->constant->values[0]; } val->constant->values[0] = _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
