Name
    QCOM_shader_framebuffer_fetch_rate

Name Strings

    GL_QCOM_shader_framebuffer_fetch_rate

Contact

    Jeff Leger ( jleger 'at' qti.qualcomm.com)

Contributors

    Jeff Leger, Qualcomm
    Jonathan Wicks, Qualcomm

Status

    DRAFT

Version

    Last Modified Date:         August 20, 2018
    Revision:                   1

Number

    OpenGL ES Extension #304


Dependencies

    OpenGL ES 2.0 and GLSL ES 1.00 are required.

    This extension is written against the OpenGL ES 3.2 (May 14, 2018)
    and the OpenGL ES Shading Language 3.20.4 Specification
    (June 14, 2018) specifications.

    This extension interacts with EXT_shader_framebuffer_fetch.
    This extension interacts with ARM_shader_framebuffer_fetch_depth_stencil.

Overview

    When certain built-ins (e.g. gl_LastFragData, gl_LastFragStencilARM)
    are referenced in the shader, the shader is required to execute at sample-rate
    if the attachments are multisampled.  In some use-cases executing such shaders
    at fragment-rate is actually the preferred behavior.  When this extension is
    enabled, such GLSL shaders will execute at fragment-rate and the built-in
    will return a per-fragment value.  This avoids the significant performance
    penalty that would otherwise be incurred with sample-rate shading.

    The following built-ins are affected when the this extension is enabled:

        gl_LastFragData      (from EXT_shader_framebuffer_fetch)
        gl_LastFragDepthARM  (from ARM_shader_framebuffer_fetch_depth_stencil)

    The following built-ins are disallowed when this extension is enabled:

        gl_SampleID
        gl_SamplePosition
        interpolateAtSample()

IP Status

    No known IP claims.

New Procedures and Functions

    None

New Tokens

    None

Additions to Chapter 13 of the OpenGL ES 3.2 Specification
(Fixed-Function Primitive Assembly and Rasterization)

    Modify Section 13.4.1, Sample Shading, p. 353

    Modify the first paragraph:
        "Sample shading can be used to specify a minimum number of unique samples
        to process for each fragment. Sample shading is controlled by calling
        Enable or Disable with target SAMPLE_SHADING."

    by adding one sentence to the end:
        "Sample shading can be used to specify a minimum number of unique samples
        to process for each fragment. Sample shading is controlled by calling
        Enable or Disable with target SAMPLE_SHADING.  For any fragment shader
        that has forced fragment-rate by enabling QCOM_shader_framebuffer_fetch_rate,
        such shader will execute as if SAMPLE_SHADING is disabled."

Additions to Chapter 14 (Programmable Fragment Processing) of the OpenGL ES 3.2 Specification


    Modify Section 14.2.2 (Shader Inputs), p. 372

        Modify the sentence:
            "Using gl_SampleID in a fragment shader causes the entire shader to
            be executed per-sample."

        to:
            "Using gl_SampleID in a fragment shader causes the entire shader to
            be executed per-sample.  If GL_QCOM_shader_framebuffer_fetch_rate is
            enabled, any use of gl_SampleID will result in a compile or link error."

        Modify the sentence:
            "Using gl_SamplePosition in a fragment shader causes the entire shader to
            be executed per-sample."

        to:
            "Using gl_SamplePosition in a fragment shader causes the entire shader to
            be executed per-sample.  If GL_QCOM_shader_framebuffer_fetch_rate is
            enabled, any use of gl_SamplePosition will result in a compile or link
            error."


    Modify Section 14.2.3 (Shader Outputs), p. 372

        [[ The following applies if EXT_shader_framebuffer_fetch is supported ]]

            In the new paragraphs added by EXT_shader_framebuffer_fetch to the end
            this section, change the following added sentence:

                From:
                   "Reading from a user-defined fragment output declared inout
                   causes the shader to be evaluated per-sample, since the
                   framebuffer potentially contains different color values for
                   each sample."

                To:
                  "If QCOM_shader_framebuffer_fetch_rate is not enabled, reading from
                  a user-defined fragment output declared inout causes the shader
                  to be evaluated per-sample, since the framebuffer potentially
                  contains different color values for each sample."

            Add the following paragraph to the end of "Shader Outputs" section:

              "If the current rendertarget is multisampled and if
              QCOM_shader_framebuffer_fetch_rate is enabled, then reading from
              a user-defined fragment output declared inout will return an
              implementation-dependent weighted average of the samples within
              the destination pixel covered by the current fragment.  The value
              will be between the minium and maximum value of the covered samples.
              If the destination colors must be linearized from sRGB as
              described in the preceding paragraphs, the conversion from sRGB
              to linear happens before computing the weighted average.

Additions to the EGL Specifications

    None.

Modifications to The OpenGL ES Shading Language Specification, Version 3.20.4

    Changes to section 7.1.5. (Fragment Shader Special Variables), p 120.

        Add the following at the start of this section:

            "Static use of certain built-in variables described in this section
            will cause the shader to be evaluated per-sample. This language feature
            can be optionally disabled, forcing such shaders to evaluate per-
            fragment.  The optional behavior can be enabled using:

            #extension GL_QCOM_shader_framebuffer_fetch_rate : <behavior>

            where <behavior> is as specified in section 3.4 (Preprocessor).

            If GL_QCOM_shader_framebuffer_fetch_rate is enabled, it is a compile-time
            or link-time error if any variable is declared with the "sample"
            qualifier or if the built-in function interpolateAtSample() is statically
            referenced."

            Add the New preprocessor #defines are added to the OpenGL ES Shading Language:

            "#define GL_QCOM_shader_framebuffer_fetch_rate  1"

        Modify the last sentence of the paragraph starting with "The input variable
        gl_SampleID is filled with the sample number of the sample currently being
        processed"

        from:
            "Any static use of this variable in a fragment shader causes the entire
            shader to be evaluated per-sample."
        to
            "If GL_QCOM_shader_framebuffer_fetch_rate is not enabled, any static use
            of this variable in a fragment shader causes the entire shader to be evaluated
            per-sample.  If GL_QCOM_shader_framebuffer_fetch_rate is enabled, an static
            reference to gl_SampleID will cause a compile or link error."

        Modify the last sentence of the paragraph starting with "The input variable
        gl_SamplePosition contains the position of the current sample within the
        multisample draw buffer."

        from:
            "Any static use of this variable in a fragment shader causes the entire
            shader to be evaluated per-sample."
        to
            "If GL_QCOM_shader_framebuffer_fetch_rate is not enabled, any static use of
            this variable in a fragment shader causes the entire shader to be evaluated
            per-sample.  If GL_QCOM_shader_framebuffer_fetch_rate is enabled, an static
            reference to gl_SamplePosition will cause a compile or link error."

Interactions with EXT_shader_framebuffer_fetch.

    Extension EXT_shader_framebuffer_fetch adds built-ins (gl_LastFragData[] for
    version 1.0 shaders and inout variables version 3.0 shaders) that cause fragment
    shaders to run at sample-rate.  This extension relaxes that requirement to
    allow fragment-rate and specifies that the value returned from gl_LastFragData
    will be an implementation-dependent weighted average of the covered pixels.

Interactions with ARM_shader_framebuffer_fetch_depth_stencil.

   Extension ARM_shader_framebuffer_fetch adds built-in "gl_LastFragDepthARM",
   and specifies the value returned -- for both sample-rate and fragment-rate
   execution.  This extension can be used to control whether sample-rate or
   fragment-rate execution is used.

Errors

    None.

New State

    None.

New Implementation Dependent State

    None

Issues

    (1) Does it make sense to enable this extension for a shader that references
        per-sample built-ins like gl_SampleID and gl_SamplePosition?

        RESOLVED: No.  It doesn't make sense to force fragment-rate
        execution using this extension, while also referencing per-sample
        built-ins.  Since there is no known use-case, this will be a compile
        or link error.

        For the same reason, using the "sample" qualifier or using
        interpolateAtSample() will cause a compile or link error.

    (2) How does this extension interact with API-controlled sample-rate shading?

        RESOLVED: For shaders that enable this this extension, those the shaders
        will always execute at fragment-rate, regardless of other API states.
        In particular, the enable/disable of SAMPLE_SHADING and the value of
        MIN_SAMPLE_SHADING_VALUE will have no effect on such shaders.

    (3) How does this extension differ from ARM_shader_framebuffer_fetch?

        ARM_shader_framebuffer_fetch provides a means for controlling whether
        shaders fetching color from the framebuffer should execute at sample-rate or
        fragement rate.  The API state "FETCH_PER_SAMPLE_ARM" controls
        this behavior.

        This extension also provides control over sample-rate vs fragment-rate
        for framebuffer fetch shaders, but does so in the GLSL shader.  Some
        implementations require this information at shader compile time.

Revision History

    Rev.    Date      Author    Changes
    ----  ----------  --------  -----------------------------------------
    1     2018-08-20  jleger     initial version
