| Name |
| |
| EXT_shader_samples_identical |
| |
| Name Strings |
| |
| GL_EXT_shader_samples_identical |
| |
| Contact |
| |
| Ian Romanick, Intel (ian.d.romanick 'at' intel.com) |
| |
| Contributors |
| |
| Chris Forbes, Mesa |
| Magnus Wendt, Intel |
| Neil S. Roberts, Intel |
| Graham Sellers, AMD |
| |
| Status |
| |
| XXX - Not complete yet. |
| |
| Version |
| |
| Last Modified Date: November 19, 2015 |
| Revision: 6 |
| |
| Number |
| |
| TBD |
| |
| Dependencies |
| |
| OpenGL 3.2, or OpenGL ES 3.1, or ARB_texture_multisample is required. |
| |
| This extension is written against the OpenGL 4.5 (Core Profile) |
| Specification |
| |
| Overview |
| |
| Multisampled antialiasing has become a common method for improving the |
| quality of rendered images. Multisampling differs from supersampling in |
| that the color of a primitive that covers all or part of a pixel is |
| resolved once, regardless of the number of samples covered. If a large |
| polygon is rendered, the colors of all samples in each interior pixel will |
| be the same. This suggests a simple compression scheme that can reduce |
| the necessary memory bandwidth requirements. In one such scheme, each |
| sample is stored in a separate slice of the multisample surface. An |
| additional multisample control surface (MCS) contains a mapping from pixel |
| samples to slices. |
| |
| If all the values stored in the MCS for a particular pixel are the same, |
| then all the samples have the same value. Applications can take advantage |
| of this information to reduce the bandwidth of reading multisample |
| textures. A custom multisample resolve filter could optimize resolving |
| pixels where every sample is identical by reading the color once. |
| |
| color = texelFetch(sampler, coordinate, 0); |
| if (!textureSamplesIdenticalEXT(sampler, coordinate)) { |
| for (int i = 1; i < MAX_SAMPLES; i++) { |
| vec4 c = texelFetch(sampler, coordinate, i); |
| |
| //... accumulate c into color |
| |
| } |
| } |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| None. |
| |
| Additions to the OpenGL 4.5 (Core Profile) Specification |
| |
| None. |
| |
| Modifications to The OpenGL Shading Language Specification, Version 4.50.5 |
| |
| Including the following line in a shader can be used to control the |
| language features described in this extension: |
| |
| #extension GL_EXT_shader_samples_identical |
| |
| A new preprocessor #define is added to the OpenGL Shading Language: |
| |
| #define GL_EXT_shader_samples_identical |
| |
| Add to the table in section 8.7 "Texture Lookup Functions" |
| |
| Syntax: |
| |
| bool textureSamplesIdenticalEXT(gsampler2DMS sampler, ivec2 coord) |
| |
| bool textureSamplesIdenticalEXT(gsampler2DMSArray sampler, |
| ivec3 coord) |
| |
| Description: |
| |
| Returns true if it can be determined that all samples within the texel |
| of the multisample texture bound to <sampler> at <coord> contain the |
| same values or false if this cannot be determined." |
| |
| Additions to the AGL/EGL/GLX/WGL Specifications |
| |
| None |
| |
| Errors |
| |
| None |
| |
| New State |
| |
| None |
| |
| New Implementation Dependent State |
| |
| None |
| |
| Issues |
| |
| 1) What should the new functions be called? |
| |
| RESOLVED: textureSamplesIdenticalEXT. Initially |
| textureAllSamplesIdenticalEXT was considered, but |
| textureSamplesIdenticalEXT is more similar to the existing textureSamples |
| function. |
| |
| 2) It seems like applications could implement additional optimization if |
| they were provided with raw MCS data. Should this extension also |
| provide that data? |
| |
| There are a number of challenges in providing raw MCS data. The biggest |
| problem being that the amount of MCS data depends on the number of |
| samples, and that is not known at compile time. Additionally, without new |
| texelFetch functions, applications would have difficulty utilizing the |
| information. |
| |
| Another option is to have a function that returns an array of tuples of |
| sample number and count. This also has difficulties with the maximum |
| array size not being known at compile time. |
| |
| RESOLVED: Do not expose raw MCS data in this extension. |
| |
| 3) Should this extension also extend SPIR-V? |
| |
| RESOLVED: Yes, but this has not yet been written. |
| |
| 4) Is it possible for textureSamplesIdenticalEXT to report false negatives? |
| |
| RESOLVED: Yes. It is possible that the underlying hardware may not detect |
| that separate writes of the same color to different samples of a pixel are |
| the same. The shader function is at the whim of the underlying hardware |
| implementation. It is also possible that a compressed multisample surface |
| is not used. In that case the function will likely always return false. |
| |
| Revision History |
| |
| Rev Date Author Changes |
| --- ---------- -------- --------------------------------------------- |
| 1 2014/08/20 cforbes Initial version |
| 2 2015/10/23 idr Change from MESA to EXT. Rebase on OpenGL 4.5, |
| and add dependency on OpenGL ES 3.1. Initial |
| draft of overview section and issues 1 through |
| 3. |
| 3 2015/10/27 idr Typo fixes. |
| 4 2015/11/10 idr Rename extension from EXT_shader_multisample_compression |
| to EXT_shader_samples_identical. |
| Add issue #4. |
| 5 2015/11/18 idr Fix some typos spotted by gsellers. Change the |
| name of the name of the function to |
| textureSamplesIdenticalEXT. |
| 6 2015/11/19 idr Fix more typos spotted by Nicolai Hähnle. |