| Name |
| |
| ARB_texture_multisample |
| |
| Name Strings |
| |
| ARB_texture_multisample |
| |
| Contact |
| |
| Jeff Bolz, NVIDIA Corporation (jbolz 'at' nvidia.com) |
| |
| Notice |
| |
| Copyright (c) 2009-2014 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Status |
| |
| Complete. Approved by the ARB on July 3, 2009. |
| |
| Version |
| |
| Last Modified Date: February 28, 2014 |
| Revision: 12 |
| |
| Number |
| |
| ARB Extension #67 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL 3.1 specification. |
| |
| Overview |
| |
| This extension provides support for two new types of "multisample |
| textures" - two-dimensional and two-dimensional array - as well as |
| mechanisms to fetch a specific sample from such a texture in a shader, |
| and to attach such textures to FBOs for rendering. |
| |
| This extension also includes the following functionality, first described |
| in NV_explicit_multisample: |
| |
| * A query in the 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 |
| |
| New Procedures and Functions |
| |
| void TexImage2DMultisample(enum target, sizei samples, enum internalformat, |
| sizei width, sizei height, |
| boolean fixedsamplelocations); |
| |
| void TexImage3DMultisample(enum target, sizei samples, enum internalformat, |
| sizei width, sizei height, sizei depth, |
| boolean fixedsamplelocations); |
| |
| void GetMultisamplefv(enum pname, uint index, float *val); |
| |
| void SampleMaski(uint index, bitfield mask); |
| |
| New Tokens |
| |
| Accepted by the <pname> parameter of GetMultisamplefv: |
| |
| SAMPLE_POSITION 0x8E50 |
| |
| Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and by |
| the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and |
| GetDoublev: |
| |
| SAMPLE_MASK 0x8E51 |
| |
| Accepted by the <target> parameter of GetBooleani_v and |
| GetIntegeri_v: |
| |
| SAMPLE_MASK_VALUE 0x8E52 |
| |
| Accepted by the <target> parameter of BindTexture and |
| TexImage2DMultisample: |
| |
| TEXTURE_2D_MULTISAMPLE 0x9100 |
| |
| Accepted by the <target> parameter of TexImage2DMultisample: |
| |
| PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 |
| |
| Accepted by the <target> parameter of BindTexture and |
| TexImage3DMultisample: |
| |
| TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 |
| |
| Accepted by the <target> parameter of TexImage3DMultisample: |
| |
| PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 |
| |
| Accepted by the <pname> parameter of GetBooleanv, GetDoublev, GetIntegerv, |
| and GetFloatv: |
| |
| MAX_SAMPLE_MASK_WORDS 0x8E59 |
| MAX_COLOR_TEXTURE_SAMPLES 0x910E |
| MAX_DEPTH_TEXTURE_SAMPLES 0x910F |
| MAX_INTEGER_SAMPLES 0x9110 |
| TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 |
| TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 |
| |
| Accepted by the <pname> parameter of GetTexLevelParameter |
| |
| TEXTURE_SAMPLES 0x9106 |
| TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 |
| |
| Returned by the <type> parameter of GetActiveUniform: |
| |
| SAMPLER_2D_MULTISAMPLE 0x9108 |
| INT_SAMPLER_2D_MULTISAMPLE 0x9109 |
| UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A |
| SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B |
| INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C |
| UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D |
| |
| Additions to Chapter 2 of the OpenGL 3.1 Specification (OpenGL Operation) |
| |
| Add to table 2.9 "OpenGL Shading Language type tokens" page 56: |
| |
| Type Name Token Keyword |
| ----------------------------------------- ------------ |
| SAMPLER_2D_MULTISAMPLE sampler2DMS |
| SAMPLER_2D_MULTISAMPLE_ARRAY sampler2DMSArray |
| INT_SAMPLER_2D_MULTISAMPLE_ARRAY isampler2DMSArray |
| UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE usampler2DMS |
| UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY usampler2DMSArray |
| |
| Add to section 2.11.7, after subsection "Texel Fetches" |
| |
| Multisample Texel Fetches |
| |
| Multisample texel fetches are similar to standard texel fetches. |
| Since multisample buffers can't have mipmaps, there is no LOD |
| parameter. Instead, there is an integer parameter which 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 GetMultisamplefv. Multisample textures support only |
| NEAREST filtering. |
| |
| Additionally, this fetch 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 3.1 Specification (Rasterization) |
| |
| (Insert into section 3.3.1, Multisampling after the discussion of |
| the query for SAMPLES) |
| |
| The location of a given sample is queried with the command |
| |
| void GetMultisamplefv(enum pname, uint index, float *val); |
| |
| <pname> must be SAMPLE_POSITION and <index> corresponds to the |
| sample for which the location should be returned. The sample |
| location is returned as two floating point values in <val[0]> and |
| <val[1]>, each between 0 and 1, corresponding to the <x> and <y> |
| locations respectively in GL pixel space of that sample. (0.5, 0.5) |
| thus corresponds to the pixel center. An INVALID_ENUM error is |
| generated if <pname> is not SAMPLE_POSITION. An INVALID_VALUE error |
| is generated if <index> is greater than or equal to the value of |
| SAMPLES. If the multisample mode does not have fixed sample |
| locations, the returned values may only reflect the locations of |
| samples within some pixels. |
| |
| Modify Section 3.8.1, Texture Image Specification (p. 143) |
| |
| Add the two new targets to MAX_TEXTURE_SIZE description: |
| |
| In a similar fashion, the maximum allowable width of a texel array |
| for a one or two-dimensional, one- or two-dimensional array, |
| two-dimensional multisample, or two-dimensional multisample array |
| texture, and the maximum allowable height of a two-dimensional, |
| two-dimensional array, two- dimensional multisample, or |
| two-dimensional multisample array texture, must be at least |
| 2^(k-lod)+2*b_t for image arrays of level 0 through k, where k is |
| the log base 2 of MAX_TEXTURE_SIZE. |
| |
| (Insert new Section 3.8.4, Multisample Textures. Renumber subsequent |
| sections.) |
| |
| In addition to the texture types described in previous sections, two |
| additional types of textures are supported. A multisample texture is |
| similar to a two-dimensional or two-dimensional array texture, |
| except it contains multiple samples per texel. Multisample textures |
| do not have multiple image levels. |
| |
| The commands |
| |
| void TexImage2DMultisample(enum target, sizei samples, |
| enum internalformat, |
| sizei width, sizei height, |
| boolean fixedsamplelocations); |
| |
| void TexImage3DMultisample(enum target, sizei samples, |
| enum internalformat, |
| sizei width, sizei height, sizei depth, |
| boolean fixedsamplelocations); |
| |
| establish the data storage, format, dimensions, and number of |
| samples of a multisample texture's image. For TexImage2DMultisample, |
| <target> must be TEXTURE_2D_MULTISAMPLE or |
| PROXY_TEXTURE_2D_MULTISAMPLE and for TexImage3DMultisample <target> |
| must be TEXTURE_2D_MULTISAMPLE_ARRAY or |
| PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY. <width> and <height> are the |
| dimensions in texels of the texture. |
| |
| <internalformat> must be color-renderable, depth-renderable, or |
| stencil- renderable (as defined in section 4.4.4). The error |
| INVALID_OPERATION may be generated if any of the following are true: |
| |
| * <internalformat> is a depth/stencil-renderable format and |
| <samples> is greater than the value of MAX_DEPTH_TEXTURE_SAMPLES |
| * <internalformat> is a color-renderable format and <samples> is |
| greater than the value of MAX_COLOR_TEXTURE_SAMPLES |
| * <internalformat> is a signed or unsigned integer format and |
| <samples> is greater than the value of MAX_INTEGER_SAMPLES. |
| |
| 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 |
| internalformat or size of the image. |
| |
| An INVALID_VALUE error is generated by TexImage2DMultisample if <width> |
| or <height> is greater than the value of MAX_TEXTURE_SIZE. An |
| INVALID_VALUE error is generated by TexImage3DMultisample if <width>, |
| <height>, or <depth> is greater than the value of MAX_3DTEXTURE_SIZE; An |
| INVALID_VALUE error is generated if <samples> is greater than the value |
| of MAX_SAMPLES. An OUT_OF_MEMORY error is generated if the GL is unable |
| to create a texture level of the requested size. |
| |
| 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.1 describing which sample within the texel to fetch. No standard |
| sampling instructions are allowed on the multisample texture |
| targets. |
| |
| Modify Section 3.8.11, Texture Completeness (p. 154) |
| |
| (insert after first paragraph of section, p. 154) |
| |
| For multisample textures, a texture is complete if each dimension of |
| the texture's level is positive. |
| |
| Modify Section 3.8.12, Texture State and Proxy State (p. 155) |
| |
| (insert into the first paragraph of the section, p. 155) |
| |
| ... the compressed flag set to FALSE, and a zero compressed size). |
| Multisample textures contain an integer identifying the number of |
| samples in each texel. The buffer texture target has associated an |
| integer containing ... |
| |
| (add a new paragraph after the paragraph starting with "Proxy Arrays...") |
| |
| Proxy array for two-dimensional multisample and two-dimensional |
| multisample array textures are operated on in the same way when |
| TexImage2DMultisample is called with <target> specified as |
| PROXY_TEXTURE_2D_MULTISAMPLE, or TexImage3DMultisample is called |
| with <target> specified as PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY. |
| |
| Modify Section 3.8.13, Texture Objects (p. 157) |
| |
| (modify first paragraphs of section, p. 157, simply adding |
| references to multisample textures) |
| |
| In addition to the default textures TEXTURE_1D, TEXTURE_2D, |
| TEXTURE_3D, TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE, |
| TEXTURE_BUFFER, TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE, and |
| TEXTURE_2D_MULTISAMPLE_ARRAY, named one-, two-, and |
| three-dimensional, one- and two-dimensional array, rectangular, |
| buffer, cube map, two-dimensional multisample, and two- dimensional |
| multisample array texture objects can be created and operated upon. |
| The name space for texture objects is the unsigned integers, with |
| zero reserved by the GL. |
| |
| ... |
| |
| In the initial state, TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, |
| TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE, |
| TEXTURE_BUFFER, TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE, and |
| TEXTURE_2D_MULTISAMPLE_ARRAY have one-, two-, and three-dimensional, |
| one- and two-dimensional array, rectangular, buffer, cube map, |
| two-dimensional multisample, and two-dimensional multisample array |
| texture state vectors respectively associated with them. In order |
| that access to these initial textures not be lost, they are treated |
| as texture objects all of whose names are 0. The initial one-, two-, |
| three- dimensional, one- and two-dimensional array, rectangular, |
| buffer, cube map, two-dimensional multisample, and two-dimensional |
| multisample array texture is therefore operated upon, queried, and |
| applied as TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY, |
| TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE, TEXTURE_BUFFER, |
| TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE, and |
| TEXTURE_2D_MULTISAMPLE_ARRAY respectively while 0 is bound to the |
| corresponding targets. |
| |
| (modify second paragraph, p. 158) |
| |
| The texture object name space, including the initial one-, two-, and |
| three-dimensional, one- and two-dimensional array, rectangular, |
| buffer, cube map, two-dimensional multisample, and two-dimensional |
| multisample array 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. |
| |
| Additions to Chapter 4 of the OpenGL 3.1 Specification (Per-Fragment |
| Operations and the Frame Buffer) |
| |
| Modify Section 4.1.3, Multisample Fragment Operations |
| |
| Modify the first paragraph to include SAMPLE_MASK and |
| SAMPLE_MASK_VALUE on the list of values the coverage value is |
| modified based on. |
| |
| Modify the discussion of SAMPLE_COVERAGE to start with "Next" instead of |
| "Finally" |
| |
| Add after the discussion of SAMPLE_COVERAGE: |
| |
| Finally, if SAMPLE_MASK is enabled, the fragment coverage is ANDed |
| with the coverage value SAMPLE_MASK_VALUE. The value of |
| SAMPLE_MASK_VALUE is specified using |
| |
| void SampleMaski(GLuint index, GLbitfield mask); |
| |
| with <mask> set to the desired mask for <maskNumber>. |
| SAMPLE_MASK_VALUE is queried by calling GetIntegeri_v with <pname> |
| set to SAMPLE_MASK_VALUE and the index set to <maskNumber>. Bit B of |
| mask M corresponds to sample 32*M+B as described in Section 3.3.1. |
| The error INVALID_VALUE is generated if the mask word indexed is |
| greater than or equal to MAX_SAMPLE_MASK_WORDS. |
| |
| Modify Section 4.4.2, Attaching Images to Framebuffer Objects, p. 203 |
| |
| (the first paragraph of RenderbufferStorageMultisample p. 205) |
| |
| ... If either <width> or <height> is greater than the value of |
| MAX_RENDERBUFFER_SIZE, or if <samples> is greater than the value of |
| MAX_SAMPLES, then the error INVALID_VALUE is generated. If |
| <internalformat> is a signed or unsigned integer format and |
| <samples> is greater than the value of MAX_INTEGER_SAMPLES, then the |
| error INVALID_OPERATION is generated. (see ``Required Renderbuffer |
| Formats'' below). ... |
| |
| (The second paragraph of "Required Renderbuffer Formats" p. 206): |
| |
| 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 multisamples, which must be at least |
| one. |
| |
| Modify the description of FrameBufferTextureARB in |
| ARB_geometry_shader4, to allow multisample array textures with |
| FramebufferTextureARB: |
| |
| If <texture> is the name of a three-dimensional texture, cube map |
| texture, one- or two-dimensional array texture, or two-dimensional |
| multisample array texture, the texture level attached to the |
| framebuffer attachment point is an array of images, and the |
| framebuffer attachment is considered layered. |
| |
| (At the end of p. 208, describing FrameBufferTexture*D) |
| |
| If <textarget> is TEXTURE_RECTANGLE, TEXTURE_2D_MULTISAMPLE, or |
| TEXTURE_2D_MULTISAMPLE_ARRAY, then <level> must be zero. |
| |
| ... |
| |
| For FramebufferTexture2D, if <texture> is not zero, then <textarget> |
| must be one of of TEXTURE_2D, TEXTURE_RECTANGLE, |
| TEXTURE_CUBE_MAP_POSITIVE_X, TEXTURE_CUBE_MAP_POSITIVE_Y, |
| TEXTURE_CUBE_MAP_POSITIVE_Z, TEXTURE_CUBE_MAP_NEGATIVE_X, |
| TEXTURE_CUBE_MAP_NEGATIVE_Y, TEXTURE_CUBE_MAP_NEGATIVE_Z, or |
| TEXTURE_2D_MULTISAMPLE. |
| |
| ... |
| |
| The command |
| |
| void FramebufferTextureLayer(enum target, enum attachment, |
| uint texture, int level, int layer); |
| |
| operates identically to FramebufferTexture3D, except that it |
| attaches a single layer of a three-dimensional, one- or |
| two-dimensional array, or two-dimensional multisample array texture |
| layer is an integer indicating the layer sample number, and is |
| treated identically to the layer parameter in FramebufferTexture3D. |
| The error INVALID_VALUE is generated if texture is non-zero and |
| layer is negative. The error INVALID_OPERATION is generated if |
| texture is non-zero and is not the name of a three dimensional, two- |
| dimensional multisample array, or one-or two-dimensional array |
| texture. Unlike FramebufferTexture3D, no textarget parameter is |
| accepted. ... |
| |
| |
| Modify Section 4.4.4, Framebuffer Completeness, p. 212 |
| |
| (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 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. |
| |
| { FRAMEBUFFER_INCOMPLETE_MULTISAMPLE } |
| |
| - The value of TEXTURE_FIXED_SAMPLE_LOCATIONS is the same for all |
| attached textures; if the attached images are a mix of |
| renderbuffers and textures, the value of |
| TEXTURE_FIXED_SAMPLE_LOCATIONS must be TRUE for all attached |
| textures. |
| |
| { FRAMEBUFFER_INCOMPLETE_MULTISAMPLE } |
| |
| Additions to Chapter 6 of the OpenGL 3.1 Specification (State and |
| State Requests) |
| |
| Edit Section 6.1.3, p. 223 (Enumerated Queries) |
| |
| Add TEXTURE_2D_MULTISAMPLE, PROXY_TEXTURE_2D_MULTISAMPLE, |
| TEXTURE_2D_MULTISAMPLE_ARRAY, and PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY |
| to the list of valid targets for GetTexLevelParameter{if}v. |
| |
| Additions to the AGL/GLX/WGL Specifications |
| |
| None |
| |
| GLX Protocol |
| |
| TBD |
| |
| Errors |
| |
| The error INVALID_VALUE is generated by GetBooleani_v and |
| GetIntegeri_v if <target> is SAMPLE_MASK_VALUE and <index> is greater |
| than or equal to MAX_SAMPLE_MASK_WORDS. |
| |
| The error INVALID_VALUE is generated by SampleMaski if <index> is |
| greater than or equal to MAX_SAMPLE_MASK_WORDS. |
| |
| The error INVALID_ENUM is generated by GetMultisamplefv if <pname> |
| is not SAMPLE_POSITION. |
| |
| The error INVALID_VALUE is generated by GetMultisamplefv if <index> is |
| greater than or equal to the value of SAMPLES. |
| |
| The error INVALID_OPERATION is generated by TexImage2DMultisample |
| and TexImage3DMultisample if the number of samples exceeds the |
| implementation dependent maximum for the given internal format. |
| |
| The error INVALID_VALUE is generated by TexImage2DMultisample |
| TexImage3DMultisample if either <width> or <height> is greater than the |
| value of MAX_TEXTURE_SIZE, or if <samples> is greater than the value of |
| MAX_SAMPLES. |
| |
| The error INVALID_VALUE is generated by TexImage3DMultisample if |
| <width>, <height>, or <depth> is greater than the value of |
| MAX_3D_TEXTURE_SIZE, or if <samples> is greater than the value of |
| MAX_SAMPLES. |
| |
| The error OUT_OF_MEMORY is generated by TexImage2DMultisample and |
| TexImage3DMultisample if the GL is unable to create a texture level |
| of the requested size. |
| |
| The error INVALID_OPERATION is generated by |
| RenderbufferStorageMultisample if <internalformat> is a signed or |
| unsigned integer format and <samples> is greater than the value of |
| MAX_INTEGER_SAMPLES. |
| |
| New State |
| |
| Get Value Get Command Type Initial Value |
| --------- ----------- ---- ------------- |
| SAMPLE_MASK IsEnabled B FALSE |
| SAMPLE_MASK_VALUE GetIntegeri_v nxZ+ ~0 |
| |
| Where n is the number of sample mask words (the value of |
| MAX_SAMPLE_MASK_WORDS) the implementation supports. |
| |
| (add to table 6.12, Texture State Per Texture Unit/Binding Point p. 250) |
| |
| Initial |
| Get Value Type Get Command Value Description Sec. |
| ------------------------------------ ---- ----------- ------- --------------------------- ------ |
| TEXTURE_BINDING_2D_MULTISAMPLE 32*xZ+ GetIntegerv 0 Texture object bound to 3.8.13 |
| TEXTURE_2D_MULTISAMPLE |
| TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 32*xZ+ GetIntegerv 0 Texture object bound to 3.8.13 |
| TEXTURE_2D_MULTISAMPLE_ARRAY |
| |
| (add to table 6.14, Textures (state per texture image p. 252) |
| |
| Initial |
| Get Value Type Get Command Value Description Sec. |
| ---------------------- ---- ------------------- ------- --------------------------- ------ |
| TEXTURE_SAMPLES Z+ GetTexLevelParameter 0 Number of samples per texel 3.8.4 |
| TEXTURE_FIXED_SAMPLE_LOCATIONS B GetTexLevelParameter TRUE Whether the image uses a 3.8.4 |
| fixed sample pattern |
| |
| (add to table 6.41, Framebuffer dependent Values, p. 279) |
| |
| Initial |
| Get Value Type Get Command Value Description Sec. |
| ------------------ ---------- ------------------ -------------- --------------- ------ |
| SAMPLE_POSITION N*2*R[0,1] GetMultisamplefv implementation Explicit sample 3.2.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 Z+ GetIntegerv 1 maximum number of sample 4.1.3 |
| mask words |
| MAX_COLOR_TEXTURE_SAMPLES Z+ GetIntegerv 1 maximum number of samples 4.1.3 |
| in a color multisample |
| texture |
| MAX_DEPTH_TEXTURE_SAMPLES Z+ GetIntegerv 1 maximum number of samples 4.1.3 |
| in a depth/stencil |
| multisample texture |
| MAX_INTEGER_SAMPLES Z+ GetIntegerv 1 Maximum number of samples 4.4.2 |
| in integer format |
| multisample buffers |
| |
| Modifications to the OpenGL Shading Language Specification, Version 1.40 |
| |
| Including the following line in a shader can be used to control the |
| language featured described in this extension: |
| |
| #extension GL_ARB_texture_multisample : <behavior> |
| |
| where <behavior> is as specified in section 3.3. |
| |
| A new preprocessor #define is added to the OpenGL Shading Language: |
| |
| #define GL_ARB_texture_multisample 1 |
| |
| Add to section 3.6 "Keywords" |
| |
| The following new sampler types are added: |
| |
| sampler2DMS, isampler2DMS, usampler2DMS, |
| sampler2DMSArray, isampler2DMSArray, usampler2DMSArray |
| |
| Add to section 4.1 "Basic Types" |
| |
| Add the following sampler type to the "Floating Point Sampler Types" |
| table: |
| |
| sampler2DMS handle for accessing a 2D multisample texture |
| sampler2DMSArray handle for accessing a 2D multisample array texture |
| |
| Add the following sampler type to the "Unsigned Integer Sampler |
| Types" table: |
| |
| usampler2DMS handle for accessing an unsigned integer 2D multisample texture |
| usampler2DMSArray handle for accessing an unsigned integer 2D multisample array texture |
| |
| Add the following sampler type to the "Integer Sampler Types" table: |
| |
| isampler2DMS handle for accessing an integer 2D multisample texture |
| isampler2DMSArray handle for accessing an integer 2D multisample array texture |
| |
| Add to section 8.7 "Texture Lookup Functions" |
| |
| Add new functions to the set of allowed texture lookup functions: |
| |
| Syntax: |
| |
| gvec4 texelFetch(gsampler2DMS sampler, ivec2 P, int sample) |
| gvec4 texelFetch(gsampler2DMSArray sampler, ivec3 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.11.7.1 of the OpenGL specification "Multisample Texel Fetches". |
| |
| Syntax: |
| |
| ivec2 textureSize(gsampler2DMS sampler) |
| ivec3 textureSize(gsampler2DMSArray sampler) |
| |
| Description: |
| |
| Returns the dimensions, width and height of level 0 for the |
| texture bound to <sampler>, as described in section 2.11.7.1 of |
| the OpenGL specification section "Texture Size Query". |
| |
| Examples |
| |
| Issues |
| |
| (1) Do we need new "max size" queries for the new targets? |
| |
| RESOLVED: No. The existing MAX_TEXTURE_SIZE applies to 2D multisample |
| textures, and MAX_3D_TEXTURE_SIZE to 3D multisample textures. |
| |
| (2) What commands may be used on multisample textures? |
| |
| RESOLVED: Multisample textures can be bound for rendering and texturing, |
| but they cannot be loaded/read with SubImage commands (TexSubImage, |
| CopyTexSubImage, GetTexImage), they don't support compressed formats, |
| and they don't need TexParameters since they can only be fetched with |
| texelFetchMultisample. |
| |
| (3) Should the new TexImage commands take an "int level" argument? |
| |
| RESOLVED: No. We can add new commands if/when we ever add mipmapped |
| multisample textures. |
| |
| (4) GetMultisamplefv takes an index to support >32 samples, but |
| NV_gpu_shader4_1's gl_SampleMask is only 32 bits. What gives? |
| |
| RESOLVED: This is gpu_shader4_1's problem, not ARB_texture_multisample's |
| problem. |
| |
| (5) Should GLSL include a query to return the sample count of a |
| texture, either as part of textureSizeMultisample or |
| stand-alone? |
| |
| RESOLVED: No, there hasn't been a demand for it. |
| |
| (6) How does SAMPLE_POSITION interact with |
| EXT_fragment_coord_conventions? |
| |
| RESOLVED: The SAMPLE_POSITION query is not in any way affected by |
| the shader state added in EXT_fragment_coord_conventions. It is |
| expected that the returned values will not actually be used within |
| the shader, but rather to compute filter weights on the CPU, so |
| whether the fragment coord is inverted or translated by 0.5 doesn't |
| matter. |
| |
| (7) Should we use "TexImage3DMultisample" to make things look like |
| regular 2D arrays, or just have TexImage2DArrayMultisample? |
| |
| RESOLVED: Leave it as is. |
| |
| (8) How should we deal with varying sample locations? |
| |
| RESOLVED: Allow the application to explicitly request fixed sample |
| locations for when a texture will be used to do custom downsamples. |
| When this is requested, the values returned by GetMultisamplefv will |
| be valid for all texels in the image and can be used to construct |
| elaborate filter kernels that can safely be used across the entire |
| image. |
| |
| (9) Are depth multisample textures supported? |
| |
| RESOLVED: Some implementations may not support texturing from a |
| multisample depth/stencil texture. In that case, they would export |
| MAX_DEPTH_TEXTURE_SAMPLES = 1. |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- -------- -------- ----------------------------------------------- |
| 12 2/28/14 Jon Leech Add missing error for invalid <pname> to |
| GetMultisamplefv, and change texture size |
| limits for TexImage3DMultisample to the value |
| of MAX_3D_TEXTURE_SIZE (Bugs 11134, 11135). |
| 11 9/23/13 Jon Leech Change type of <internalformat> argument to |
| enum (Bug 10496). |
| 10 8/02/09 Jon Leech Reformat to 80 columns and assign ARB |
| extension number. |
| 9 7/23/09 groth Update return of textureSize(gsampler2DMSarray) |
| 8 7/20/09 Jon Leech Assign enum values. |
| 7 6/26/09 groth Update some language to correspond to gl3.2 |
| 6 6/11/09 groth Add new max queries to token section |
| 5 5/28/09 groth Add MAX_INTEGER_SAMPLES query. |
| 4 5/22/09 jbolz Add max sample queries. |
| 3 5/14/09 jbolz Add allowance for not supporting multisample |
| depth textures. |
| 2 5/08/09 jbolz Add allowance for varying sample locations, |
| and a mechanism to request fixed locations. |
| Resolve some issues. |
| 1 4/30/09 jbolz First revision. |
| |