| Index: gpu/GLES2/extensions/CHROMIUM/CHROMIUM_framebuffer_mixed_samples.txt
|
| diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_framebuffer_mixed_samples.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_framebuffer_mixed_samples.txt
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..df65d8f81652eb40817d24bcb6cbcae8256ad0fd
|
| --- /dev/null
|
| +++ b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_framebuffer_mixed_samples.txt
|
| @@ -0,0 +1,147 @@
|
| +Name
|
| +
|
| + CHROMIUM_framebuffer_mixed_samples
|
| +
|
| +Name Strings
|
| +
|
| + GL_CHROMIUM_framebuffer_mixed_samples
|
| +
|
| +Version
|
| +
|
| + Last Modifed Date: 7. December, 2015
|
| +
|
| +Dependencies
|
| +
|
| + OpenGL ES 2.0 is required.
|
| +
|
| + This extension interacts with CHROMIUM_framebuffer_multisample.
|
| +
|
| +Overview
|
| +
|
| + This extension allows multisample rendering with a raster and
|
| + depth/stencil sample count that is larger than the color sample count.
|
| + Rasterization and the results of the depth and stencil tests together
|
| + determine the portion of a pixel that is "covered". It can be useful to
|
| + evaluate coverage at a higher frequency than color samples are stored.
|
| + This coverage is then "reduced" to a collection of covered color samples,
|
| + each having an opacity value corresponding to the fraction of the color
|
| + sample covered. The opacity can optionally be blended into individual
|
| + color samples.
|
| +
|
| + The key features of this extension are:
|
| +
|
| + - It allows a framebuffer object to be considered complete when its depth
|
| + or stencil samples are a multiple of the number of color samples.
|
| +
|
| + - It redefines SAMPLES to be the number of depth/stencil samples (if any);
|
| + otherwise, it uses the number of color samples. SAMPLE_BUFFERS is one if
|
| + there are multisample depth/stencil attachments. Multisample
|
| + rasterization and multisample fragment ops are allowed if SAMPLE_BUFFERS
|
| + is one.
|
| +
|
| + - It replaces several error checks involving SAMPLE_BUFFERS by error
|
| + checks directly referencing the number of samples in the relevant
|
| + attachments.
|
| +
|
| + - A coverage reduction step is added to Per-Fragment Operations which
|
| + converts a set of covered raster/depth/stencil samples to a set of
|
| + covered color samples. The coverage reduction step also includes an
|
| + optional coverage modulation step, multiplying color values by a
|
| + fractional opacity corresponding to the number of associated
|
| + raster/depth/stencil samples covered.
|
| +
|
| +New Procedures and Functions
|
| +
|
| + void CoverageModulationCHROMIUM(enum components);
|
| +
|
| +New Tokens
|
| +
|
| + Accepted by the <pname> parameter of GetBooleanv, GetIntegerv and
|
| + GetFloatv:
|
| +
|
| + COVERAGE_MODULATION_CHROMIUM 0x9332
|
| +
|
| +
|
| +Additions to specification text related to framebuffers and framebuffer objects
|
| +(Framebuffers and Framebuffer Objects)
|
| +
|
| + Pending CHROMIUM_framebuffer_multisample specification.
|
| + Apply relevant rules in spirit of the overview to the specification text.
|
| +
|
| +
|
| +
|
| +Additions to Chapter 3 of OpenGL ES 2.0 Specification (Rasterization)
|
| +
|
| +
|
| + Modify Section 3.2 (Multisampling)
|
| +
|
| + Pending CHROMIUM_framebuffer_multisample specification.
|
| + Apply relevant rules in spirit of the overview to the specification text.
|
| +
|
| +Additions to Chapter 4 of OpenGL ES 2.0 Specification
|
| +(Per-Fragment Operations and the Framebuffer)
|
| +
|
| + Modify Figure 4.1 (Per-fragment operations)
|
| +
|
| + Add a new stage called "Coverage Reduction" between "Dept Buffer Test" and
|
| + "Blending".
|
| +
|
| + Add a new Section 4.1.Y (Coverage Reduction) after 4.1.5.
|
| +
|
| + If the value of effective raster samples is greater than the value of
|
| + color samples, a fragment's coverage is reduced from
|
| + effective raster samples bits to color samples bits. There is an
|
| + implementation-dependent association of raster samples to color samples.
|
| + The reduced "color coverage" is computed such that the coverage bit for
|
| + each color sample is 1 if any of the associated bits in the fragment's
|
| + coverage is on, and 0 otherwise. Blending and writes to the framebuffer
|
| + are not performed on samples whose color coverage bit is zero.
|
| +
|
| + For each color sample, the associated bits of the fragment's coverage are
|
| + counted and divided by the number of associated bits to produce a
|
| + modulation factor R in the range (0,1] (a value of zero would have been
|
| + killed due to a color coverage of 0). Specifically:
|
| +
|
| + N = value of effective raster samples;
|
| + M = value of color samples;
|
| + R = popcount(associated coverage bits) / (N / M);
|
| +
|
| + For each draw buffer with a floating point or normalized color format, the
|
| + fragment's color value is replicated to M values which may each be
|
| + modulated (multiplied) by that color sample's associated value of R. This
|
| + modulation is controlled by the function:
|
| +
|
| + CoverageModulationCHROMIUM(enum components);
|
| +
|
| + <components> may be RGB, RGBA, ALPHA, or NONE. If <components> is RGB or
|
| + RGBA, the red, green, and blue components are modulated. If components is
|
| + RGBA or ALPHA, the alpha component is modulated. The initial value of
|
| + COVERAGE_MODULATION_CHROMIUM is NONE.
|
| +
|
| +New State
|
| +
|
| + Get Value Get Command Type Initial Value Description Sec. Attribute
|
| + --------- ----------- ---- ------------- ----------- ---- ---------
|
| +
|
| + COVERAGE_MODULATION_CHROMIUM GetIntegerv E NONE Which components are 4.1.Y -
|
| + multiplied by coverage
|
| + fraction
|
| +Issues
|
| +
|
| + (1) How is coverage modulation intended to be used?
|
| +
|
| + RESOLVED: Coverage modulation allows the coverage to be converted to
|
| + "opacity", which can then be blended into the color buffer to accomplish
|
| + antialiasing. This is similar to the intent of POLYGON_SMOOTH. For example,
|
| + if non-premultiplied alpha colors are in use (common OpenGL usage):
|
| +
|
| + glCoverageModulationCHROMIUM(GL_ALPHA);
|
| + glEnable(GL_BLEND);
|
| + glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
|
| + GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
| +
|
| + or if using pre-multiplied alpha colors (common in 2D rendering):
|
| +
|
| + glCoverageModulationCHROMIUM(GL_RGBA);
|
| + glEnable(GL_BLEND);
|
| + glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
|
|