mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02:00
nir: Add new barrier functions for compute shaders
When these functions are called in glsl-ir, we create a corresponding nir intrinsic function call. Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
parent
91f188710a
commit
9d65f3208b
2 changed files with 26 additions and 0 deletions
|
|
@ -719,6 +719,16 @@ nir_visitor::visit(ir_call *ir)
|
|||
op = nir_intrinsic_ssbo_atomic_comp_swap;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_shader_clock") == 0) {
|
||||
op = nir_intrinsic_shader_clock;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_group_memory_barrier") == 0) {
|
||||
op = nir_intrinsic_group_memory_barrier;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_memory_barrier_atomic_counter") == 0) {
|
||||
op = nir_intrinsic_memory_barrier_atomic_counter;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_memory_barrier_buffer") == 0) {
|
||||
op = nir_intrinsic_memory_barrier_buffer;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_memory_barrier_image") == 0) {
|
||||
op = nir_intrinsic_memory_barrier_image;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_memory_barrier_shared") == 0) {
|
||||
op = nir_intrinsic_memory_barrier_shared;
|
||||
} else {
|
||||
unreachable("not reached");
|
||||
}
|
||||
|
|
@ -821,6 +831,11 @@ nir_visitor::visit(ir_call *ir)
|
|||
break;
|
||||
}
|
||||
case nir_intrinsic_memory_barrier:
|
||||
case nir_intrinsic_group_memory_barrier:
|
||||
case nir_intrinsic_memory_barrier_atomic_counter:
|
||||
case nir_intrinsic_memory_barrier_buffer:
|
||||
case nir_intrinsic_memory_barrier_image:
|
||||
case nir_intrinsic_memory_barrier_shared:
|
||||
nir_instr_insert_after_cf_list(this->cf_node_list, &instr->instr);
|
||||
break;
|
||||
case nir_intrinsic_shader_clock:
|
||||
|
|
|
|||
|
|
@ -91,6 +91,17 @@ BARRIER(memory_barrier)
|
|||
*/
|
||||
INTRINSIC(shader_clock, 0, ARR(), true, 1, 0, 0, NIR_INTRINSIC_CAN_ELIMINATE)
|
||||
|
||||
/*
|
||||
* Memory barrier with semantics analogous to the compute shader
|
||||
* groupMemoryBarrier(), memoryBarrierAtomicCounter(), memoryBarrierBuffer(),
|
||||
* memoryBarrierImage() and memoryBarrierShared() GLSL intrinsics.
|
||||
*/
|
||||
BARRIER(group_memory_barrier)
|
||||
BARRIER(memory_barrier_atomic_counter)
|
||||
BARRIER(memory_barrier_buffer)
|
||||
BARRIER(memory_barrier_image)
|
||||
BARRIER(memory_barrier_shared)
|
||||
|
||||
/** A conditional discard, with a single boolean source. */
|
||||
INTRINSIC(discard_if, 1, ARR(1), false, 0, 0, 0, 0)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue