Name ARB_texture_storage_multisample Name Strings GL_ARB_texture_storage_multisample Contact Graham Sellers (graham.sellers 'at' amd.com) Notice Copyright (c) 2012-2014 The Khronos Group Inc. Copyright terms at http://www.khronos.org/registry/speccopyright.html Status Complete. Approved by the ARB on 2012/06/12. Version Last Modified Date: April 21, 2015 Version: 9 Number ARB Extension #141 Dependencies OpenGL 4.2 or ARB_texture_storage is required. EXT_direct_state_access affects the definition of this extension. This extension is written against the OpenGL 4.2 (Core) Specification. Overview The ARB_texture_storage extension and OpenGL 4.2 introduced the concept of immutable texture objects. With these objects, once their data store has been sized and allocated, it could not be resized for the lifetime of the objects (although its content could be updated). OpenGL implementations may be able to take advantage of the knowledge that the underlying data store of certain objects cannot be deleted or otherwise reallocated without destruction of the whole object (normally, a much heavier weight and less frequent operation). Immutable storage for all types of textures besides multisample and buffer textures was introduced by ARB_texture_storage. For completeness, this extension introduces immutable storage for multisampled textures. IP Status No known IP claims. New Procedures and Functions void TexStorage2DMultisample(enum target, sizei samples, enum internalformat, sizei width, sizei height, boolean fixedsamplelocations); void TexStorage3DMultisample(enum target, sizei samples, enum internalformat, sizei width, sizei height, sizei depth, boolean fixedsamplelocations); (the following two functions are provided if and only if EXT_direct_state_access is supported) void TextureStorage2DMultisampleEXT(uint texture, enum target, sizei samples, enum internalformat, sizei width, sizei height, boolean fixedsamplelocations); void TextureStorage3DMultisampleEXT(uint texture, enum target, sizei samples, enum internalformat, sizei width, sizei height, sizei depth, boolean fixedsamplelocations); New Tokens None. Additions to Chapter 2 of the OpenGL 4.2 (Core Profile) Specification (OpenGL Operation) None. Additions to Chapter 3 of the OpenGL 4.2 (Core Profile) Specification (Rasterization) Modifications to Section 3.9.8, "Texture Parameters": Add TEXTURE_2D_MULTISAMPLE and TEXTURE_2D_MULTISAMPLE_ARRAY to the texture targets accepted by TexParameter*. At the end of Section 3.9.8, modify the last sentence to be: An INVALID_OPERATION error is generated if TEXTURE_BASE_LEVEL is set to any value other than zero. Add the following paragraph to the end of Section 3.9.8: When is TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY, certain texture parameters may not be specified. In this case, an INVALID_OPERATION error is generated if the parameter is any sampler state value from table 6.18. An INVALID_OPERATION error is generated if TEXTURE_BASE_LEVEL is set to any value other than zero. In Subsection 3.9.16, "Immutable-Format Texture Images", add the following, after the discussion of TexStorage3D on p. 260: void TexStorage2DMultisample(enum target, sizei samples, enum internalformat, sizei width, sizei height, boolean fixedsamplelocations); specifies a two-dimensional multisample texture (or proxy). must be TEXTURE_2D_MULTISAMPLE or PROXY_TEXTURE_2D_MULTISAMPLE. The pseudo-code is equivalent to calling TexImage2DMultisample with the equivalently named parameters set to the same values. void TexStorage3DMultisample(enum target, sizei samples, enum internalformat, sizei width, sizei height, sizei depth, boolean fixedsamplelocations); specifies a two-dimensional multisample array texture (or proxy). must be TEXTURE_2D_MULTISAMPLE_ARRAY or PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY. The pseudo-code is equivalent to calling TexImage3DMultisample with the equivalently named parameters set to the same values. The functions void TextureStorage2DMultisampleEXT(uint texture, enum target, sizei samples, enum internalformat, sizei width, sizei height, boolean fixedsamplelocations); and void TextureStorage3DMultisampleEXT(uint texture, enum target, sizei samples, enum internalformat, sizei width, sizei height, sizei depth, boolean fixedsamplelocations); behave similarly to TexStorage2DMultisample and TexStorage3DMultisample, respectively, except that the texture whose storage to allocate is given by the parameter rather than being retrieved from the binding of the active texture unit specified by . must be a name previously reserved by a call to GenTextures and not subsequently deleted. If is not the name of an existing texture object, then one is created with that name. Additions to Chapter 4 of the OpenGL 4.2 (Core Profile) Specification (Per-Fragment Operations and the Frame Buffer) None. Additions to Chapter 5 of the OpenGL 4.2 (Core Profile) Specification (Special Functions) None. Additions to Chapter 6 of the OpenGL 4.2 (Core Profile) Specification (State and State Requests) Modifications to Section 6.1.3, "Enumerated Queries" Modify the paragraph describing the parameter to of GetTexParameter* as follows: may be one of TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE, TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY, TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY, indicating the currently bound one-, two-, three-dimensional, one- or two-dimensional array, rectangular, cube map, cube map array, two-dimensional multisample, or two-dimensional multisample array texture object, respectively. Errors INVALID_OPERATION is generated by TexStorage2DMultisample and TexStorage3DMultisample if is greater than the maximum number of samples supported for the specified and combination. INVALID_OPERATION is generated by TexStorage2DMultisample or TexStorage3DMultisample if the value of TEXTURE_IMMUTABLE_FORMAT for the texture currently bound to on the active texture unit is TRUE. INVALID_OPERATION is generated by TextureStorage2DMultisampleEXT and TextureStorage3DMultisampleEXT if does not match the target of the texture object named by the parameter. INVALID_VALUE is generated by TexStorage2DMultisample and TexStorage3DMultisample if or is greater than the value of MAX_TEXTURE_SIZE. INVALID_VALUE is generated by TexStorage3DMultisample if is greater than the value of MAX_ARRAY_TEXTURE_LAYERS. INVALID_OPERATION is generated by TexParameter* if is TEXTURE_RECTANGLE, is TEXTURE_BASE_LEVEL, and is not zero. INVALID_OPERATION is generated by TexParameter* if is either TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY, is TEXTURE_BASE_LEVEL, and is not zero. INVALID_ENUM is generated by TexStorage2DMultisample if is not TEXTURE_2D_MULTISAMPLE or PROXY_TEXTURE_2D_MULTISAMPLE. INVALID_ENUM is generated by TexStorage3DMultisample if is not TEXTURE_2D_MULTISAMPLE_ARRAY or PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY. INVALID_OPERATION is generated by TexParameter* if is either TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY and is sampler state value from table 6.18. New State None. Conformance Tests TBD Dependencies on EXT_direct_state_access If the EXT_direct_state_access extension is not supported, remove all references to TextureStorage2DMultisampleEXT and TextureStorage3DMultisampleEXT. Issues 1) Should TexStorage3DMultisample generate INVALID_VALUE if the parameter exceeds the allowed limits? Which limit to use? DISCUSSION: We do generate errors if or are greater than the value of MAX_TEXTURE_SIZE but it is unclear whether MAX_3D_TEXTURE_SIZE or MAX_ARRAY_TEXTURE_LAYERS should be used. Currently, only MAX_ARRAY_TEXTURE_LAYERS would make sense, but we can also specify the error checking behavior to be based on the parameter. On the other hand, TexImage3DMultisample does not generate any errors based on the value of the parameter. RESOLVED: Match the behavior of TexImage3DMultisample. Revision History Rev. Date Author Changes ---- ---------- -------- ------------------------------------------------ 9 04/21/2015 Jon Leech Change texture size limits for parameter of TexImage3DMultisample to the value of MAX_ARRAY_TEXTURE_LAYERS (Bug 11135). 8 02/28/2014 Jon Leech Change texture size limits for TexImage3DMultisample to the value of MAX_3D_TEXTURE_SIZE (Bugs 11134, 11135). 7 06/28/2012 pdaniell Update the error conditions again based on our agreement in today's ARB meeting. 6 06/27/2012 Jon Leech Clean up new error conditions for 2D MS targets with TexParameter*. 5 06/21/2012 gsellers Allow multisample targets to be used with TexParameter* and GetTexParameter*. 4 05/29/2012 Jon Leech Finish fixing typos with . 3 05/14/2012 pbrown Fix typos in parameter names; change the and parameters to use lower case for consistency with existing APIs. 2 05/02/2012 drakos Added EXT suffix to TextureStorage*Multisample where it was missing. Added issue #1. Removed error condition based on the value of . 1 04/19/2012 gsellers Initial draft