mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 19:50:11 +01:00
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: mesa-stable@lists.freedesktop.org Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
1d2ed694c1
commit
8fa70cfcfd
1 changed files with 9 additions and 3 deletions
|
|
@ -1798,11 +1798,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] =
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue