mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
nir: add shader_clock intrinsic
v2: Add flags and inline comment/description. v3: None of the input/outputs are variables v4: Drop clockARB reference, relate code motion barrier comment wrt intrinsic flag. v5: Drop the "thus we can eliminate..." comment (Connor) Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Connor Abbott <cwabbott0@gmail.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
f1d98fc90a
commit
7682844f34
2 changed files with 14 additions and 0 deletions
|
|
@ -717,6 +717,8 @@ nir_visitor::visit(ir_call *ir)
|
|||
op = nir_intrinsic_ssbo_atomic_exchange;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_ssbo_atomic_comp_swap_internal") == 0) {
|
||||
op = nir_intrinsic_ssbo_atomic_comp_swap;
|
||||
} else if (strcmp(ir->callee_name(), "__intrinsic_shader_clock") == 0) {
|
||||
op = nir_intrinsic_shader_clock;
|
||||
} else {
|
||||
unreachable("not reached");
|
||||
}
|
||||
|
|
@ -821,6 +823,10 @@ nir_visitor::visit(ir_call *ir)
|
|||
case nir_intrinsic_memory_barrier:
|
||||
nir_instr_insert_after_cf_list(this->cf_node_list, &instr->instr);
|
||||
break;
|
||||
case nir_intrinsic_shader_clock:
|
||||
nir_ssa_dest_init(&instr->instr, &instr->dest, 1, NULL);
|
||||
nir_instr_insert_after_cf_list(this->cf_node_list, &instr->instr);
|
||||
break;
|
||||
case nir_intrinsic_store_ssbo: {
|
||||
exec_node *param = ir->actual_parameters.get_head();
|
||||
ir_rvalue *block = ((ir_instruction *)param)->as_rvalue();
|
||||
|
|
|
|||
|
|
@ -83,6 +83,14 @@ BARRIER(discard)
|
|||
*/
|
||||
BARRIER(memory_barrier)
|
||||
|
||||
/*
|
||||
* Shader clock intrinsic with semantics analogous to the clock2x32ARB()
|
||||
* GLSL intrinsic.
|
||||
* The latter can be used as code motion barrier, which is currently not
|
||||
* feasible with NIR.
|
||||
*/
|
||||
INTRINSIC(shader_clock, 0, ARR(), true, 1, 0, 0, NIR_INTRINSIC_CAN_ELIMINATE)
|
||||
|
||||
/** 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