blob: 25489d87c0c9550aa90d0ac3c47b4a99e5dd7481 [file] [log] [blame]
Name
AMD_gcn_shader
Name Strings
GL_AMD_gcn_shader
Contact
Graham Sellers (graham.sellers 'at' amd.com)
Contributors
Graham Sellers, AMD
Daniel Rakos, AMD
Status
Shipping
Version
Last Modified Date: 06/24/2019
Revision: 4
Number
OpenGL Extension #453
Dependencies
This extension is written against Revision 8 of the version 4.40 of the
OpenGL Shading Language Specification, dated January 22, 2014.
This extension builds upon features introduced by the
GL_ARB_shader_group_vote extension.
AMD_gpu_shader_int64 or NV_gpu_shader5 is required.
Overview
This extension exposes miscellaneous features of the AMD "Graphics Core
Next" shader architecture that do not cleanly fit into other extensions
and are not significant enough alone to warrant their own extensions.
This includes cross-SIMD lane ballots, cube map query functions and
a functionality to query the elapsed shader core time.
New Procedures and Functions
None.
New Tokens
None.
IP Status
None.
Additions to Chapter 7 of the OpenGL Shading Language Specification
(Built-In Language Variables)
Modify Section 7.1, Built-In Language Variables
(add to the list of built-in constants for each shader stage listed in
the chapter)
in int gl_SIMDGroupSizeAMD;
Additions to Chapter 8 of the OpenGL Shading Language Specification
(Built-in Functions)
Add New Section 8.9.5, Texture Cube Map Addressing Functions
Syntax:
float cubeFaceIndexAMD(vec3 P)
The function cubeFaceIndexAMD returns a single floating point value
that represents the index of the cube map face that would be accessed
by texture lookup functions for the cube map texture coordinates given
as parameter. The returned value correspond to cube map faces as follows:
* 0.0 for the cube map face facing the positive X direction
* 1.0 for the cube map face facing the negative X direction
* 2.0 for the cube map face facing the positive Y direction
* 3.0 for the cube map face facing the negative Y direction
* 4.0 for the cube map face facing the positive Z direction
* 5.0 for the cube map face facing the negative Z direction
Syntax:
vec2 cubeFaceCoordAMD(vec3 P)
The function cubeFaceCoordAMD returns a two-component floating point
vector that represents the 2D texture coordinates that would be used for
accessing the selected cube map face for the given cube map texture
coordinates given as parameter P.
Modify Section 8.18, Shader Invocation Group Functions
(add to the end of the section)
Syntax:
uint64_t ballotAMD(bool value);
The function ballotAMD returns a bitfield containing the result of
evaluating the expression <value> in all active invocations in the group.
SIMD groups of up to 64 invocations may be represented by the return value
of ballotAMD(). Invocations populate the result starting from the least
significant bit. If <value> evaluates to true for an active invocation
then the corresponding bit is set in the result, otherwise it is not set.
Bits corresponding to invocations that are not active or that do not
exist in the SIMD group (because, for example, they are at bit positions
beyond the SIMD group size) are set to zero. The following trivial
assumptions can be made:
* ballotAMD(true) returns bitfield where the corresponding bits are
set for all active invocations in the SIMD group.
* ballotAMD(false) returns 0ul.
Add New Section 8.19, "Timing Functions"
Syntax:
uint64_t timeAMD(void);
The timeAMD function returns a 64-bit value representing the current
execution clock as seen by the shader processor. Time monotonically
increments as the processor executes instructions. The returned time will
wrap after it exceeds the maximum value representable in 64 bits. The
units of time are not defined and need not be constant. Time is not
dynamically uniform. That is, shader invocations executing as part of a
single draw or dispatch will not necessarily see the same value of time.
Time is also not guaranteed to be consistent across shader stages. For
example, there is no requirement that time sampled inside a fragment
shader invocation will be greater than the time sampled in the vertex
that lead to its execution.
Dependencies on GL_ARB_shader_group_vote:
This extension adds to sections introduced by GL_ARB_shader_group_vote.
If GL_ARB_shader_group_vote is not supported, introduce the referenced
sections, but do not introduce the functionality from that extension.
Revision History
Rev. Date Author Changes
---- -------- -------- ---------------------------------------------
4 06/24/2019 dwitczak gl_SIMDGroupSizeAMD is no longer a built-in constant.
3 03/17/2013 drakos Internal updates + ready to post
2 10/08/2013 gsellers Internal updates
1 09/20/2013 gsellers Initial revision