summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConnor Abbott <cwabbott0@gmail.com>2017-06-01 19:20:45 -0700
committerConnor Abbott <cwabbott0@gmail.com>2017-06-05 18:34:18 -0700
commit57702fea63e895c707db6f4e9419f80420f2aab4 (patch)
treeb145271476a7ae67a755809d1352ee93a7f93435
parentd99ac8bb86962ac9bb136afb5a70296c5cf48b3d (diff)
nir: add ARB_shader_ballot and ARB_shader_group_vote instructionsnir-divergence-v2
v2: make every instruction an intrinsic
-rw-r--r--src/compiler/nir/nir_intrinsics.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_intrinsics.h b/src/compiler/nir/nir_intrinsics.h
index 2fe8104bfb..6c155db475 100644
--- a/src/compiler/nir/nir_intrinsics.h
+++ b/src/compiler/nir/nir_intrinsics.h
@@ -344,6 +344,35 @@ SYSTEM_VALUE(channel_num, 1, 0, xx, xx, xx)
SYSTEM_VALUE(alpha_ref_float, 1, 0, xx, xx, xx)
SYSTEM_VALUE(layer_id, 1, 0, xx, xx, xx)
SYSTEM_VALUE(view_index, 1, 0, xx, xx, xx)
+SYSTEM_VALUE(subgroup_invocation, 1, 0, xx, xx, xx)
+
+
+/* ARB_shader_ballot instructions */
+
+SYSTEM_VALUE(subgroup_eq_mask, 1, 0, xx, xx, xx)
+SYSTEM_VALUE(subgroup_ge_mask, 1, 0, xx, xx, xx)
+SYSTEM_VALUE(subgroup_gt_mask, 1, 0, xx, xx, xx)
+SYSTEM_VALUE(subgroup_le_mask, 1, 0, xx, xx, xx)
+SYSTEM_VALUE(subgroup_lt_mask, 1, 0, xx, xx, xx)
+
+#define CROSS_THREAD(name, dest_components, src_components) \
+ INTRINSIC(name, 1, ARR(src_components), true, dest_components, 0, 0, \
+ xx, xx, xx, \
+ NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER | \
+ NIR_INTRINSIC_CROSS_THREAD)
+
+CROSS_THREAD(ballot, 0, 0)
+INTRINSIC(read_invocation, 2, ARR(0, 1), true, 0, 0, 0,
+ xx, xx, xx,
+ NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER |
+ NIR_INTRINSIC_CROSS_THREAD)
+CROSS_THREAD(read_first_invocation, 0, 0)
+
+/* ARB_shader_group_vote instructions */
+
+CROSS_THREAD(any_invocations, 1, 1)
+CROSS_THREAD(all_invocations, 1, 1)
+CROSS_THREAD(all_invocations_equal, 1, 1)
/* Blend constant color values. Float values are clamped. */
SYSTEM_VALUE(blend_const_color_r_float, 1, 0, xx, xx, xx)