Home | History | Annotate | Download | only in specs
      1 Name
      2 
      3     EXT_shader_samples_identical
      4 
      5 Name Strings
      6 
      7     GL_EXT_shader_samples_identical
      8 
      9 Contact
     10 
     11     Ian Romanick, Intel (ian.d.romanick 'at' intel.com)
     12 
     13 Contributors
     14 
     15     Chris Forbes, Mesa
     16     Magnus Wendt, Intel
     17     Neil S. Roberts, Intel
     18     Graham Sellers, AMD
     19 
     20 Status
     21 
     22     XXX - Not complete yet.
     23 
     24 Version
     25 
     26     Last Modified Date: November 19, 2015
     27     Revision: 6
     28 
     29 Number
     30 
     31     TBD
     32 
     33 Dependencies
     34 
     35     OpenGL 3.2, or OpenGL ES 3.1, or ARB_texture_multisample is required.
     36 
     37     This extension is written against the OpenGL 4.5 (Core Profile)
     38     Specification
     39 
     40 Overview
     41 
     42     Multisampled antialiasing has become a common method for improving the
     43     quality of rendered images.  Multisampling differs from supersampling in
     44     that the color of a primitive that covers all or part of a pixel is
     45     resolved once, regardless of the number of samples covered.  If a large
     46     polygon is rendered, the colors of all samples in each interior pixel will
     47     be the same.  This suggests a simple compression scheme that can reduce
     48     the necessary memory bandwidth requirements.  In one such scheme, each
     49     sample is stored in a separate slice of the multisample surface.  An
     50     additional multisample control surface (MCS) contains a mapping from pixel
     51     samples to slices.
     52 
     53     If all the values stored in the MCS for a particular pixel are the same,
     54     then all the samples have the same value.  Applications can take advantage
     55     of this information to reduce the bandwidth of reading multisample
     56     textures.  A custom multisample resolve filter could optimize resolving
     57     pixels where every sample is identical by reading the color once.
     58 
     59     color = texelFetch(sampler, coordinate, 0);
     60     if (!textureSamplesIdenticalEXT(sampler, coordinate)) {
     61         for (int i = 1; i < MAX_SAMPLES; i++) {
     62             vec4 c = texelFetch(sampler, coordinate, i);
     63 
     64             //... accumulate c into color
     65 
     66         }
     67     }
     68 
     69 New Procedures and Functions
     70 
     71     None.
     72 
     73 New Tokens
     74 
     75     None.
     76 
     77 Additions to the OpenGL 4.5 (Core Profile) Specification
     78 
     79     None.
     80 
     81 Modifications to The OpenGL Shading Language Specification, Version 4.50.5
     82 
     83     Including the following line in a shader can be used to control the
     84     language features described in this extension:
     85 
     86         #extension GL_EXT_shader_samples_identical
     87 
     88     A new preprocessor #define is added to the OpenGL Shading Language:
     89 
     90         #define GL_EXT_shader_samples_identical
     91 
     92     Add to the table in section 8.7 "Texture Lookup Functions"
     93 
     94     Syntax:
     95 
     96         bool textureSamplesIdenticalEXT(gsampler2DMS sampler, ivec2 coord)
     97 
     98         bool textureSamplesIdenticalEXT(gsampler2DMSArray sampler,
     99                                         ivec3 coord)
    100 
    101     Description:
    102 
    103         Returns true if it can be determined that all samples within the texel
    104         of the multisample texture bound to <sampler> at <coord> contain the
    105         same values or false if this cannot be determined."
    106 
    107 Additions to the AGL/EGL/GLX/WGL Specifications
    108 
    109     None
    110 
    111 Errors
    112 
    113     None
    114 
    115 New State
    116 
    117     None
    118 
    119 New Implementation Dependent State
    120 
    121     None
    122 
    123 Issues
    124 
    125     1) What should the new functions be called?
    126 
    127     RESOLVED: textureSamplesIdenticalEXT.  Initially
    128     textureAllSamplesIdenticalEXT was considered, but
    129     textureSamplesIdenticalEXT is more similar to the existing textureSamples
    130     function.
    131 
    132     2) It seems like applications could implement additional optimization if
    133        they were provided with raw MCS data.  Should this extension also
    134        provide that data?
    135 
    136     There are a number of challenges in providing raw MCS data.  The biggest
    137     problem being that the amount of MCS data depends on the number of
    138     samples, and that is not known at compile time.  Additionally, without new
    139     texelFetch functions, applications would have difficulty utilizing the
    140     information.
    141 
    142     Another option is to have a function that returns an array of tuples of
    143     sample number and count.  This also has difficulties with the maximum
    144     array size not being known at compile time.
    145 
    146     RESOLVED: Do not expose raw MCS data in this extension.
    147 
    148     3) Should this extension also extend SPIR-V?
    149 
    150     RESOLVED: Yes, but this has not yet been written.
    151 
    152     4) Is it possible for textureSamplesIdenticalEXT to report false negatives?
    153 
    154     RESOLVED: Yes.  It is possible that the underlying hardware may not detect
    155     that separate writes of the same color to different samples of a pixel are
    156     the same.  The shader function is at the whim of the underlying hardware
    157     implementation.  It is also possible that a compressed multisample surface
    158     is not used.  In that case the function will likely always return false.
    159 
    160 Revision History
    161 
    162     Rev  Date        Author    Changes
    163     ---  ----------  --------  ---------------------------------------------
    164       1  2014/08/20  cforbes   Initial version
    165       2  2015/10/23  idr       Change from MESA to EXT.  Rebase on OpenGL 4.5,
    166                                and add dependency on OpenGL ES 3.1.  Initial
    167                                draft of overview section and issues 1 through
    168                                3.
    169       3  2015/10/27  idr       Typo fixes.
    170       4  2015/11/10  idr       Rename extension from EXT_shader_multisample_compression
    171                                to EXT_shader_samples_identical.
    172                                Add issue #4.
    173       5  2015/11/18  idr       Fix some typos spotted by gsellers.  Change the
    174                                name of the name of the function to
    175                                textureSamplesIdenticalEXT.
    176       6  2015/11/19  idr       Fix more typos spotted by Nicolai Hhnle.
    177