blob: 02e37d5bf4bce99ea54358a7a545375364013057 [file] [log] [blame]
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
Specification Update Policy
Khronos-approved extension specifications are updated in response to
issues and bugs prioritized by the Khronos OpenGL Working Group. For
extensions which have been promoted to a core Specification, fixes will
first appear in the latest version of that core Specification, and will
eventually be backported to the extension document. This policy is
described in more detail at
https://www.khronos.org/registry/OpenGL/docs/update_policy.php
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 <target> 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). <target> 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). <target>
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 <texture> parameter rather than being retrieved from the binding of the
active texture unit specified by <target>. <name> must be a name previously
reserved by a call to GenTextures and not subsequently deleted. If
<texture> 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 <target> parameter to of
GetTexParameter* as follows:
<target> 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 <samples> is greater than the maximum number
of samples supported for the specified <target> and <internalformat>
combination.
INVALID_OPERATION is generated by TexStorage2DMultisample or
TexStorage3DMultisample if the value of TEXTURE_IMMUTABLE_FORMAT for the
texture currently bound to <target> on the active texture unit is TRUE.
INVALID_OPERATION is generated by TextureStorage2DMultisampleEXT and
TextureStorage3DMultisampleEXT if <target> does not match the target
of the texture object named by the <texture> parameter.
INVALID_VALUE is generated by TexStorage2DMultisample and
TexStorage3DMultisample if <width> or <height> is greater than the value
of MAX_TEXTURE_SIZE.
INVALID_VALUE is generated by TexStorage3DMultisample if <depth> is
greater than the value of MAX_ARRAY_TEXTURE_LAYERS.
INVALID_OPERATION is generated by TexParameter* if <target> is
TEXTURE_RECTANGLE, <pname> is TEXTURE_BASE_LEVEL, and <value> is not
zero.
INVALID_OPERATION is generated by TexParameter* if <target> is either
TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY, <pname> is
TEXTURE_BASE_LEVEL, and <value> is not zero.
INVALID_ENUM is generated by TexStorage2DMultisample if <target> is not
TEXTURE_2D_MULTISAMPLE or PROXY_TEXTURE_2D_MULTISAMPLE.
INVALID_ENUM is generated by TexStorage3DMultisample if <target> is not
TEXTURE_2D_MULTISAMPLE_ARRAY or PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY.
INVALID_OPERATION is generated by TexParameter* if <target> is either
TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY and <pname>
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
<depth> parameter exceeds the allowed limits? Which limit to use?
DISCUSSION: We do generate errors if <width> or <height> 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 <target> parameter.
On the other hand, TexImage3DMultisample does not generate
any errors based on the value of the <depth> parameter.
RESOLVED: Match the behavior of TexImage3DMultisample.
Revision History
Rev. Date Author Changes
---- ---------- -------- ------------------------------------------------
9 04/21/2015 Jon Leech Change texture size limits for <depth> 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 <fixedsamplelocations>.
3 05/14/2012 pbrown Fix typos in <internalformat> parameter names;
change the <internalformat> and
<fixedsamplelocations> 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 <depth>.
1 04/19/2012 gsellers Initial draft