OES_texture_storage_multisample_2d_array

Name

OES_texture_storage_multisample_2d_array

Name Strings

GL_OES_texture_storage_multisample_2d_array

Contact

Nick Hoath, Imagination Technologies Ltd (nick 'dot' hoath 'at' imgtec
'dot' com)

Contributors

Jeff Bolz, NVIDIA Corporation (jbolz 'at' nvidia.com)
Jon Leech (oddhack 'at' sonic.net)
Graham Sellers (graham.sellers 'at' amd.com)
Dominik Witczak (dominik.witczak 'at' mobica.com)
Tobias Hector (tobias.hector 'at' imgtec.com)

Notice

Copyright (c) 2014-2019 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 ES 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.
Ratified by the Khronos Board of Promoters on 2014/03/14.

Version

Last Modified Date: January 11, 2019
Revision: 8

Number

OpenGL ES Extension #174

Dependencies

This extension is written against the OpenGL ES 3.1 (2015/04/29)
specification.

Overview

This extension provides support for a new type of immutable texture,
two-dimensional multisample array textures. It depends on functionality
introduced in OpenGL ES 3.1 to support two-dimensional multisample
(non-array) textures.

New Procedures and Functions

void TexStorage3DMultisampleOES(enum target,
                                sizei samples,
                                enum internalformat,
                                sizei width,
                                sizei height,
                                sizei depth,
                                boolean fixedsamplelocations);

New Tokens

Accepted by the <target> parameter of BindTexture,
TexStorage3DMultisampleOES, GetInternalformativ, TexParameter{if}*,
GetTexParameter{if}v and GetTexLevelParameter{if}v. Also, the texture
object indicated by the <texture> argument to FramebufferTextureLayer
can be TEXTURE_2D_MULTISAMPLE_ARRAY_OES

    TEXTURE_2D_MULTISAMPLE_ARRAY_OES                0x9102

Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
and GetFloatv:

    TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES        0x9105

Returned by the <type> parameter of GetActiveUniform:

    SAMPLER_2D_MULTISAMPLE_ARRAY_OES                0x910B
    INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES            0x910C
    UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES   0x910D

Additions to Chapter 7 of the OpenGL ES 3.1 Specification (Programs and Shaders)

Add to table 7.3 "OpenGL ES Shading Language type tokens" on p. 86:

Type Name Token                               Keyword           Attrib   Xfb    Buffer
--------------------------------------------- ----------------- ------- ------- -------
SAMPLER_2D_MULTISAMPLE_ARRAY_OES              sampler2DMSArray  (empty) (empty) (empty)
INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES          isampler2DMSArray (empty) (empty) (empty)
UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES usampler2DMSArray (empty) (empty) (empty)

Additions to Chapter 8 of the OpenGL ES 3.1 Specification (Textures and Samplers)

Modify Section 8.1, Texture Objects

Modify first paragraph of the section on p. 130, adding 2Dms array
textures:

Textures in GL are represented by ... The default texture object is
bound to each of ... and TEXTURE_2D_MULTISAMPLE_ARRAY_OES targets during
context initialization.


Modify second to last paragraph of  section on p. 132:

The texture object name space, including the initial ... and
two-dimensional multisample array texture objects, is shared among all
texture units. ...


Modify Section 8.5.3, Texture Image Specification (p. 157)

Add the new target to MAX_TEXTURE_SIZE description:

In a similar fashion, the maximum allowable width and height of a texel
array for a ... or two-dimensional multisample array texture must each
be at least 2^(k-lod) ...


Modify the introduction of section 8.8 "Multisample Textures":
sections.)

In addition to the texture types described in previous sections, two
additional type of textures are supported. Multisample textures are
similar to two-dimensional or two-dimensional array texture, except they
contains multiple samples per texel. Multisample textures do not have
multiple image levels, and are immutable.

The commands

    void TexStorage2DMultisample ...
    void TexStorage3DMultisampleOES(enum target, sizei samples,
                               enum internalformat,
                               sizei width, sizei height, sizei depth,
                               boolean fixedsamplelocations);

establish ... For TexStorage3DMultisampleOES <target> must be
TEXTURE_2D_MULTISAMPLE_ARRAY_OES. <width> and <height> are the
dimensions in texels of the texture.


Modify the second paragraph on p. 172:

Upon success of TexStorage*MultisampleOES the contents of texels for
<target> are undefined. TEXTURE_WIDTH, TEXTURE_HEIGHT, ...


Modify the Errors section to specify existing errors as specific to
TexStorage2DMultisample only (for <target>, and for <width> and <height>
being too large); other existing errors are taken to apply to both
commands. Then add new errors for TexStorage3DMultisample:

Errors

...

An INVALID_ENUM error is generated by TexStorage3DMultisample if
<target> is not TEXTURE_2D_MULTISAMPLE_ARRAY.

An INVALID_VALUE error is generated if <width>, <height> or <depth> is
less than 1.

An INVALID_VALUE error is generated by TexStorage3DMultisample if
<width> or <height> is greater than the value of MAX_TEXTURE_SIZE.

An INVALID_VALUE error is generated by TexStorage3DMultisample if
<depth> is greater than the value of MAX_ARRAY_TEXTURE_LAYERS.


Modifications to Section 8.9, "Texture Parameters", p. 173:

Add TEXTURE_2D_MULTISAMPLE_ARRAY_OES to the texture targets accepted by
TexParameter* in the first paragraph.


Add to the Errors section on p. 174/175:

Add TEXTURE_2D_MULTISAMPLE_ARRAY to the list of <target>s for which an
INVALID_ENUM error is *not* generated.

An INVALID_ENUM error is generated if <target> is
TEXTURE_2D_MULTISAMPLE_ARRAY, and <pname> is any sampler state from
table 6.13.

An INVALID_OPERATION error is generated if <target> is
TEXTURE_2D_MULTISAMPLE_ARRAY, and <pname> TEXTURE_BASE_LEVEL is set to a
value other than zero.

Modifications to Section 8.10.2, "Texture Parameter Queries"

Modify the second paragraph of that section on p. 175 describing the
<target> parameter of GetTexParameter*:

<target> may be one of ... or TEXTURE_2D_MULTISAMPLE_ARRAY_OES,
indicating the current ... or two-dimensional multisample array texture
object, respectively.


Modify Section 8.10.3 "Texture Level Parameter Queries" in the description
of GetTexLevelParameter{if}v on p. 175:

<target> may be one of ... or TEXTURE_2D_MULTISAMPLE_ARRAY_OES,
indicating the ... or two-dimensional multisample array target.

Additions to Chapter 9 of the OpenGL ES 3.1 Specification (Framebuffers and Framebuffer Objects)

Modify Section 9.2.2, Attaching Images to Framebuffer Objects, p. 210:

The command

    void FramebufferTextureLayer(enum target, enum attachment,
                                 uint texture, int level, int layer);

operates similarly to FramebufferTexture2D, except that it
attaches a single layer of a ...
or two-dimensional multisample array texture level.

...

If <texture> is a two-dimensional multisample array texture then <level>
must be zero.

Errors

...

An INVALID_VALUE error is generated if <layer> is larger than the value
of MAX_ARRAY_TEXTURE_LAYERS minus one (for two-dimensional array
textures).

Add two-dimensional multisample arrays to the list of texture types for
which an INVALID_OPERATION error is *not* generated.

Additions to Chapter 19 of the OpenGL ES 3.1 Specification (Context State Queries)

Modifications to Section 19.3, "Internal Format Queries"

Add to table 19.1 "Possible targets that <internalformat> can be used
with ..."

Target                           Usage
-------------------------------- ----------------------------
TEXTURE_2D_MULTISAMPLE_ARRAY_OES 2D multisample array texture

Errors

Errors are described in the base 3.1 spec which this extension modified,
or inline above. They are not summarized here.

New State

(add to table 20.8, Textures (selector, state per texture unit) p. 365)

                                                               Initial
Get Value                                 Type     Get Command Value  Description                      Sec.
----------------------------------------  ----     ----------- ------ -------------------------------- ------
TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES  32*xZ+   GetIntegerv 0      Texture object bound to          8.1
                                                                      TEXTURE_2D_MULTISAMPLE_ARRAY_OES

Modifications to the OpenGL ES Shading Language Specification, Version 3.10

Including the following line in a shader can be used to control the
language featured described in this extension:

  #extension GL_OES_texture_storage_multisample_2d_array : <behavior>

where <behavior> is as specified in section 3.4.

A new preprocessor #define is added to the OpenGL ES Shading Language:

  #define GL_OES_texture_storage_multisample_2d_array 1

Add to section 3.7 "Keywords"

The following new sampler types are added:

  sampler2DMSArray, isampler2DMSArray, usampler2DMSArray


Add to section 4.1 "Basic Types"

Add the following sampler type to the "Floating Point Sampler Types (opaque)"
table:

  sampler2DMSArray   handle for accessing a 2D multisample array
                        texture

Add the following sampler type to the "Unsigned Integer Sampler
Types (opaque)" table:

  usampler2DMSArray  handle for accessing an unsigned integer 2D
                        multisample array texture

Add the following sampler type to the "Integer Sampler Types" table:

  isampler2DMSArray  handle for accessing an integer 2D multisample
                        array texture


Add to section 8.9.2    "Texel Lookup Functions"

Add new functions to the set of allowed texture lookup functions:

Syntax:

  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.9.3 of the OpenGL ES specification "Multisample Texel Fetches".

Syntax:

  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.9.4 of
  the OpenGL ES specification section "Texture Size Query".

Examples

Issues

(1) Should mutable multisample texture support be kept?

Resolution: No - only immutable multisample textures should be support by
   this extension

(2) What should the minimum number of samples be?

Resolution: The minimum is one, but there is no requirement to implement
support for one, as this would be an unusual requirement.

(3) Should the new sampler types have OES suffixes?

RESOLVED: No. The non-suffixed names are reserved keywords in OpenGL ES
Shading Language 3.10, and can be used here.

Revision History

Rev.    Date     Author         Changes
----  ---------- ---------      --------------------------------------------
8     2019/01/11 Jon Leech      Change 'int sizedinternalformat' parameter
                                to 'enum internalformat', to follow
                                changes to the ES 3.2 specification
                                (KhronosGroup/OpenGL-API issue 30).
7     2016/05/03 Tobias Hector  Fixed INVALID_OPERATION error message for
                                TexStorage3DMultisample to match desktop and
                                ES 3.2
                                Rebased against release version of ES 3.1
                                spec.
6     2015/04/16 Jon Leech      Remove texture border width term b_t, which
                                doesn't exist in OpenGL ES.
5     2014/03/26 Jon Leech      Add missing GL_ prefix to the name string.
4     2014/03/06 Jon Leech      Change limit on TexStorage3DMultisampleOES
                                <depth> parameter to the value of
                                MAX_ARRAY_TEXTURE_LAYERS (Bug 11135).
3     2014/02/04 Jon Leech      Remove OES suffix from sampler keywords
                                since they're reserved in GLSL-ES 3.10
                                (Bug 11636).
2     2014/01/30 Jon Leech      Remove 2D multisample non-array textures,
                                and all common language already in the ES
                                3.1 specification draft.
1     2014/01/30 Jon Leech      Branch from internal XXX_texture_multisample
                                spec.