nir: convert glsl imageSamples into a new intrinsic
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -644,6 +644,8 @@ nir_visitor::visit(ir_call *ir)
|
||||
op = nir_intrinsic_memory_barrier;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_image_size") == 0) {
|
||||
op = nir_intrinsic_image_size;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_image_samples") == 0) {
|
||||
op = nir_intrinsic_image_samples;
|
||||
} else {
|
||||
unreachable("not reached");
|
||||
}
|
||||
@@ -670,6 +672,7 @@ nir_visitor::visit(ir_call *ir)
|
||||
case nir_intrinsic_image_atomic_xor:
|
||||
case nir_intrinsic_image_atomic_exchange:
|
||||
case nir_intrinsic_image_atomic_comp_swap:
|
||||
case nir_intrinsic_image_samples:
|
||||
case nir_intrinsic_image_size: {
|
||||
nir_ssa_undef_instr *instr_undef =
|
||||
nir_ssa_undef_instr_create(shader, 1);
|
||||
@@ -693,7 +696,8 @@ nir_visitor::visit(ir_call *ir)
|
||||
info->dest_components, NULL);
|
||||
}
|
||||
|
||||
if (op == nir_intrinsic_image_size)
|
||||
if (op == nir_intrinsic_image_size ||
|
||||
op == nir_intrinsic_image_samples)
|
||||
break;
|
||||
|
||||
/* Set the address argument, extending the coordinate vector to four
|
||||
|
||||
@@ -125,6 +125,8 @@ INTRINSIC(image_atomic_exchange, 3, ARR(4, 1, 1), true, 1, 1, 0, 0)
|
||||
INTRINSIC(image_atomic_comp_swap, 4, ARR(4, 1, 1, 1), true, 1, 1, 0, 0)
|
||||
INTRINSIC(image_size, 0, ARR(), true, 4, 1, 0,
|
||||
NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
|
||||
INTRINSIC(image_samples, 0, ARR(), true, 1, 1, 0,
|
||||
NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
|
||||
|
||||
#define SYSTEM_VALUE(name, components) \
|
||||
INTRINSIC(load_##name, 0, ARR(), true, components, 0, 0, \
|
||||
|
||||
Reference in New Issue
Block a user