diff options
author | Yunchao He <yunchao.he@intel.com> | 2018-01-10 21:28:00 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2018-08-31 17:15:44 +0000 |
commit | 97dbf436117f592048bf899d8d0aa735e87378a8 (patch) | |
tree | 8fc30b9716911ad9f0330b76c99f4f2daff18310 /extensions | |
parent | 3a181e3e53bee44614b832dc6a711b9d78b94ca2 (diff) | |
download | angle-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.txt | 764 |
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. |