glsl: add intrinsics for ARB_shader_group_vote and ARB_shader_ballot

These operations are currently implemented as IR expressions. However,
they cannot be transformed and moved in the way that other IR
expressions can because they have non-trivial interactions with
control-flow.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle
2017-04-19 10:08:25 +02:00
parent 24011ead71
commit 99941a9724
2 changed files with 13 additions and 0 deletions

View File

@@ -1098,6 +1098,13 @@ enum ir_intrinsic_id {
ir_intrinsic_memory_barrier_image,
ir_intrinsic_memory_barrier_shared,
ir_intrinsic_vote_all,
ir_intrinsic_vote_any,
ir_intrinsic_vote_eq,
ir_intrinsic_ballot,
ir_intrinsic_read_invocation,
ir_intrinsic_read_first_invocation,
ir_intrinsic_shared_load,
ir_intrinsic_shared_store = MAKE_INTRINSIC_FOR_TYPE(store, shared),
ir_intrinsic_shared_atomic_add = MAKE_INTRINSIC_FOR_TYPE(atomic_add, shared),

View File

@@ -3994,6 +3994,12 @@ glsl_to_tgsi_visitor::visit(ir_call *ir)
return;
}
case ir_intrinsic_vote_all:
case ir_intrinsic_vote_any:
case ir_intrinsic_vote_eq:
case ir_intrinsic_ballot:
case ir_intrinsic_read_first_invocation:
case ir_intrinsic_read_invocation:
case ir_intrinsic_invalid:
case ir_intrinsic_generic_load:
case ir_intrinsic_generic_store: