mirror of
https://github.com/godotengine/godot-angle-static.git
synced 2026-01-06 02:09:55 +03:00
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>
This commit is contained in:
764
extensions/ANGLE_texture_multisample.txt
Normal file
764
extensions/ANGLE_texture_multisample.txt
Normal file
@@ -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.
|
||||
Reference in New Issue
Block a user