nir: Assert memory loads are aligned
We've had alignment parameters on these operations for a while but a bunch of places weren't setting them. That should be resolved now so we can start validating that they're always set. Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4441> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4441>
This commit is contained in:
parent
068a3bf0d7
commit
e78a7a1825
|
@ -570,30 +570,44 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
|
|||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_load_uniform:
|
||||
case nir_intrinsic_load_ubo:
|
||||
case nir_intrinsic_load_ssbo:
|
||||
case nir_intrinsic_load_shared:
|
||||
case nir_intrinsic_load_global:
|
||||
case nir_intrinsic_load_scratch:
|
||||
/* These memory load operations must have alignments */
|
||||
validate_assert(state,
|
||||
util_is_power_of_two_nonzero(nir_intrinsic_align_mul(instr)));
|
||||
validate_assert(state, nir_intrinsic_align_offset(instr) <
|
||||
nir_intrinsic_align_mul(instr));
|
||||
/* Fall through */
|
||||
|
||||
case nir_intrinsic_load_uniform:
|
||||
case nir_intrinsic_load_input:
|
||||
case nir_intrinsic_load_per_vertex_input:
|
||||
case nir_intrinsic_load_interpolated_input:
|
||||
case nir_intrinsic_load_ssbo:
|
||||
case nir_intrinsic_load_output:
|
||||
case nir_intrinsic_load_per_vertex_output:
|
||||
case nir_intrinsic_load_shared:
|
||||
case nir_intrinsic_load_push_constant:
|
||||
case nir_intrinsic_load_constant:
|
||||
case nir_intrinsic_load_global:
|
||||
case nir_intrinsic_load_scratch:
|
||||
/* Memory load operations must load at least a byte */
|
||||
/* All memory load operations must load at least a byte */
|
||||
validate_assert(state, nir_dest_bit_size(instr->dest) >= 8);
|
||||
break;
|
||||
|
||||
case nir_intrinsic_store_output:
|
||||
case nir_intrinsic_store_per_vertex_output:
|
||||
case nir_intrinsic_store_ssbo:
|
||||
case nir_intrinsic_store_shared:
|
||||
case nir_intrinsic_store_global:
|
||||
case nir_intrinsic_store_scratch:
|
||||
/* Memory store operations must store at least a byte */
|
||||
/* These memory store operations must also have alignments */
|
||||
validate_assert(state,
|
||||
util_is_power_of_two_nonzero(nir_intrinsic_align_mul(instr)));
|
||||
validate_assert(state, nir_intrinsic_align_offset(instr) <
|
||||
nir_intrinsic_align_mul(instr));
|
||||
/* Fall through */
|
||||
|
||||
case nir_intrinsic_store_output:
|
||||
case nir_intrinsic_store_per_vertex_output:
|
||||
/* All memory store operations must store at least a byte */
|
||||
validate_assert(state, nir_src_bit_size(instr->src[0]) >= 8);
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue