Name OES_sample_shading Name Strings GL_OES_sample_shading Contact Daniel Koch, NVIDIA Corporation (dkoch 'at' nvidia.com) Contributors Pat Brown, NVIDIA Eric Werness, NVIDIA Graeme Leese, Broadcom Contributors to ARB_sample_shading Members of the OpenGL ES working group Notice Copyright (c) 2011-2013 The Khronos Group Inc. Copyright terms at http://www.khronos.org/registry/speccopyright.html Specification Update Policy Khronos-approved extension specifications are updated in response to issues and bugs prioritized by the Khronos OpenGL ES Working Group. For extensions which have been promoted to a core Specification, fixes will first appear in the latest version of that core Specification, and will eventually be backported to the extension document. This policy is described in more detail at https://www.khronos.org/registry/OpenGL/docs/update_policy.php Status Complete. Ratified by the Khronos Board of Promoters on 2014/03/14. Version Last Modified Date: January 30, 2014 Revision: 8 Number OpenGL ES Extension #169 Dependencies OpenGL ES 3.0 and GLSL ES 3.00 required. This extension is written against the OpenGL ES 3.0.2 (April 8, 2013) and the OpenGL ES Shading Language Specification Revision 4 (March 6, 2013) specifications. This extension requires OES_sample_variables. Overview In standard multisample rendering, an implementation is allowed to assign the same sets of fragment shader input values to each sample. This can cause aliasing where the fragment shader input values are used to generate a result that doesn't antialias itself, for example with alpha-tested transparency. This extension adds the ability to explicitly request that an implementation use a minimum number of unique set of fragment computation inputs when multisampling a pixel. Specifying such a requirement can reduce aliasing that results from evaluating the fragment computations too few times per pixel. This extension adds new global state that controls the minimum number of samples for which attribute data is independently interpolated. When enabled, all fragment-shading operations are executed independently on each sample. New Procedures and Functions void MinSampleShadingOES(float value); New Tokens Accepted by the parameter of Enable, Disable, and IsEnabled, and by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetInteger64v: SAMPLE_SHADING_OES 0x8C36 Accepted by the parameter of GetBooleanv, GetIntegerv, GetInteger64v, and GetFloatv: MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 Additions to Chapter 2 of the OpenGL ES 3.0 Specification (OpenGL ES Operation) None. Additions to Chapter 3 of the OpenGL ES 3.0 Specification (Rasterization) Modify Section 3.3 Multisampling p. 95 (add a new subsection at the end of the section, p. 96) 3.3.1 Sample Shading 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 the symbolic constant SAMPLE_SHADING_OES. If the value of SAMPLE_BUFFERS is zero or SAMPLE_SHADING_OES is disabled, sample shading has no effect. Otherwise, an implementation must provide a minimum of max(ceil( * ),1) unique sets of fragment shader inputs for each fragment, where is the value of MIN_SAMPLE_SHADING_VALUE_OES and is the number of samples (the values of SAMPLES). These are associated with the samples in an implementation-dependent manner. The value of MIN_SAMPLE_SHADING_VALUE_OES is specified by calling void MinSampleShadingOES(float value); with set to the desired minimum sample shading fraction. is clamped to [0,1] when specified. The sample shading fraction may be queried by calling GetFloatv with pname set to MIN_SAMPLE_SHADING_VALUE_OES. When the sample shading fraction is 1.0, a separate set of fragment shader input values are evaluated for each sample, and each set of values is evaluated at the sample location. Additions to Chapter 4 of the OpenGL ES 3.0.2 Specification (Per-Fragment Operations and the Framebuffer) None. Additions to Chapter 5 of the OpenGL ES 3.0.2 Specification (Special Functions) None. Additions to Chapter 6 of the OpenGL ES 3.0.2 Specification (State and State Requests) None. Modifications to The OpenGL ES Shading Language Specification, Version 3.00.04 None. Additions to the AGL/GLX/WGL/EGL Specifications None Errors None. New State Add to Table 6.7 (Multisampling) Get Initial Get Value Type Command Value Description Sec. --------- ---- --------- -------- ----------- ---- SAMPLE_SHADING_OES B IsEnabled FALSE sample coverage 3.3.1 enable MIN_SAMPLE_SHADING_VALUE_OES R+ GetFloatv 0 fraction of multi- 3.3.1 samples to use for sample shading New Implementation Dependent State None. Issues (0) This extension is based on ARB_sample_shading. What are the major differences? 1- rebased against ES 3.0 2- various editing for consistency to GL 4.4/GLSL 440 specs 3- parameter to MinSampleShading changed to float to match GL 4.x 4- removed mention of SAMPLE_ALPHA_TO_ONE 5- replaced mention of "color and texture coordinates" with more generic language about fragment shader inputs. 6- removed mention of multisample enable. 7- moved shading language sample variables to OES_sample_variables For historical issues, please see ARB_sample_shading. (1) OpenGL has a MULTISAMPLE enable that was not included in OpenGL ES. Should we add it into this extension or base it purely on if the target surface is multisample? DISCUSSION: GL (4.4) says: "Multisample rasterization is enabled or disabled by calling Enable or Disable with the symbolic constant MULTISAMPLE." GL ES (3.0.2) says: "Multisample rasterization cannot be enabled or disabled after a GL context is created." RESOLVED. Multisample rasterization should be based on the target surface properties. Will not pick up the explicit multisample enable, but the language for ES3.0.2 doesn't sound right either. Bug 10690 tracks this and it should be fixed in later versions of the ES3.0 specification. Revision History Rev. Date Author Changes ---- ---------- -------- ----------------------------------------- 8 2014-01-20 dkoch rename to OES, clean editing notess 7 2014-01-20 dkoch Fix a typo, and dangling ARB suffix 6 2013-10-03 dkoch Minor edits 5 2013-09-09 dkoch Require OES_sample_variables. Move gl_SampleMaskIn interaction base extension. 4 2013-09-03 gleese Moved sample variables to OES_sample_variables 3 2013-08-26 dkoch resolved issues 1&2 and supporting edits. replaced discussion of fixed-function inputs with generic language. 2 2013-08-13 dkoch add missing suffices, follow extension template 1 2013-08-12 dkoch Port ARB_sample_shading to ES 3.0