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: 03/17/2014
    Revision: 3

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

    Modify Section 7.3, Built-In Constants

    (add to the list of built-in constants)

      const int gl_SIMDGroupSizeAMD = 64;

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
    ----  --------    --------  ---------------------------------------------
      3   03/17/2013  drakos    Internal updates + ready to post
      2   10/08/2013  gsellers  Internal updates
      1   09/20/2013  gsellers  Initial revision
