summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlia Mirkin <imirkin@alum.mit.edu>2016-05-29 11:01:05 -0400
committerIlia Mirkin <imirkin@alum.mit.edu>2016-06-06 20:49:28 -0400
commit30684b50d71d4d5356b671293af4b9f3fd6161ff (patch)
tree8cb3a0c87da9ba19e79d0ec02055c469fc3bce48
parent5189f0243a3dd8698c645bbe762b8a1a3caaf1a9 (diff)
downloadexternal_mesa3d-30684b50d71d4d5356b671293af4b9f3fd6161ff.zip
external_mesa3d-30684b50d71d4d5356b671293af4b9f3fd6161ff.tar.gz
external_mesa3d-30684b50d71d4d5356b671293af4b9f3fd6161ff.tar.bz2
gallium: add VOTE_* opcodes to implement GL_ARB_shader_group_vote
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_info.c3
-rw-r--r--src/gallium/docs/source/tgsi.rst17
-rw-r--r--src/gallium/include/pipe/p_shader_tokens.h7
3 files changed, 26 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c b/src/gallium/auxiliary/tgsi/tgsi_info.c
index 847d420..60e0f2c 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_info.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_info.c
@@ -262,6 +262,9 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
{ 1, 1, 0, 0, 0, 0, 0, COMP, "DFLR", TGSI_OPCODE_DFLR },
{ 1, 1, 0, 0, 0, 0, 0, COMP, "DROUND", TGSI_OPCODE_DROUND },
{ 1, 1, 0, 0, 0, 0, 0, COMP, "DSSG", TGSI_OPCODE_DSSG },
+ { 1, 1, 0, 0, 0, 0, 0, COMP, "VOTE_ANY", TGSI_OPCODE_VOTE_ANY },
+ { 1, 1, 0, 0, 0, 0, 0, COMP, "VOTE_ALL", TGSI_OPCODE_VOTE_ALL },
+ { 1, 1, 0, 0, 0, 0, 0, COMP, "VOTE_EQ", TGSI_OPCODE_VOTE_EQ },
};
const struct tgsi_opcode_info *
diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst
index ab12490..bf09406 100644
--- a/src/gallium/docs/source/tgsi.rst
+++ b/src/gallium/docs/source/tgsi.rst
@@ -2557,6 +2557,23 @@ only be used with 32-bit integer image formats.
resource[offset] = (dst_x > src_x ? dst_x : src_x)
+.. _voteopcodes:
+
+Vote opcodes
+^^^^^^^^^^^^
+
+These opcodes compare the given value across the shader invocations
+running in the current SIMD group. The details of exactly which
+invocations get compared are implementation-defined, and it would be a
+correct implementation to only ever consider the current thread's
+value. (i.e. SIMD group of 1). The argument is treated as a boolean.
+
+.. opcode:: VOTE_ANY - Value is set in any of the current invocations
+
+.. opcode:: VOTE_ALL - Value is set in all of the current invocations
+
+.. opcode:: VOTE_EQ - Value is the same in all of the current invocations
+
Explanation of symbols used
------------------------------
diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h
index b9d28fe..abf26d3 100644
--- a/src/gallium/include/pipe/p_shader_tokens.h
+++ b/src/gallium/include/pipe/p_shader_tokens.h
@@ -561,7 +561,12 @@ struct tgsi_property_data {
#define TGSI_OPCODE_DFLR 220 /* nvc0 */
#define TGSI_OPCODE_DROUND 221 /* nvc0 */
#define TGSI_OPCODE_DSSG 222
-#define TGSI_OPCODE_LAST 223
+
+#define TGSI_OPCODE_VOTE_ANY 223
+#define TGSI_OPCODE_VOTE_ALL 224
+#define TGSI_OPCODE_VOTE_EQ 225
+
+#define TGSI_OPCODE_LAST 226
/**
* Opcode is the operation code to execute. A given operation defines the