| 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 |