nir/validate: Allow 32-bit boolean load/store intrinsics
With UBOs and SSBOs we have boolean types but they're actually 32-bit values. Make the validator a little less strict so that we can do a 32-bit load/store on boolean types. We're about to add a lowering pass called gl_nir_lower_buffers which will lower boolean load/store operations to 32-bit and insert i2b and b2i instructions to convert to/from 1-bit booleans. We want that to be legal. Reviewed-by: Kristian H. Kristensen <hoegsberg@chromium.org> Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
parent
5d26f2d3d5
commit
b315f6f82b
|
@ -525,6 +525,9 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
|
|||
validate_assert(state, instr->num_components ==
|
||||
glsl_get_vector_elements(src->type));
|
||||
dest_bit_size = glsl_get_bit_size(src->type);
|
||||
/* Also allow 32-bit boolean load operations */
|
||||
if (glsl_type_is_boolean(src->type))
|
||||
dest_bit_size |= 32;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -534,6 +537,9 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
|
|||
validate_assert(state, instr->num_components ==
|
||||
glsl_get_vector_elements(dst->type));
|
||||
src_bit_sizes[1] = glsl_get_bit_size(dst->type);
|
||||
/* Also allow 32-bit boolean store operations */
|
||||
if (glsl_type_is_boolean(dst->type))
|
||||
src_bit_sizes[1] |= 32;
|
||||
validate_assert(state, (dst->mode & (nir_var_shader_in |
|
||||
nir_var_uniform)) == 0);
|
||||
validate_assert(state, (nir_intrinsic_write_mask(instr) & ~((1 << instr->num_components) - 1)) == 0);
|
||||
|
|
Loading…
Reference in New Issue