aboutsummaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorYunchao He <yunchao.he@intel.com>2018-01-10 21:28:00 +0800
committerCommit Bot <commit-bot@chromium.org>2018-08-31 17:15:44 +0000
commit97dbf436117f592048bf899d8d0aa735e87378a8 (patch)
tree8fc30b9716911ad9f0330b76c99f4f2daff18310 /extensions
parent3a181e3e53bee44614b832dc6a711b9d78b94ca2 (diff)
downloadangle-97dbf436117f592048bf899d8d0aa735e87378a8.tar.gz
Add specification for ANGLE_texture_multisample.
The patch adds the specification for the ANGLE_texture_multisample extension, which enables the functionality of multisample texture. This extension is also the basis to expose multisample texture to web via a webgl extension. BUG=angleproject:2275 BUG=angleproject:2775 Change-Id: I21771ac1d7d3e2fad8bf5d5e0a5c5e082c8fe7a2 Reviewed-on: https://chromium-review.googlesource.com/859917 Commit-Queue: Yunchao He <yunchao.he@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Diffstat (limited to 'extensions')
-rw-r--r--extensions/ANGLE_texture_multisample.txt764
1 files changed, 764 insertions, 0 deletions
diff --git a/extensions/ANGLE_texture_multisample.txt b/extensions/ANGLE_texture_multisample.txt
new file mode 100644
index 0000000000..246a5bbf2e
--- /dev/null
+++ b/extensions/ANGLE_texture_multisample.txt
@@ -0,0 +1,764 @@
+Name
+
+ ANGLE_texture_multisample
+
+Name Strings
+
+ GL_ANGLE_texture_multisample
+
+Contributors
+
+ Yunchao He, Intel Corporation
+ Yizhou Jiang, Intel Corporation
+ Contributors to the OpenGL ES 3.1, GLSL ES 3.1, and ARB_texture_multisample
+
+Contact
+
+ Yunchao He (yunchao.he 'at' intel.com)
+
+Status
+
+ Incomplete
+
+Version
+
+ Last Modified Date: August 27, 2018
+ Author Revision: 1
+
+Number
+
+ OpenGL ES Extension XX
+
+Dependencies
+
+ OpenGL ES 3.0 is required.
+
+ This extension is written against the OpenGL ES 3.0.5 and OpenGL ES
+ Shading Language 3.0 (Document Revision 6) specifications.
+
+ KHR_robustness affects the behavior of this specification.
+
+Overview
+
+ This extension provides support for a new type of texture -
+ two-dimensional multisample textures - as well as mechanisms to
+ allocate storage and attach such textures to FBOs for rendering.
+ It also add supports using such textures in a shader, fetching specific
+ samples from such textures in a shader, and querying the dimensions of
+ such textures in a shader.
+
+ This extension also includes the following functionality, some of which
+ was first described in NV_explicit_multisample:
+
+ * An API to query the location of samples within the pixel
+
+ * An explicit control for the multisample sample mask to augment the
+ control provided by SampleCoverage
+
+ * An API to query the texture's level-of-detail information for various
+ parameters
+
+ * A mechanism to support the SAMPLE_MASK capability
+
+ * A mechanism to return corresponding types for multisample textures when
+ the uniform type is queried by getActiveUniform
+
+ This extension does not expose multisampled 2D array textures, because they
+ are not supported in OpenGL ES 3.1.
+
+IP Status
+
+ No known IP claims.
+
+New Procedures and Functions
+
+ void TexStorage2DMultisampleANGLE(enum target,
+ sizei samples,
+ enum sizedinternalformat,
+ sizei width,
+ sizei height,
+ boolean fixedsamplelocations);
+
+ void GetMultisamplefvANGLE(enum pname, uint index, float *val);
+
+ void SampleMaskiANGLE(uint maskNumber, bitfield mask);
+
+ void GetTexLevelParameter{if}vANGLE(enum target, int level,
+ enum pname, T *params );
+
+New Tokens
+
+ Accepted by the <target> parameter of BindTexture,
+ TexStorage2DMultisampleANGLE, GetInternalformativ, TexParameter{if}*,
+ GetTexParameter{if}v, GetTexLevelParameter{if}vANGLE and
+ by the <textarget> parameter of FramebufferTexture2D:
+
+ TEXTURE_2D_MULTISAMPLE_ANGLE 0x9100
+
+ Accepted by the <pname> parameter of GetMultisamplefvANGLE:
+
+ SAMPLE_POSITION_ANGLE 0x8E50
+
+ Accepted by the <cap> parameter of Enable, Disable, and IsEnabled:
+
+ SAMPLE_MASK_ANGLE 0x8E51
+
+ Accepted by the <target> parameter of GetIntegeri_v:
+
+ SAMPLE_MASK_VALUE_ANGLE 0x8E52
+
+ Accepted by the <pname> parameter of GetIntegerv:
+
+ MAX_SAMPLE_MASK_WORDS_ANGLE 0x8E59
+ MAX_COLOR_TEXTURE_SAMPLES_ANGLE 0x910E
+ MAX_DEPTH_TEXTURE_SAMPLES_ANGLE 0x910F
+ MAX_INTEGER_SAMPLES_ANGLE 0x9110
+ TEXTURE_BINDING_2D_MULTISAMPLE_ANGLE 0x9104
+
+ Accepted by the <pname> parameter of GetTexLevelParameter{if}vANGLE:
+
+ TEXTURE_SAMPLES_ANGLE 0x9106
+ TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE 0x9107
+ TEXTURE_WIDTH 0x1000
+ TEXTURE_HEIGHT 0x1001
+ TEXTURE_DEPTH 0x8071
+ TEXTURE_INTERNAL_FORMAT 0x1003
+ TEXTURE_RED_SIZE 0x805C
+ TEXTURE_GREEN_SIZE 0x805D
+ TEXTURE_BLUE_SIZE 0x805E
+ TEXTURE_ALPHA_SIZE 0x805F
+ TEXTURE_DEPTH_SIZE 0x884A
+ TEXTURE_STENCIL_SIZE 0x88F1
+ TEXTURE_SHARED_SIZE 0x8C3F
+ TEXTURE_RED_TYPE 0x8C10
+ TEXTURE_GREEN_TYPE 0x8C11
+ TEXTURE_BLUE_TYPE 0x8C12
+ TEXTURE_ALPHA_TYPE 0x8C13
+ TEXTURE_DEPTH_TYPE 0x8C16
+ TEXTURE_COMPRESSED 0x86A1
+
+ Returned by the <type> parameter of GetActiveUniform:
+
+ SAMPLER_2D_MULTISAMPLE_ANGLE 0x9108
+ INT_SAMPLER_2D_MULTISAMPLE_ANGLE 0x9109
+ UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ANGLE 0x910A
+
+Additions to Chapter 2 of the OpenGL ES 3.0.5 Specification (OpenGL ES
+Operation)
+
+ Add to table 2.10 "OpenGL ES Shading Language type tokens" page 64:
+
+ Type Name Token Keyword
+ ----------------------------------------- ------------
+ SAMPLER_2D_MULTISAMPLE_ANGLE sampler2DMS
+ INT_SAMPLER_2D_MULTISAMPLE_ANGLE isampler2DMS
+ UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ANGLE usampler2DMS
+
+ Add to section 2.12.9, after subsection "Texel Fetches":
+
+ Multisample Texel Fetches
+
+ Multisample buffers do not have mipmaps, and there is no level of
+ detail parameter for multisample texel fetches. Instead, an integer
+ parameter selects the sample number to be fetched from the buffer.
+ The number identifying the sample is the same as the value used to
+ query the sample location using GetMultisamplefvANGLE. Multisample
+ textures are not filtered when samples are fetched, and filter state
+ is ignored.
+
+ If the context was created with robust buffer access enabled, the result
+ of the texel fetch in the following cases is zero. If robust buffer
+ access is not enabled, the result of the texel fetch is undefined if
+ any of the following conditions hold:
+
+ * the texel coordinate (i, j) refer to a texel outside the extents
+ of the multisample texture image, where any of
+ i < 0 i >= W
+ j < 0 j >= H
+ and the size parameter W and H refer to the width and height of
+ the image.
+
+ * the specified sample number does not exist (is negative, or greater
+ than or equal to the number of samples in the texture).
+
+ Additionally, these fetches may only be performed on a multisample
+ texture sampler. No other sample or fetch commands may be performed
+ on a multisample texture sampler.
+
+Additions to Chapter 3 of the OpenGL ES 3.0.5 Specification (Rasterization)
+
+ Insert into section 3.3, "Multisampling" after the discussion of
+ the query for SAMPLES:
+
+ (..., and is queried by calling GetIntegerv with pname set to SAMPLES.)
+
+ The location at which shading is performed for a given sample (the
+ shading sample location) is queried with the command
+
+ void GetMultisamplefvANGLE(enum pname, uint index, float *val);
+
+ <pname> must be SAMPLE_POSITION_ANGLE, and <index> corresponds to the
+ sample for which the location should be returned. The shading sample
+ location (x, y) is returned as two floating-point values in (val[0],
+ val[1]) respectively. x and y each lie in the range [0, 1] and
+ represent a location in pixel space at which depth and associated
+ data for that sample are evaluated for a fragment (e.g. where sample
+ shading is performed). (0.5, 0.5) thus corresponds to the pixel center.
+ If the multisample mode does not have fixed sample locations, the returned
+ values may only reflect the locations of samples within some pixels.
+
+ An INVALID_ENUM error is generated if <pname> is not SAMPLE_LOCATION.
+ An INVALID_VALUE error is generated if <index> is greater than or equal to
+ the value of SAMPLES.
+
+ Modify Section 3.8.1, "Texture Objects":
+
+ (modify first paragraph of section, p. 122, simply adding
+ references to multisample textures)
+
+ Textures in GL are represented by named objects. The name space for texture
+ objects is the unsigned integers, with zero reserved by the GL to represent
+ the default texture object. The default texture object is bound to each of
+ the TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, and
+ TEXTURE_2D_MULTISAMPLE_ANGLE targets during context initialization.
+
+ (modify the last paragraph, p. 123)
+
+ The texture object name space, including the initial two- and
+ three-dimensional, two-dimensional array, cube map, and two-dimensional
+ multisample texture objects, is shared among all texture units. A texture
+ object may be bound to more than one texture unit simultaneously. After a
+ texture object is bound, any GL operations on that target object affect
+ any other texture units to which the same texture object is bound.
+
+ Modify Section 3.8.3, "Texture Image Specification" (p. 134):
+
+ (add the new target to MAX_TEXTURE_SIZE description)
+
+ In a similar fashion, the maximum allowable width of a texel array
+ for a two-dimensional texture, two-dimensional array texture,
+ or two-dimensional multisample texture, and the maximum allowable
+ height of a two-dimensional texture, two-dimensional array texture,
+ or two-dimensional multisample texture, must be at least 2^(k-lod)
+ for image arrays of level 0 through k, where k is the log base 2 of
+ MAX_TEXTURE_SIZE.
+
+ Insert new Section 3.8.5, "Multisample Textures". Renumber subsequent
+ sections:
+
+ In addition to the texture types described in previous sections, an
+ additional type of texture is supported. A multisample texture is
+ similar to a two-dimensional texture, except it contains multiple
+ samples per texel. Multisample textures do not have multiple image
+ levels, and are immutable.
+
+ The command
+
+ void TexStorage2DMultisampleANGLE(enum target, sizei samples,
+ int sizedinternalformat,
+ sizei width, sizei height,
+ boolean fixedsamplelocations);
+
+ establishes the data storage, format, dimensions, and number of samples
+ of a multisample texture's image. <target> must be
+ TEXTURE_2D_MULTISAMPLE_ANGLE. <width> and <height> are the dimensions
+ in texels of the texture.
+
+ <samples> represents a request for a desired minimum number of samples.
+ Since different implementations may support different sample counts for
+ multisampled textures, the actual number of samples allocated for the
+ texture image is implementation-dependent. However, the resulting value
+ for TEXTURE_SAMPLES_ANGLE is guaranteed to be greater than or equal to
+ <samples> and no more than the next larger sample count supported by the
+ implementation.
+
+ If <fixedsamplelocations> is TRUE, the image will use identical sample
+ locations and the same number of samples for all texels in the image,
+ and the sample locations will not depend on the sizedinternalformat or
+ size of the image.
+
+ Upon success, TexStorage2DMultisampleANGLE deletes any existing image
+ for <target> and the contents of texels are undefined. The values of
+ TEXTURE_WIDTH, TEXTURE_HEIGHT, TEXTURE_SAMPLES_ANGLE,
+ TEXTURE_INTERNAL_FORMAT and TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE are
+ set to <width>, <height>, the actual number of samples allocated,
+ <sizedinternalformat>, and <fixedsamplelocations> respectively.
+
+ When a multisample texture is accessed in a shader, the access takes one
+ vector of integers describing which texel to fetch and an integer
+ corresponding to the sample numbers described in section 3.3 describing
+ which sample within the texel to fetch. No standard sampling instructions
+ are allowed on the multisample texture targets, and no filtering is
+ performed by the fetch. Fetching a sample number less than zero, or
+ greater than or equal to the number of samples in the texture, produces
+ undefined results.
+
+ An INVALID_ENUM error is generated if target is not
+ TEXTURE_2D_MULTISAMPLE_ANGLE.
+ An INVALID_OPERATION error is generated if zero is bound to <target>.
+ An INVALID_VALUE is generated if <width> or <height> is less than 1.
+ An INVALID_VALUE is generated if <width> or <height> is greater than
+ the value of MAX_TEXTURE_SIZE.
+ An INVALID_VALUE is generated if samples is zero.
+ An INVALID_ENUM error is generated if <sizedinternalformat> is not
+ color-renderable, depth-renderable, or stencil-renderable (as defined
+ in section 4.4.4).
+ An INVALID_ENUM error is generated if <sizedinternalformat> is one of the
+ unsized base internal formats listed in table 3.11.
+ An INVALID_OPERATION is generated if <samples> is greater than the maximum
+ number of samples supported for this <target> and <sizedinternalformat>,
+ The maximum number of samples supported can be determined by calling
+ GetInternalformativ with a <pname> of SAMPLES (see section 6.1.15).
+ An INVALID_OPERATION is generated if the value of TEXTURE_IMMUTABLE_FORMAT
+ for the texture currently bound to <target> on the active texture unit is
+ TRUE.
+ An OUT_OF_MEMORY error is generated if the GL is unable to create a texture
+ image of the requested size.
+
+ Modify Section 3.8.7, "Texture Parameters":
+
+ (add TEXTURE_2D_MULTISAMPLE_ANGLE to the texture targets accepted by
+ TexParameter*)
+
+ <target> is the target, either TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY,
+ TEXTURE_CUBE_MAP, or TEXTURE_2D_MULTISAMPLE_ANGLE.
+
+ Add the following paragraph to the end of Section 3.8.7:
+
+ An INVALID_ENUM is generated if <target> is TEXTURE_2D_MULTISAMPLE_ANGLE
+ and <pname> is any sampler state from table 6.10. An INVALID_OPERATION
+ error is generated if <target> is TEXTURE_2D_MULTISAMPLE_ANGLE, and
+ <pname> TEXTURE_BASE_LEVEL is set to any value other than zero.
+
+ Modify Section 3.8.14, "Texture State" (p. 162):
+
+ (... the compressed flag set to FALSE, and a zero compressed size).
+
+ Multisample textures also contain an integer identifying the number of
+ samples in each texel, and a boolean indicating whether identical sample
+ locations and number of samples will be used for all texels in the image.
+
+Additions to Chapter 4 of the OpenGL ES 3.0.5 Specification (Per-Fragment
+Operations and the Framebuffer)
+
+ Modify Section 4.1.3, "Multisample Fragment Operations" (p. 174):
+
+ (modify the first paragraph to include SAMPLE_MASK_ANGLE and
+ SAMPLE_MASK_VALUE_ANGLE on the list of values the coverage value is
+ modified based on.)
+
+ This step modifies fragment alpha and coverage values based on the values
+ of SAMPLE_ALPHA_TO_COVERAGE, SAMPLE_COVERAGE, SAMPLE_COVERAGE_VALUE,
+ SAMPLE_COVERAGE_INVERT, SAMPLE_MASK_ANGLE, and SAMPLE_MASK_VALUE_ANGLE.
+
+ Add to the end of Section 4.1.3, after the discussion of SAMPLE_COVERAGE:
+
+ If SAMPLE_MASK_ANGLE is enabled, the fragment coverage is ANDed
+ with the coverage value SAMPLE_MASK_VALUE_ANGLE.
+
+ The value of SAMPLE_MASK_VALUE_ANGLE is specified using
+
+ void SampleMaskiANGLE(GLuint maskNumber, GLbitfield mask);
+
+ with <mask> set to the desired mask for mask word <maskNumber>. Bit B of
+ mask word M corresponds to sample 32*M+B as described in Section 3.3. The
+ sample mask value is queried by calling GetIntegeri_v with <target> set to
+ SAMPLE_MASK_VALUE_ANGLE and the index set to <maskNumber>.
+
+ An INVALID_VALUE error is generated if <maskNumber> is greater than or
+ equal to the value of MAX_SAMPLE_MASK_WORDS_ANGLE.
+
+ Modify Section 4.4.2, "Attaching Images to Framebuffer Objects":
+
+ (the first paragraph of RenderbufferStorageMultisample p. 204)
+
+ ... If either <width> or <height> is greater than the value of
+ MAX_RENDERBUFFER_SIZE, then the error INVALID_VALUE is generated. If
+ <samples> is greater than the maximum number of samples supported for
+ <sizedinternalformat>, then the error INVALID_OPERATION is generated (see
+ GetInternalformativ in section 6.1.15). If the GL is unable to create
+ a data store of the requested size, the error OUT_OF_MEMORY is generated.
+
+ (the third paragraph of "Required Renderbuffer Formats" p. 205):
+
+ Implementations must support creation of renderbuffers in these
+ required formats with up to the value of MAX_SAMPLES multisamples,
+ with the exception that the signed and unsigned integer formats are
+ required only to support creation of renderbuffers with up to the
+ value of MAX_INTEGER_SAMPLES_ANGLE multisamples, which must be at
+ least one.
+
+ (modify section 4.4.2.4 "Attaching Texture Images to a Framebuffer",
+ describing FrameBufferTexture2D p. 207)
+
+ If texture is not zero, then texture must either name an existing
+ two-dimensional texture object and textarget must be TEXTURE_2D, texture
+ must name an existing cube map texture and textarget must be one of the
+ cube map face targets from table 3.21, or texture must name an existing
+ multisample texture and textarget must be TEXTURE_2D_MULTISAMPLE_ANGLE.
+ Otherwise, an INVALID_OPERATION error is generated.
+
+ <level> specifies ...
+
+ If <textarget> is TEXTURE_2D_MULTISAMPLE_ANGLE, then <level> must be zero.
+ Otherwise, an INVALID_VALUE error is generated. If textarget is one of ...
+
+
+ Modify Section 4.4.4.2, "Whole Framebuffer Completeness":
+
+ (modify the last bullet at the top of p. 215)
+
+ - The value of RENDERBUFFER_SAMPLES is the same for all attached
+ renderbuffers; the value of TEXTURE_SAMPLES_ANGLE is the same for all
+ attached textures; and, if the attached images are a mix of
+ renderbuffers and textures, the value of RENDERBUFFER_SAMPLES
+ matches the value of TEXTURE_SAMPLES_ANGLE.
+
+ { FRAMEBUFFER_INCOMPLETE_MULTISAMPLE }
+
+ (add one more bullet after the last bullet, p. 215)
+
+ - The value of TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE is the same for all
+ attached textures; and, if the attached images are a mix of renderbuffers
+ and textures, the value of TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE must be
+ TRUE for all attached textures.
+
+ { FRAMEBUFFER_INCOMPLETE_MULTISAMPLE }
+
+Additions to Chapter 6 of the OpenGL ES 3.0.5 Specification (State and State
+Requests)
+
+ Modify Section 6.1.3, "Enumerated Queries":
+
+ (modify the paragraph describing the <target> parameter of
+ GetTexParameter*)
+
+ <target> may be one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY,
+ TEXTURE_CUBE_MAP, or TEXTURE_2D_MULTISAMPLE_ANGLE, indicating the
+ currently bound two-dimensional, three-dimensional, two-dimensional
+ array, cube map, or two-dimensional multisample texture object,
+ respectively.
+
+ An INVALID_ENUM is generated if <target> is not one of the texture
+ targets described above.
+ An INVALID_ENUM is generated if <pname> is not one of the texture
+ parameters described above.
+
+ Modify Section 6.1.4 "Texture Queries":
+
+ (Add the following text to the end of the section)
+
+ The commands
+
+ void GetTexLevelParameter{if}vANGLE(enum target, int level,
+ enum pname, T *params );
+
+ place information about texture image parameter <pname> for level-of-detail
+ <level> of the specified target into <params>. <pname> must be one of the
+ symbolic values in table 6.11.
+
+ <target> may be one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, one of
+ the cube map face targets from table 3.18, or TEXTURE_2D_MULTISAMPLE_ANGLE,
+ indicating the two- or three-dimensional texture, two-dimensional array
+ texture, one of the six distinct 2D images making up the cube map texture
+ object, or two-dimensional multisample texture. Otherwise an INVALID_ENUM is
+ generated.
+
+ <level> determines which level-of-detail's state is returned. If <level>
+ is negative or larger than the maximum allowable level-of-detail, then an
+ INVALID_VALUE error is generated.
+
+ Note that TEXTURE_CUBE_MAP is not a valid <target> parameter for
+ GetTexLevelParameter{if}vANGLE, because it does not specify a particular
+ cube map face.
+
+ For texture images with uncompressed internal formats, queries of
+ <pname> TEXTURE_RED_TYPE, TEXTURE_GREEN_TYPE, TEXTURE_BLUE_TYPE,
+ TEXTURE_ALPHA_TYPE, and TEXTURE_DEPTH_TYPE return the data type used
+ to store the component. Types NONE, SIGNED_NORMALIZED, UNSIGNED_-
+ NORMALIZED, FLOAT, INT, and UNSIGNED_INT respectively indicate missing,
+ signed normalized fixed-point, unsigned normalized fixed-point,
+ floating-point, signed unnormalized integer, and unsigned unnormalized
+ integer components. Queries of <pname> TEXTURE_RED_SIZE, TEXTURE_GREEN_SIZE,
+ TEXTURE_BLUE_SIZE, TEXTURE_ALPHA_SIZE, TEXTURE_DEPTH_SIZE,
+ TEXTURE_STENCIL_SIZE, and TEXTURE_SHARED_SIZE return the actual resolutions
+ of the stored image components, not the resolutions specified when the image
+ was defined. Invalid <pname> generate an INVALID_ENUM error.
+
+ For texture images with compressed internal formats, the types returned
+ specify how components are interpreted after decompression, while the
+ resolutions returned specify the component resolution of an uncompressed
+ internal format that produces an image of roughly the same quality as the
+ compressed image in question. Since the quality of the implementation's
+ compression algorithm is likely data-dependent, the returned component sizes
+ should be treated only as rough approximations.
+
+ Queries of <pname> TEXTURE_INTERNAL_FORMAT, TEXTURE_WIDTH, TEXTURE_HEIGHT,
+ and TEXTURE_DEPTH return the internal format, width, height, and depth,
+ respectively, as specified when the image array was created.
+
+ Queries of <pname> TEXTURE_SAMPLES_ANGLE, and
+ TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE on multisample textures return the
+ number of samples and whether texture sample fixed locations are enabled,
+ respectively. For non-multisample texture, the default values 0 and TRUE
+ as in new added table 6.11 are returned respectively.
+
+ Modify Section 6.1.15, "Internal Format Queries":
+
+ (modify the paragraph describing target as follows, p. 244)
+
+ <target> indicates the usage of the internalformat, and must be either
+ RENDERBUFFER or TEXTURE_2D_MULTISAMPLE_ANGLE, indicating the renderbuffer,
+ or two-dimensional multisample texture. Otherwise an INVALID_ENUM error
+ is generated.
+
+ (add the following paragraph after "Querying SAMPLES with a <bufSize>
+ ...")
+
+ The maximum value of SAMPLES is guaranteed to be at least the lowest of
+ the value of MAX_INTEGER_SAMPLES_ANGLE if internal format is a signed or
+ unsigned integer format, the value of MAX_DEPTH_TEXTURE_SAMPLES_ANGLE if
+ internalformat is a depth or stencil-renderable format and target is
+ TEXTURE_2D_MULTISAMPLE_ANGLE, the value of MAX_COLOR_TEXTURE_SAMPLES_ANGLE
+ if internal format is a color-renderable format and target is
+ TEXTURE_2D_MULTISAMPLE_ANGLE, or the value of MAX_SAMPLES.
+
+ (remove the last paragraph on p. 244)
+ "Since multisampling is not supported for signed and unsigned integer
+ internal formats, the value of NUM_SAMPLE_COUNTS will be zero for such
+ formats."
+
+ (modify to the first paragraph on p. 245)
+ When query every accepted <internalformat> on multisample renderbuffer or
+ texture, the value of NUM_SAMPLE_COUNTS is guaranteed to be at least
+ one, and the maximum value in SAMPLES is guaranteed to be at least the
+ value of MAX_SAMPLES. If <target> does not support multisample (is not
+ multisample renderbuffer or texture), the value of NUM_SAMPLE_COUNTS will
+ be zero for any accepted <internalformat>.
+
+Errors
+
+ The error INVALID_VALUE is generated by GetIntegeri_v if <target> is
+ SAMPLE_MASK_VALUE_ANGLE and <index> is greater than or equal to
+ MAX_SAMPLE_MASK_WORDS_ANGLE.
+
+ The error INVALID_VALUE is generated by SampleMaskiANGLE if <index> is
+ greater than or equal to MAX_SAMPLE_MASK_WORDS_ANGLE.
+
+ The error INVALID_ENUM is generated by TexStorage2DMultisampleANGLE if
+ <target> is not TEXTURE_2D_MULTISAMPLE_ANGLE.
+
+ The error INVALID_OPERATION is generated by TexStorage2DMultisampleANGLE
+ if zero is bound to <target>.
+
+ The error INVALID_VALUE is generated by TexStorage2DMultisampleANGLE if
+ <width> or <height> is less than 1 or greater than the value of
+ MAX_TEXTURE_SIZE.
+
+ The error INVALID_VALUE is generated by TexStorage2DMultisampleANGLE if
+ <samples> is zero.
+
+ The error INVALID_ENUM is generated by TexStorage2DMultisampleANGLE if
+ <sizedinternalformat> is not color-renderable, depth-renderable, or
+ stencil-renderable (as defined
+ in section 4.4.4).
+
+ The error INVALID_ENUM is generated by TexStorage2DMultisampleANGLE if
+ <sizedinternalformat> is one of the unsized base internal formats listed
+ in table 3.11.
+
+ The error INVALID_OPERATION is generated by TexStorage2DMultisampleANGLE
+ if <samples> is greater than the maximum number of samples supported for
+ this <target> and <sizedinternalformat>, The maximum number of samples
+ supported can be determined by calling GetInternalformativ with a <pname>
+ of SAMPLES (see section 6.1.15).
+
+ The error INVALID_OPERATION is generated by TexStorage2DMultisampleANGLE
+ if the value of TEXTURE_IMMUTABLE_FORMAT for the texture currently bound
+ to <target> on the active texture unit is TRUE.
+
+ The error OUT_OF_MEMORY is generated by TexStorage2DMultisampleANGLE
+ if the GL is unable to create a texture image of the requested size.
+
+ The error INVALID_ENUM is generated by GetMultisamplefvANGLE if <pname>
+ is not SAMPLE_POSITION_ANGLE.
+
+ The error INVALID_VALUE is generated by GetMultisamplefvANGLE if <index>
+ is greater than or equal to the value of SAMPLES.
+
+ The error INVALID_OPERATION is generated by RenderbufferStorageMultisample
+ if <sizedinternalformat> is a signed or unsigned integer format and
+ <samples> is greater than the value of MAX_INTEGER_SAMPLES_ANGLE.
+
+ The error INVALID_OPERATION is generated by TexParameter* if <target> is
+ TEXTURE_2D_MULTISAMPLE_ANGLE, <pname> is TEXTURE_BASE_LEVEL, and <value>
+ is not zero.
+
+ The error INVALID_OPERATION is generated by TexParameter* if <target> is
+ TEXTURE_2D_MULTISAMPLE_ANGLE and <pname> is sampler state value from table
+ 6.10.
+
+ The error INVALID_ENUM is generated by GetTexLevelParameter{if}vANGLE
+ if <target> is not one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, one of
+ the cube map face targets from table 3.18, or TEXTURE_2D_MULTISAMPLE_ANGLE.
+
+ The error INVALID_VALUE is generated by GetTexLevelParameter{if}vANGLE
+ if <level> is negative or larger than the maximum allowable level-of-detail.
+
+ The error INVALID_ENUM is generated by GetTexLevelParameter{if}vANGLE
+ if <value> is not one of TEXTURE_RED_TYPE, TEXTURE_GREEN_TYPE,
+ TEXTURE_BLUE_TYPE, TEXTURE_ALPHA_TYPE, TEXTURE_DEPTH_TYPE,
+ TEXTURE_DEPTH_SIZE, TEXTURE_STENCIL_SIZE, TEXTURE_SHARED_SIZE,
+ TEXTURE_SAMPLES_ANGLE, TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE, TEXTURE_WIDTH,
+ TEXTURE_HEIGHT, TEXTURE_DEPTH, TEXTURE_INTERNAL_FORMAT, TEXTURE_RED_SIZE,
+ TEXTURE_GREEN_SIZE, TEXTURE_BLUE_SIZE, TEXTURE_ALPHA_SIZE,
+ or TEXTURE_COMPRESSED.
+
+New State
+
+ (add to table 6.7, Multisampling p. 252)
+
+ Initial
+ Get Value Type Get Command Value Description Sec.
+ --------- ---- ----------- ------- ---------------------- -----
+ SAMPLE_MASK_ANGLE B IsEnabled FALSE Additional sample mask 4.1.3
+ SAMPLE_MASK_VALUE_ANGLE nxZ+ GetIntegeri_v ~0 Additional sample mask value 4.1.3
+
+ Where n is the number of sample mask words (the value of
+ MAX_SAMPLE_MASK_WORDS_ANGLE) the implementation supports.
+
+ (add to table 6.8, Textures (selector, state per texture unit) p. 253)
+
+ Initial
+ Get Value Type Get Command Value Description Sec.
+ ------------------------------------ ---- ----------- ------ --------------------------- -----
+ TEXTURE_BINDING_2D_MULTISAMPLE_ANGLE 32*xZ+ GetIntegerv 0 Texture object bound to 3.8.1
+ TEXTURE_2D_MULTISAMPLE_ANGLE
+
+ (add new table 6.10, Textures (state per texture image), renumber subsequent tables)
+
+ Initial
+ Get Value Type Get Command Value Description Sec.
+ ---------------------- ---- ------------------- ------ --------------------------- ------
+ TEXTURE_SAMPLES_ANGLE Z+ GetTexLevelParameterANGLE 0 Number of samples per texel 3.8.5
+ TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE B GetTexLevelParameterANGLE TRUE Whether the image uses a 3.8.5
+ fixed sample pattern
+
+ TEXTURE_WIDTH Z+ GetTexLevelParameterANGLE 0 Specified width 3.8
+ TEXTURE_HEIGHT Z+ GetTexLevelParameterANGLE 0 Specified height (2D/3D) 3.8
+ TEXTURE_DEPTH Z+ GetTexLevelParameterANGLE 0 Specified depth (3D) 3.8
+ TEXTURE_INTERNAL_FORMAT E GetTexLevelParameterANGLE RGBA Internal format 3.8
+ or R8 (see section 3.8.14)
+ TEXTURE_x_SIZE 6xZ+ GetTexLevelParameterANGLE 0 Component resolution (x is 3.8
+ RED, GREEN, BLUE, ALPHA,
+ DEPTH, or STENCIL)
+ TEXTURE_SHARED_SIZE Z+ GetTexLevelParameterANGLE 0 Shared exponent field 3.8
+ resolution
+ TEXTURE_x_TYPE E GetTexLevelParameterANGLE NONE Component type (x is RED, 6.1.4
+ GREEN, BLUE, ALPHA, or
+ DEPTH)
+ TEXTURE_COMPRESSED B GetTexLevelParameterANGLE FALSE True if image has a 3.8.6
+ compressed internal format
+
+ (add to table 6.35, Framebuffer dependent Values, p. 280)
+
+ Initial
+ Get Value Type Get Command Value Description Sec.
+ ------------------ ---------- ------------------ -------------- --------------- ------
+ SAMPLE_POSITION_ANGLE N*2*R[0,1] GetMultisamplefvANGLE implementation Explicit sample 3.3.1
+ dependent positions
+
+ Where N is the number of samples (the value of SAMPLES) the framebuffer supports.
+
+New Implementation Dependent State
+
+ Minimum
+ Get Value Type Get Command Value Description Sec.
+ --------- ------- ----------- ------- ------------------------ ------
+ MAX_SAMPLE_MASK_WORDS_ANGLE Z+ GetIntegerv 1 maximum number of sample 4.1.3
+ mask words
+ MAX_COLOR_TEXTURE_SAMPLES_ANGLE Z+ GetIntegerv 1 maximum number of samples 4.1.3
+ in a color multisample
+ texture
+ MAX_DEPTH_TEXTURE_SAMPLES_ANGLE Z+ GetIntegerv 1 maximum number of samples 4.1.3
+ in a depth/stencil
+ multisample texture
+ MAX_INTEGER_SAMPLES_ANGLE Z+ GetIntegerv 1 Maximum number of samples 4.4.2
+ in integer format
+ multisample buffers
+
+Modifications to the OpenGL ES Shading Language Specification, Version 3.00,
+Document Revision 6
+
+ Including the following line in a shader can be used to control the
+ language featured described in this extension:
+
+ #extension GL_ANGLE_texture_multisample : <behavior>
+
+ where <behavior> is as specified in section 3.5.
+
+ A new preprocessor #define is added to the OpenGL ES Shading Language:
+
+ #define GL_ANGLE_texture_multisample 1
+
+ Add to section 3.8 "Keywords":
+
+ The following new sampler types are added:
+
+ sampler2DMS, isampler2DMS, usampler2DMS,
+
+ Add to section 4.1 "Basic Types":
+
+ Add the following sampler type to the "Floating Point Sampler
+ Types (opaque)" table:
+
+ sampler2DMS handle for accessing a 2D multisample texture
+
+ Add the following sampler type to the "Unsigned Integer Sampler
+ Types (opaque)" table:
+
+ usampler2DMS handle for accessing an unsigned integer 2D
+ multisample texture
+
+ Add the following sampler type to the "Integer Sampler Types" table:
+
+ isampler2DMS handle for accessing an integer 2D
+ multisample texture
+
+ Add to section 8.8 "Texture Lookup Functions":
+
+ Add new functions to the set of allowed texture lookup functions:
+
+ Syntax:
+
+ gvec4 texelFetch(gsampler2DMS sampler, ivec2 P, int sample)
+
+ Description:
+
+ Use integer texture coordinate <P> to lookup a single sample
+ <sample> on the texture bound to <sampler> as described in section
+ 2.12.9.3 of the OpenGL ES specification "Multisample Texel Fetches".
+
+ Syntax:
+
+ ivec2 textureSize(gsampler2DMS sampler)
+
+ Description:
+
+ Returns the dimensions, width and height of level 0 for the
+ texture bound to <sampler>, as described in section 2.12.9.4 of
+ the OpenGL ES specification section "Texture Size Query".
+
+Examples
+
+Issues
+ None
+
+Revision History
+
+ Rev. Date Author Changes
+ ---- -------- ---------- --------------------------------------------
+ 1 08/27/18 Yunchao He First revision. Adapted from OpenGL ES
+ specification 3.1, OpenGLSL ES specification
+ 3.10 at document revision 4, and
+ ARB_texture_multisample at revision 12.