gallium/tgsi: Add support for barriers.

This commit is contained in:
Francisco Jerez 2012-04-30 20:21:38 +02:00
parent 581ddbcf93
commit 9e550c3423
3 changed files with 59 additions and 1 deletions

View File

@ -201,6 +201,10 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
{ 1, 1, 0, 0, 0, 0, COMP, "ISSG", TGSI_OPCODE_ISSG },
{ 1, 2, 0, 0, 0, 0, OTHR, "LOAD", TGSI_OPCODE_LOAD },
{ 1, 2, 0, 0, 0, 0, OTHR, "STORE", TGSI_OPCODE_STORE },
{ 1, 0, 0, 0, 0, 0, OTHR, "MFENCE", TGSI_OPCODE_MFENCE },
{ 1, 0, 0, 0, 0, 0, OTHR, "LFENCE", TGSI_OPCODE_LFENCE },
{ 1, 0, 0, 0, 0, 0, OTHR, "SFENCE", TGSI_OPCODE_SFENCE },
{ 0, 0, 0, 0, 0, 0, OTHR, "BARRIER", TGSI_OPCODE_BARRIER }
};
const struct tgsi_opcode_info *

View File

@ -1514,6 +1514,55 @@ Resource Access Opcodes
ignored.
.. _threadsyncopcodes:
Inter-thread synchronization opcodes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These opcodes are intended for communication between threads running
within the same compute grid. For now they're only valid in compute
programs.
.. opcode:: MFENCE - Memory fence
Syntax: ``MFENCE resource``
Example: ``MFENCE RES[0]``
This opcode forces strong ordering between any memory access
operations that affect the specified resource. This means that
previous loads and stores (and only those) will be performed and
visible to other threads before the program execution continues.
.. opcode:: LFENCE - Load memory fence
Syntax: ``LFENCE resource``
Example: ``LFENCE RES[0]``
Similar to MFENCE, but it only affects the ordering of memory loads.
.. opcode:: SFENCE - Store memory fence
Syntax: ``SFENCE resource``
Example: ``SFENCE RES[0]``
Similar to MFENCE, but it only affects the ordering of memory stores.
.. opcode:: BARRIER - Thread group barrier
``BARRIER``
This opcode suspends the execution of the current thread until all
the remaining threads in the working group reach the same point of
the program. Results are unspecified if any of the remaining
threads terminates or never reaches an executed BARRIER instruction.
Explanation of symbols used
------------------------------

View File

@ -413,7 +413,12 @@ struct tgsi_property_data {
#define TGSI_OPCODE_LOAD 161
#define TGSI_OPCODE_STORE 162
#define TGSI_OPCODE_LAST 163
#define TGSI_OPCODE_MFENCE 163
#define TGSI_OPCODE_LFENCE 164
#define TGSI_OPCODE_SFENCE 165
#define TGSI_OPCODE_BARRIER 166
#define TGSI_OPCODE_LAST 167
#define TGSI_SAT_NONE 0 /* do not saturate */
#define TGSI_SAT_ZERO_ONE 1 /* clamp to [0,1] */