break;
case nir_intrinsic_image_deref_load:
case nir_intrinsic_image_deref_sparse_load:
+ case nir_intrinsic_image_deref_samples_identical:
result = visit_image_load(ctx, instr, false);
break;
case nir_intrinsic_bindless_image_store:
case nir_intrinsic_image_deref_load:
case nir_intrinsic_image_deref_samples:
case nir_intrinsic_image_deref_size:
+ case nir_intrinsic_image_deref_samples_identical:
case nir_intrinsic_image_deref_store: {
deref = nir_src_as_deref(intrinsic->src[0]);
var = nir_deref_instr_get_variable(deref);
instr->intrinsic == nir_intrinsic_image_deref_atomic_comp_swap ||
instr->intrinsic == nir_intrinsic_image_deref_atomic_fadd ||
instr->intrinsic == nir_intrinsic_image_deref_size ||
+ instr->intrinsic == nir_intrinsic_image_deref_samples_identical ||
instr->intrinsic == nir_intrinsic_image_deref_samples) {
b->cursor = nir_before_instr(&instr->instr);
is_divergent = instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM);
break;
+ case nir_intrinsic_image_samples_identical:
+ case nir_intrinsic_image_deref_samples_identical:
+ case nir_intrinsic_bindless_image_samples_identical:
+ is_divergent = (instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM)) ||
+ instr->src[1].ssa->divergent;
+ break;
+
case nir_intrinsic_image_load:
case nir_intrinsic_image_deref_load:
case nir_intrinsic_bindless_image_load:
case nir_intrinsic_image_sparse_load:
case nir_intrinsic_image_deref_sparse_load:
/* Group image_size too because it has the same latency as cache hits. */
+ case nir_intrinsic_image_samples_identical:
+ case nir_intrinsic_image_deref_samples_identical:
+ case nir_intrinsic_bindless_image_samples_identical:
case nir_intrinsic_image_size:
case nir_intrinsic_image_deref_size:
case nir_intrinsic_bindless_image_load:
image("samples", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER])
image("atomic_inc_wrap", src_comp=[4, 1, 1], dest_comp=1)
image("atomic_dec_wrap", src_comp=[4, 1, 1], dest_comp=1)
+# This returns true if all samples within the pixel have equal color values.
+image("samples_identical", dest_comp=1, src_comp=[4], flags=[CAN_ELIMINATE])
# CL-specific format queries
image("format", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER])
image("order", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER])
case nir_intrinsic_image_atomic_fmax:
case nir_intrinsic_image_size:
case nir_intrinsic_image_samples:
+ case nir_intrinsic_image_samples_identical:
case nir_intrinsic_bindless_image_load:
case nir_intrinsic_bindless_image_sparse_load:
case nir_intrinsic_bindless_image_store:
case nir_intrinsic_bindless_image_atomic_fmax:
case nir_intrinsic_bindless_image_size:
case nir_intrinsic_bindless_image_samples:
+ case nir_intrinsic_bindless_image_samples_identical:
case nir_intrinsic_image_deref_load:
case nir_intrinsic_image_deref_sparse_load:
case nir_intrinsic_image_deref_store:
case nir_intrinsic_image_deref_atomic_fmax:
case nir_intrinsic_image_deref_size:
case nir_intrinsic_image_deref_samples:
+ case nir_intrinsic_image_deref_samples_identical:
if ((options->types & nir_lower_non_uniform_image_access) &&
lower_non_uniform_access_intrin(options, &b, intrin, 0))
progress = true;
case nir_intrinsic_image_deref_atomic_fadd:
case nir_intrinsic_image_deref_atomic_fmin:
case nir_intrinsic_image_deref_atomic_fmax:
+ case nir_intrinsic_image_deref_samples_identical:
var = nir_intrinsic_get_var(instr, 0);
read = instr->intrinsic != nir_intrinsic_image_deref_store;
write = instr->intrinsic != nir_intrinsic_image_deref_load &&
case nir_intrinsic_bindless_image_atomic_fadd:
case nir_intrinsic_bindless_image_atomic_fmin:
case nir_intrinsic_bindless_image_atomic_fmax:
+ case nir_intrinsic_bindless_image_samples_identical:
read = instr->intrinsic != nir_intrinsic_bindless_image_store;
write = instr->intrinsic != nir_intrinsic_bindless_image_load &&
instr->intrinsic != nir_intrinsic_bindless_image_sparse_load;
* sources can be moved.
*/
case nir_intrinsic_image_load:
+ case nir_intrinsic_image_samples_identical:
case nir_intrinsic_bindless_image_load:
case nir_intrinsic_load_ssbo:
case nir_intrinsic_load_ssbo_ir3: