15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ARM_shader_framebuffer_fetch
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ARM_shader_framebuffer_fetch
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContributors
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Aske Simon Christensen
125bd8deadSopenharmony_ci    Sandeep Kakarlapudi
135bd8deadSopenharmony_ci
145bd8deadSopenharmony_ciContact
155bd8deadSopenharmony_ci
165bd8deadSopenharmony_ci    Jan-Harald Fredriksen (jan-harald.fredriksen 'at' arm.com)
175bd8deadSopenharmony_ci
185bd8deadSopenharmony_ciStatus
195bd8deadSopenharmony_ci
205bd8deadSopenharmony_ci    Shipping.
215bd8deadSopenharmony_ci
225bd8deadSopenharmony_ciVersion
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ci    Revision 12
255bd8deadSopenharmony_ci    Last Modified Date: November 25, 2013
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ciNumber
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ci    OpenGL ES Extension #165
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ciDependencies
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ci    OpenGL ES 2.0 or higher is required.
345bd8deadSopenharmony_ci
355bd8deadSopenharmony_ci    ESSL 1.00 or higher is required.
365bd8deadSopenharmony_ci
375bd8deadSopenharmony_ci    This extension is written against the OpenGL ES Shading Language
385bd8deadSopenharmony_ci    specification, Language Version 1.00, Document Revision 17 and revision
395bd8deadSopenharmony_ci    OpenGL ES 2.0.25 of the API specification.
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ciOverview
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ci    This extension enables fragment shaders to read existing framebuffer
445bd8deadSopenharmony_ci    data as input. This permits use-cases such as programmable blending,
455bd8deadSopenharmony_ci    and other operations that may not be possible to implement with
465bd8deadSopenharmony_ci    fixed-function blending.
475bd8deadSopenharmony_ci
485bd8deadSopenharmony_ci    This extension also adds the ability to indicate that a shader should
495bd8deadSopenharmony_ci    be run once per sample instead of once per pixel.
505bd8deadSopenharmony_ci
515bd8deadSopenharmony_ci    Reading framebuffer data as input in combination with multiple render
525bd8deadSopenharmony_ci    targets (MRT) may not be supported by all implementations. This
535bd8deadSopenharmony_ci    extension allows applications to query for this capability.
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ciNew Procedures and Functions
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ci    None
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ciNew Tokens
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ci    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled,
625bd8deadSopenharmony_ci    and by the <pname> parameter of GetBooleanv, GetIntegerv, and GetFloatv:
635bd8deadSopenharmony_ci        FETCH_PER_SAMPLE_ARM                                0x8F65
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, and
665bd8deadSopenharmony_ci    GetFloatv:
675bd8deadSopenharmony_ci        FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM           0x8F66
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ciNew Macro Definitions
705bd8deadSopenharmony_ci
715bd8deadSopenharmony_ci    #define GL_ARM_shader_framebuffer_fetch 1
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ciNew Built-in Variables
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci    mediump vec4 gl_LastFragColorARM
765bd8deadSopenharmony_ci
775bd8deadSopenharmony_ciChanges to the OpenGL ES 2.0.25 Specification, Chapter 3
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    Remove the last sentence of Paragraph 2 of Chapter 3.8.1, page 86 ("These
805bd8deadSopenharmony_ci    built-in varying variables include [...]" and add:
815bd8deadSopenharmony_ci
825bd8deadSopenharmony_ci    "These built-in varying variables include the fragment's position, eye z
835bd8deadSopenharmony_ci    coordinate, and front-facing flag, as well as the current color value in the
845bd8deadSopenharmony_ci    framebuffer.
855bd8deadSopenharmony_ci
865bd8deadSopenharmony_ci    When reading the current color value from the framebuffer, the values
875bd8deadSopenharmony_ci    associated with the image attached to color attachment point 0 are returned.
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ci    Reading the current color value from the framebuffer may not be supported on
905bd8deadSopenharmony_ci    all hardware if more than one color attachment has an image attached. This
915bd8deadSopenharmony_ci    capability can be determined by calling GetBooleanv with the symbolic
925bd8deadSopenharmony_ci    constant FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM. If FALSE is returned,
935bd8deadSopenharmony_ci    shaders that read the current value from the framebuffer when more than one
945bd8deadSopenharmony_ci    color attachment point has an image attached produce undefined results.
955bd8deadSopenharmony_ci
965bd8deadSopenharmony_ci    Reading the current color value from the framebuffer is only supported for
975bd8deadSopenharmony_ci    fixed-point color components. Undefined results are produced if a shader
985bd8deadSopenharmony_ci    reads from gl_LastFragColorARM while either no image is attached to color
995bd8deadSopenharmony_ci    attachment 0 or the image attached to color attachment point 0 has a format
1005bd8deadSopenharmony_ci    that is not unsigned normalized fixed-point. No error is generated in this
1015bd8deadSopenharmony_ci    case.
1025bd8deadSopenharmony_ci
1035bd8deadSopenharmony_ci    Add to Chapter 3.2 Multisampling:
1045bd8deadSopenharmony_ci
1055bd8deadSopenharmony_ci    "Per-sample fetch can be used to specify that reads of current values from
1065bd8deadSopenharmony_ci    the framebuffer, colors and other associated data, including varying
1075bd8deadSopenharmony_ci    interpolation, should be evaluated for each sample. Per-sample fetch
1085bd8deadSopenharmony_ci    is controlled by by calling Enable or Disable with the symbolic constant
1095bd8deadSopenharmony_ci    FETCH_PER_SAMPLE_ARM.
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci    If SAMPLE_BUFFERS is not one, or the fragment shader does not statically
1125bd8deadSopenharmony_ci    access current values from the framebuffer, per-sample fetch has no effect."
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES Shading Language Specification
1155bd8deadSopenharmony_ci
1165bd8deadSopenharmony_ci    Remove Paragraph 2 of section 3.8, page 17, Identifiers ("Identifiers
1175bd8deadSopenharmony_ci    starting with "gl_" are reserved [...]") and add:
1185bd8deadSopenharmony_ci
1195bd8deadSopenharmony_ci    "Identifiers starting with "gl_" are reserved for use by OpenGL ES, and
1205bd8deadSopenharmony_ci    may not be declared in a shader as either a variable or a function.
1215bd8deadSopenharmony_ci    However, as noted in the specification, certain predeclared "gl_" names
1225bd8deadSopenharmony_ci    are allowed to be redeclared in a shader for the specific purpose of
1235bd8deadSopenharmony_ci    changing their precision qualifier."
1245bd8deadSopenharmony_ci
1255bd8deadSopenharmony_ciAdditions to Chapter 7 of the OpenGL ES Shading Language Specification
1265bd8deadSopenharmony_ci
1275bd8deadSopenharmony_ci    In section 7.2 (Fragment Shader Special Variables), after the
1285bd8deadSopenharmony_ci    8th paragraph ("If the shader executes the discard keyword,") and before
1295bd8deadSopenharmony_ci    the paragraph on about gl_FragCoord, add:
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ci        "The fragment shader has access to the read-only built-in
1325bd8deadSopenharmony_ci        variable gl_LastFragColorARM. The value of this variable is the
1335bd8deadSopenharmony_ci        color of the pixel to which the current fragment is destined, i.e.,
1345bd8deadSopenharmony_ci        the color that will be used as the destination color during blending,
1355bd8deadSopenharmony_ci        for draw buffer 0.
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci        If the current render target is multisampled, and the destination
1385bd8deadSopenharmony_ci        pixel thus contains more than one sample per fragment, the value of
1395bd8deadSopenharmony_ci        gl_LastFragColorARM is an implementation-dependent combination of the
1405bd8deadSopenharmony_ci        samples within the destination pixel that are covered by the current
1415bd8deadSopenharmony_ci        fragment. The value will be between the minium and maximum value of the
1425bd8deadSopenharmony_ci        samples in the pixel.
1435bd8deadSopenharmony_ci
1445bd8deadSopenharmony_ci        If the current GL state would cause the destination color to be
1455bd8deadSopenharmony_ci        converted from sRGB to linear at input to blending, then the color read
1465bd8deadSopenharmony_ci        from the framebuffer is converted from sRGB to linear before going into
1475bd8deadSopenharmony_ci        gl_LastFragColorARM. If the destination pixel contains more than one
1485bd8deadSopenharmony_ci        sample, this conversion is applied to each color sample prior to the
1495bd8deadSopenharmony_ci        averaging.
1505bd8deadSopenharmony_ci
1515bd8deadSopenharmony_ci        If no samples within the destination pixel are covered by the current
1525bd8deadSopenharmony_ci        fragment, the value of gl_LastFragColorARM is undefined.
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci        If more than one color attachment has an image attached, reads from
1555bd8deadSopenharmony_ci        gl_LastFragColorARM, may produce undefined results. This is, however,
1565bd8deadSopenharmony_ci        not an error. See section 3.8.1 "Shader Variables" of the OpenGL ES
1575bd8deadSopenharmony_ci        2.0.25 Graphics System Specification for more details.
1585bd8deadSopenharmony_ci
1595bd8deadSopenharmony_ci        gl_LastFragColorARM is declared with a default precision qualifier.
1605bd8deadSopenharmony_ci        This can be changed by redeclaring the variable with the desired
1615bd8deadSopenharmony_ci        precision qualifier. Redeclarations must be at global scope and must
1625bd8deadSopenharmony_ci        not otherwise alter the declared type of the variable.
1635bd8deadSopenharmony_ci
1645bd8deadSopenharmony_ci        Reads from gl_LastFragColorARM must wait for the processing of all
1655bd8deadSopenharmony_ci        previous fragments destined for the current pixel to complete. For best
1665bd8deadSopenharmony_ci        performance, it is therefore recommended that reads from this built-in
1675bd8deadSopenharmony_ci        variable is done as late in the execution of the fragment shader as
1685bd8deadSopenharmony_ci        possible.
1695bd8deadSopenharmony_ci
1705bd8deadSopenharmony_ci        Access to gl_LastFragColorARM is optional, and must be enabled by:
1715bd8deadSopenharmony_ci
1725bd8deadSopenharmony_ci        #extension GL_ARM_shader_framebuffer_fetch : <behavior>
1735bd8deadSopenharmony_ci
1745bd8deadSopenharmony_ci        Where <behavior> is as specified in section 3.4."
1755bd8deadSopenharmony_ci
1765bd8deadSopenharmony_ci    In section 7.2 (Fragment Shader Special Variables), at the end of
1775bd8deadSopenharmony_ci    the list of built-in variables, add:
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci        "mediump vec4 gl_LastFragColorARM"
1805bd8deadSopenharmony_ci
1815bd8deadSopenharmony_ciErrors
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    None
1845bd8deadSopenharmony_ci
1855bd8deadSopenharmony_ciNew State
1865bd8deadSopenharmony_ci
1875bd8deadSopenharmony_ci    Add to table 6.6 (Multisampling):
1885bd8deadSopenharmony_ci
1895bd8deadSopenharmony_ci    Get Value                       Get Command    Type    Initial Value    Description
1905bd8deadSopenharmony_ci    ---------                       -----------    ----    -------------    ---------
1915bd8deadSopenharmony_ci    FETCH_PER_SAMPLE_ARM            IsEnabled      B       FALSE            Per-sample fetch enabled
1925bd8deadSopenharmony_ci
1935bd8deadSopenharmony_ciNew Implementation Dependent State
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ci    Add to table 6.19 (Implementation Dependent Values (cont.)):
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci    Get Value                                  Type  Get Command  Minimum Value  Description        Section
1985bd8deadSopenharmony_ci    ---------                                  ----  -----------  -------------  --------------     -------
1995bd8deadSopenharmony_ci    FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM  B     GetBooleanv  -              Reading existing   3.8.1
2005bd8deadSopenharmony_ci                                                                                 framebuffer color data
2015bd8deadSopenharmony_ci                                                                                 from a fragment
2025bd8deadSopenharmony_ci                                                                                 shader when more than
2035bd8deadSopenharmony_ci                                                                                 one color attachment
2045bd8deadSopenharmony_ci                                                                                 point has an image attached 
2055bd8deadSopenharmony_ci                                                                                 gives defined results.
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ciIssues
2085bd8deadSopenharmony_ci
2095bd8deadSopenharmony_ci    (1) What should the built-in variables be called?
2105bd8deadSopenharmony_ci
2115bd8deadSopenharmony_ci        RESOLVED.
2125bd8deadSopenharmony_ci
2135bd8deadSopenharmony_ci        In the current implementation, it is called gl_FBColor, but
2145bd8deadSopenharmony_ci        since we need to change that anyway for the public version (to
2155bd8deadSopenharmony_ci        add the ARM suffix), we could change the name completely if we
2165bd8deadSopenharmony_ci        come up with something better.
2175bd8deadSopenharmony_ci
2185bd8deadSopenharmony_ci        The current proposal is to use gl_LastFragColorARM as in
2195bd8deadSopenharmony_ci        NV_shader_framebuffer_fetch with an added extension post-fix.
2205bd8deadSopenharmony_ci        This could then be extended to include
2215bd8deadSopenharmony_ci        gl_LastFragDataARM[gl_MaxDrawBuffers] as in EXT_framebuffer_fetch in a
2225bd8deadSopenharmony_ci        future extension.
2235bd8deadSopenharmony_ci
2245bd8deadSopenharmony_ci    (2) What should the precision of gl_LastFragColorARM be?
2255bd8deadSopenharmony_ci
2265bd8deadSopenharmony_ci        RESOLVED.
2275bd8deadSopenharmony_ci
2285bd8deadSopenharmony_ci        Is it usually appropriate for the variable to be mediump (or
2295bd8deadSopenharmony_ci        perhaps lowp), but that precludes the mechanism from being
2305bd8deadSopenharmony_ci        used effectively with float32 render targets. float32 render targets
2315bd8deadSopenharmony_ci        are not required in either OpenGL ES 2.0 or OpenGL ES 3.0.
2325bd8deadSopenharmony_ci
2335bd8deadSopenharmony_ci        gl_LastFragColor is currently defined as mediump by default, but the
2345bd8deadSopenharmony_ci        precision can be redeclared in the shader in the same manner as in
2355bd8deadSopenharmony_ci        EXT_shader_framebuffer_fetch.
2365bd8deadSopenharmony_ci
2375bd8deadSopenharmony_ci    (3) What should the precision of gl_LastFragDepthARM be?
2385bd8deadSopenharmony_ci
2395bd8deadSopenharmony_ci        RESOLVED.
2405bd8deadSopenharmony_ci
2415bd8deadSopenharmony_ci        No longer relevant for this extension as the depth buffer support
2425bd8deadSopenharmony_ci        has been split out to a separate extension.
2435bd8deadSopenharmony_ci
2445bd8deadSopenharmony_ci    (4) Which framebuffer formats are supported?
2455bd8deadSopenharmony_ci
2465bd8deadSopenharmony_ci        RESOLVED.
2475bd8deadSopenharmony_ci
2485bd8deadSopenharmony_ci        All UNORM formats are supported. No other formats are supported.
2495bd8deadSopenharmony_ci
2505bd8deadSopenharmony_ci        Since gl_LastFragColor is a built-in variable, with a given
2515bd8deadSopenharmony_ci        type, other types are not trivial to add.
2525bd8deadSopenharmony_ci
2535bd8deadSopenharmony_ci    (5) Should there be a query for the valid framebuffer formats?
2545bd8deadSopenharmony_ci
2555bd8deadSopenharmony_ci        RESOLVED.
2565bd8deadSopenharmony_ci
2575bd8deadSopenharmony_ci        If only some formats are supported, the application needs some
2585bd8deadSopenharmony_ci        way to determine which formats are supported and which are not.
2595bd8deadSopenharmony_ci
2605bd8deadSopenharmony_ci        Alternatives:
2615bd8deadSopenharmony_ci          A) Specify the exact set of formats in the extension.
2625bd8deadSopenharmony_ci          B) Add a query, for example something based on the internal format
2635bd8deadSopenharmony_ci             queries in OpenGL ES 3.0.
2645bd8deadSopenharmony_ci
2655bd8deadSopenharmony_ci        Given the resolution of Issue 4, alternative A is effectively
2665bd8deadSopenharmony_ci        chosen.
2675bd8deadSopenharmony_ci
2685bd8deadSopenharmony_ci    (6) What performance recommendations should the extension contain?
2695bd8deadSopenharmony_ci
2705bd8deadSopenharmony_ci        RESOLVED.
2715bd8deadSopenharmony_ci
2725bd8deadSopenharmony_ci        There is currently a recommendation to place the framebuffer
2735bd8deadSopenharmony_ci        read as late as possible in the shader.
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ci    (7) Should gl_LastFragStencil and gl_LastFragDepth be split into
2765bd8deadSopenharmony_ci        separate extensions?
2775bd8deadSopenharmony_ci
2785bd8deadSopenharmony_ci        RESOLVED.
2795bd8deadSopenharmony_ci
2805bd8deadSopenharmony_ci        Yes. This is is now added by ARM_shader_framebuffer_fetch_depth_stencil.
2815bd8deadSopenharmony_ci
2825bd8deadSopenharmony_ci    (8) Should shaders that read the current fragment color, depth, or stencil
2835bd8deadSopenharmony_ci        be run per-sample?
2845bd8deadSopenharmony_ci
2855bd8deadSopenharmony_ci        RESOLVED.
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ci        The EXT_framebuffer_fetch extension automatically runs the parts of the
2885bd8deadSopenharmony_ci        shader that depend on gl_LastFragData per sample if this variable is
2895bd8deadSopenharmony_ci        read. In some use-cases (e.g., tone-mapping), this is important to
2905bd8deadSopenharmony_ci        avoid shader aliasing. This approach is, however, not possible to
2915bd8deadSopenharmony_ci        implement on all hardware.
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci        An alternative is to allow the application to control the shader
2945bd8deadSopenharmony_ci        iteration rate. This could be done similarly to the API part of
2955bd8deadSopenharmony_ci        ARB_sample_shading.
2965bd8deadSopenharmony_ci
2975bd8deadSopenharmony_ci        The latter approach is taken by this extension.
2985bd8deadSopenharmony_ci
2995bd8deadSopenharmony_ci    (9) Should the value read back include only the samples covered by the
3005bd8deadSopenharmony_ci        current fragment?
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci        RESOLVED.
3035bd8deadSopenharmony_ci
3045bd8deadSopenharmony_ci        Yes, only the samples covered by the current fragment will be read back.
3055bd8deadSopenharmony_ci
3065bd8deadSopenharmony_ci        The alternative would be to ignore the coverage mask when returning the
3075bd8deadSopenharmony_ci        value, but this seems less desirable.
3085bd8deadSopenharmony_ci
3095bd8deadSopenharmony_ci        If the shader is run per sample (see Issue 8) both options would
3105bd8deadSopenharmony_ci        give the same result.
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ci    (10)How is this different from EXT_shader_framebuffer_fetch?
3135bd8deadSopenharmony_ci
3145bd8deadSopenharmony_ci        RESOLVED.
3155bd8deadSopenharmony_ci
3165bd8deadSopenharmony_ci        The core functionality is the same, that is, fragment shaders may read
3175bd8deadSopenharmony_ci        existing framebuffer data as input.
3185bd8deadSopenharmony_ci
3195bd8deadSopenharmony_ci        The two main differences are:
3205bd8deadSopenharmony_ci         * This extension places the mechanism for running the shader per sample
3215bd8deadSopenharmony_ci           under application control. It is not possible to run only those parts
3225bd8deadSopenharmony_ci           of the shader that depend on the current framebuffer color per
3235bd8deadSopenharmony_ci           sample.
3245bd8deadSopenharmony_ci         * This extension may not be compatible with multiple render targets on
3255bd8deadSopenharmony_ci           all hardware.
3265bd8deadSopenharmony_ci
3275bd8deadSopenharmony_ci    (11) What is meant by undefined results in this extension?
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci        RESOLVED.
3305bd8deadSopenharmony_ci
3315bd8deadSopenharmony_ci        Reads from gl_LastFragColorARM may return undefined results in some
3325bd8deadSopenharmony_ci        cases as described in the text. This means that there is no guarantees
3335bd8deadSopenharmony_ci        on the exact value returned in these cases. The values will typically
3345bd8deadSopenharmony_ci        be a GPU specific 'default' value, or correspond to the API clear value.
3355bd8deadSopenharmony_ci        It is guaranteed that these values will never originate from other GL
3365bd8deadSopenharmony_ci        contexts or applications.
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ciRevision History
3395bd8deadSopenharmony_ci
3405bd8deadSopenharmony_ci    Revision 12, 25/11/2013 (Jan-Harald Fredriksen)
3415bd8deadSopenharmony_ci        Added and resolved issue 11.
3425bd8deadSopenharmony_ci
3435bd8deadSopenharmony_ci    Revision 11, 26/09/2013 (Jan-Harald Fredriksen)
3445bd8deadSopenharmony_ci        Restricting redeclarations of built-in variables to global scope.
3455bd8deadSopenharmony_ci
3465bd8deadSopenharmony_ci    Revision 10, 15/07/2013 (Jan-Harald Fredriksen)
3475bd8deadSopenharmony_ci        Minor clarification.
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ci    Revision 9, 10/07/2013 (Jan-Harald Fredriksen)
3505bd8deadSopenharmony_ci        Renaming SAMPLE_SHADING_ARM to FETCH_PER_SAMPLE_ARM and restricting it
3515bd8deadSopenharmony_ci        to shaders that use fetch to avoid confusion with possible per per-
3525bd8deadSopenharmony_ci        sample shading extensions in the future.
3535bd8deadSopenharmony_ci
3545bd8deadSopenharmony_ci    Revision 8, 02/05/2013 (Jan-Harald Fredriksen)
3555bd8deadSopenharmony_ci        Separated out depth and stencil functionality.
3565bd8deadSopenharmony_ci        Changing MRT interactions to depend on the number of color attachments
3575bd8deadSopenharmony_ci        that have images attached to them.
3585bd8deadSopenharmony_ci        Removing error condition when reading from non-fixed-point color
3595bd8deadSopenharmony_ci        attachments.
3605bd8deadSopenharmony_ci
3615bd8deadSopenharmony_ci    Revision 7, 19/04/2013 (Jan-Harald Fredriksen)
3625bd8deadSopenharmony_ci        Language clarifications.
3635bd8deadSopenharmony_ci
3645bd8deadSopenharmony_ci    Revision 6, 12/04/2013 (Jan-Harald Fredriksen)
3655bd8deadSopenharmony_ci        Removing explicit references to specific GPUs.
3665bd8deadSopenharmony_ci        Resolved issues 4 and 5.
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ci    Revision 5, 11/04/2013 (Jan-Harald Fredriksen)
3695bd8deadSopenharmony_ci        Allowing the new built-in variables to be redeclared for purposes of
3705bd8deadSopenharmony_ci        redefining their precision qualifier.
3715bd8deadSopenharmony_ci
3725bd8deadSopenharmony_ci    Revision 4, 10/04/2013 (Jan-Harald Fredriksen)
3735bd8deadSopenharmony_ci        Adding FRAGMENT_SHADER_FRAMEBUFFER_FETCH_DRAW_BUFFERS_ARM.
3745bd8deadSopenharmony_ci        Clarifying ESSL language about how reads are done when multisampling is
3755bd8deadSopenharmony_ci        enabled.
3765bd8deadSopenharmony_ci
3775bd8deadSopenharmony_ci    Revision 3, 09/04/2013 (Jan-Harald Fredriksen)
3785bd8deadSopenharmony_ci        Tentatively resolved issue 8 and 9. Added issue 10.
3795bd8deadSopenharmony_ci
3805bd8deadSopenharmony_ci    Revision 2, 08/10/2012 (Jan-Harald Fredriksen)
3815bd8deadSopenharmony_ci        Added issue 9.
3825bd8deadSopenharmony_ci
3835bd8deadSopenharmony_ci    Revision 1, 22/07/2012 (Jan-Harald Fredriksen)
3845bd8deadSopenharmony_ci        First draft based on ARM_framebuffer_read.
385