blob: 246a5bbf2ed965531e71f394c4833fbbacfddebd [file] [log] [blame]
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.