blob: 6c9c18ea30c3616567ecc0ce99e201c13c9ebdb1 [file] [log] [blame]
Name
ARB_internalformat_query2
Name Strings
GL_ARB_internalformat_query2
Contact
Daniel Koch (dkoch 'at' nvidia 'dot' com)
Contributors
Christophe Riccio, AMD
Bruce Merry
Yuan Wang, IMG
Pat Brown, NVIDIA
Piers Daniel, NVIDIA
Daniel Koch, TransGaming
Jon Leech, Khronos
Members of the ARB Working group.
Notice
Copyright (c) 2012-2013 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: October 12, 2018
Revision: 20
Number
ARB Extension #131
Dependencies
OpenGL 2.0 is required.
ARB_internalformat_query is required.
This extension is written against the OpenGL 4.2 (Core Profile)
Specification.
OES_texture_3D, ARB_framebuffer_object, EXT_texture_sRGB,
ARB_framebuffer_sRGB, ARB_texture_sRGB_decode,
EXT_texture_sRGB_decode, ARB_tessellation_shader,
ARB_geometry_shader4, ARB_compute_shader, EXT_texture_array,
ARB_texture_cube_map_array, ARB_texture_multisample,
ARB_texture_rectangle, ARB_texture_buffer_object,
ARB_texture_gather, ARB_debug_output, KHR_debug,
ARB_clear_buffer_object, ARB_texture_compression_bptc,
ARB_texture_compression_rgtc, ARB_stencil_texturing,
ARB_depth_texture, OES_depth_texture, ARB_texture_view,
ARB_texture_storage, ARB_texture_storage_multisample,
ARB_shader_image_load_store, EXT_direct_state_access,
EXT_texture_compression_s3tc, ARB_ES3_compatibility,
KHR_texture_compression_astc_ldr, and core specifications
that incorporate these extensions affect the definition
of this extension.
Overview
This extension extends the GetInternalformativ query that was added in
the ARB_internalformat_query extension to provide applications with more
granular per-format capability information.
This extension allows the remainder of the texture-style targets to
be specified along with any possible internal format.
We add queries for additional properties supported for an internal
format in addition to the multisample-related information that was
added in ARB_internalformat_query.
The goals of this extension are to:
a) provide a mechanism for implementations to declare support *above* the
minimum required by the specification
b) provide API to allow universally constant information to be queried
c) provide a user-friendly way of finding out about version- or
implementation-specific limitations.
While much of this information can be determined for a single GL version
by careful examination of the specification, support for many of these
properties has been gradually introduced over a number of API
revisions. This can observed when considering the range in functionality
between the various versions of GL 2, 3, and 4, as well as GL ES 2 and 3.
In the case of an application which wishes to be scalable and able to run
on a variety of possible GL or GL ES versions without being specifically
tailored for each version, it must either have knowledge of the
specifications built up into either the code or tables, or it must do
a number of tests on startup to determine which capabilities are present.
In OpenGL, other than the course-grained extension mechanism, many
limitations of, or limited support for, an internalformat can only
be signaled by failing an operation or by operating at reduced
performance. Thus, such tests often involve attempts to create resources,
using them in specific ways and benchmarking the operations to
find out if it is supported in the desired form, and at a required
performance level. The extension provides a way for these properties
and caveats to be directly queried from the implementation.
This extension is NOT intended to allow implementations to only support
a subset of features that are required by a specific GL version, nor is
it intended to replace the proper use of extension checks for optional
functionality.
IP Status
No known IP claims.
New Procedures and Functions
void GetInternalformati64v(enum target, enum internalformat,
enum pname, sizei bufSize, int64 *params);
New Types
None.
New Tokens
Accepted by the <target> parameter of GetInternalformativ
and GetInternalformati64v:
TEXTURE_1D 0x0DE0
TEXTURE_1D_ARRAY 0x8C18
TEXTURE_2D 0x0DE1
TEXTURE_2D_ARRAY 0x8C1A
TEXTURE_3D 0x806F
TEXTURE_CUBE_MAP 0x8513
TEXTURE_CUBE_MAP_ARRAY 0x9009
TEXTURE_RECTANGLE 0x84F5
TEXTURE_BUFFER 0x8C2A
RENDERBUFFER 0x8D41
TEXTURE_2D_MULTISAMPLE 0x9100
TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
Accepted by the <pname> parameter of GetInternalformativ
and GetInternalformati64v:
SAMPLES 0x80A9
NUM_SAMPLE_COUNTS 0x9380
INTERNALFORMAT_SUPPORTED 0x826F
INTERNALFORMAT_PREFERRED 0x8270
INTERNALFORMAT_RED_SIZE 0x8271
INTERNALFORMAT_GREEN_SIZE 0x8272
INTERNALFORMAT_BLUE_SIZE 0x8273
INTERNALFORMAT_ALPHA_SIZE 0x8274
INTERNALFORMAT_DEPTH_SIZE 0x8275
INTERNALFORMAT_STENCIL_SIZE 0x8276
INTERNALFORMAT_SHARED_SIZE 0x8277
INTERNALFORMAT_RED_TYPE 0x8278
INTERNALFORMAT_GREEN_TYPE 0x8279
INTERNALFORMAT_BLUE_TYPE 0x827A
INTERNALFORMAT_ALPHA_TYPE 0x827B
INTERNALFORMAT_DEPTH_TYPE 0x827C
INTERNALFORMAT_STENCIL_TYPE 0x827D
MAX_WIDTH 0x827E
MAX_HEIGHT 0x827F
MAX_DEPTH 0x8280
MAX_LAYERS 0x8281
MAX_COMBINED_DIMENSIONS 0x8282
COLOR_COMPONENTS 0x8283
DEPTH_COMPONENTS 0x8284
STENCIL_COMPONENTS 0x8285
COLOR_RENDERABLE 0x8286
DEPTH_RENDERABLE 0x8287
STENCIL_RENDERABLE 0x8288
FRAMEBUFFER_RENDERABLE 0x8289
FRAMEBUFFER_RENDERABLE_LAYERED 0x828A
FRAMEBUFFER_BLEND 0x828B
READ_PIXELS 0x828C
READ_PIXELS_FORMAT 0x828D
READ_PIXELS_TYPE 0x828E
TEXTURE_IMAGE_FORMAT 0x828F
TEXTURE_IMAGE_TYPE 0x8290
GET_TEXTURE_IMAGE_FORMAT 0x8291
GET_TEXTURE_IMAGE_TYPE 0x8292
MIPMAP 0x8293
MANUAL_GENERATE_MIPMAP 0x8294
AUTO_GENERATE_MIPMAP 0x8295
COLOR_ENCODING 0x8296
SRGB_READ 0x8297
SRGB_WRITE 0x8298
SRGB_DECODE_ARB 0x8299
FILTER 0x829A
VERTEX_TEXTURE 0x829B
TESS_CONTROL_TEXTURE 0x829C
TESS_EVALUATION_TEXTURE 0x829D
GEOMETRY_TEXTURE 0x829E
FRAGMENT_TEXTURE 0x829F
COMPUTE_TEXTURE 0x82A0
TEXTURE_SHADOW 0x82A1
TEXTURE_GATHER 0x82A2
TEXTURE_GATHER_SHADOW 0x82A3
SHADER_IMAGE_LOAD 0x82A4
SHADER_IMAGE_STORE 0x82A5
SHADER_IMAGE_ATOMIC 0x82A6
IMAGE_TEXEL_SIZE 0x82A7
IMAGE_COMPATIBILITY_CLASS 0x82A8
IMAGE_PIXEL_FORMAT 0x82A9
IMAGE_PIXEL_TYPE 0x82AA
IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC
SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD
SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE
SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF
TEXTURE_COMPRESSED 0x86A1
TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1
TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2
TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3
CLEAR_BUFFER 0x82B4
TEXTURE_VIEW 0x82B5
VIEW_COMPATIBILITY_CLASS 0x82B6
Returned as possible responses for various <pname> queries
to GetInternalformativ and GetInternalformati64v
FULL_SUPPORT 0x82B7
CAVEAT_SUPPORT 0x82B8
IMAGE_CLASS_4_X_32 0x82B9
IMAGE_CLASS_2_X_32 0x82BA
IMAGE_CLASS_1_X_32 0x82BB
IMAGE_CLASS_4_X_16 0x82BC
IMAGE_CLASS_2_X_16 0x82BD
IMAGE_CLASS_1_X_16 0x82BE
IMAGE_CLASS_4_X_8 0x82BF
IMAGE_CLASS_2_X_8 0x82C0
IMAGE_CLASS_1_X_8 0x82C1
IMAGE_CLASS_11_11_10 0x82C2
IMAGE_CLASS_10_10_10_2 0x82C3
VIEW_CLASS_128_BITS 0x82C4
VIEW_CLASS_96_BITS 0x82C5
VIEW_CLASS_64_BITS 0x82C6
VIEW_CLASS_48_BITS 0x82C7
VIEW_CLASS_32_BITS 0x82C8
VIEW_CLASS_24_BITS 0x82C9
VIEW_CLASS_16_BITS 0x82CA
VIEW_CLASS_8_BITS 0x82CB
VIEW_CLASS_S3TC_DXT1_RGB 0x82CC
VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD
VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE
VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF
VIEW_CLASS_RGTC1_RED 0x82D0
VIEW_CLASS_RGTC2_RG 0x82D1
VIEW_CLASS_BPTC_UNORM 0x82D2
VIEW_CLASS_BPTC_FLOAT 0x82D3
[interactions with ARB_ES3_compatibility]
VIEW_CLASS_EAC_R11 0x9383
VIEW_CLASS_EAC_RG11 0x9384
VIEW_CLASS_ETC2_RGB 0x9385
VIEW_CLASS_ETC2_RGBA 0x9386
VIEW_CLASS_ETC2_EAC_RGBA 0x9387
[interactions with KHR_texture_compression_astc_ldr]
VIEW_CLASS_ASTC_4x4_RGBA 0x9388
VIEW_CLASS_ASTC_5x4_RGBA 0x9389
VIEW_CLASS_ASTC_5x5_RGBA 0x938A
VIEW_CLASS_ASTC_6x5_RGBA 0x938B
VIEW_CLASS_ASTC_6x6_RGBA 0x938C
VIEW_CLASS_ASTC_8x5_RGBA 0x938D
VIEW_CLASS_ASTC_8x6_RGBA 0x938E
VIEW_CLASS_ASTC_8x8_RGBA 0x938F
VIEW_CLASS_ASTC_10x5_RGBA 0x9390
VIEW_CLASS_ASTC_10x6_RGBA 0x9391
VIEW_CLASS_ASTC_10x8_RGBA 0x9392
VIEW_CLASS_ASTC_10x10_RGBA 0x9393
VIEW_CLASS_ASTC_12x10_RGBA 0x9394
VIEW_CLASS_ASTC_12x12_RGBA 0x9395
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)
None.
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 (Compatibility Profile)
Specification (Special Functions)
None.
Additions to Chapter 6 of the OpenGL 4.2 (Core Profile) Specification
(State and State Requests)
Replace Section 6.1.15 "Internal Format Queries" with the following:
"Information about implementation-dependent support for internal formats
can be queried with the commands
void GetInternalformativ(enum target, enum internalformat,
enum pname, sizei bufSize, int *params);
void GetInternalformati64v(enum target, enum internalformat,
enum pname, sizei bufSize, int64 *params);
<internalformat> can be any value. The INTERNALFORMAT_SUPPORTED <pname>
can be used to determine if the internal format is supported, and the
other <pnames> are defined in terms of whether or not the format is
supported.
<target> indicates the usage of the <internalformat>, and must be one of
the targets listed in Table 6.xx, otherwise the INVALID_ENUM error is
generated.
Target Usage
----------------- ------
TEXTURE_1D 1D texture
TEXTURE_1D_ARRAY 1D array texture
TEXTURE_2D 2D texture
TEXTURE_2D_ARRAY 2D array texture
TEXTURE_2D_MULTISAMPLE 2D multisample texture
TEXTURE_2D_MULTISAMPLE_ARRAY 2D multisample array texture
TEXTURE_3D 3D texture
TEXTURE_BUFFER buffer texture
TEXTURE_CUBE_MAP cube map texture
TEXTURE_CUBE_MAP_ARRAY cube map array texture
TEXTURE_RECTANGLE rectangle texture
RENDERBUFFER renderbuffer
Table 6.xx: Possible targets that <internalformat> can be used with
and the corresponding usage meaning.
No more than <bufSize> integers will be written into <params>. If
more data are available, they will be ignored and no error will be
generated.
<pname> indicates the information to query. The following list provides
the valid values for <pname>, defines the meaning and the possible
responses. In the following descriptions, the term /resource/ is used
to generically refer to an object of the appropriate type that has
been created with <internalformat> and <target>. If the particualar
<target> and <internalformat> combination do not make sense, or if
a particular type of <target> is not supported by the implementation
the "unsupported" answer should be given. This is not an error.
All properties can be queried via either GetInternalformat* command.
Data conversions are done as defined in section 6.1.2.
For <pname> queries that return information about supported type of
operation in <params>, they have the following meanings:
- NONE: the requested capability is not supported at all by the
implementation.
- CAVEAT_SUPPORT: the requested capability is supported by the
implementation, but there may be some implementation-specific
caveats that make support less than optimal. For example using
the feature may result in reduced performance (relative to other
formats or features), such as software rendering or other mechanisms
of emulating the desired feature.
If a query reports that there is a caveat and the debug output
functionality is enabled (see section 5.5 or ARB_debug_output),
the GL will generate a debug output message describing the caveat.
The message has the source DEBUG_SOURCE_API, the type
DEBUG_TYPE_PERFORMANCE, and an implementation-dependent ID.
- FULL_SUPPORT: the requested capability is fully supported by the
implementation.
The following are the supported values for <pname>:
- INTERNALFORMAT_SUPPORTED: If <internalformat> is an internal format
that is supported by the implementation in at least some subset of
possible operations, TRUE is written to <params>. If <internalformat>
if not a valid token for any internal format usage, FALSE is returned.
<internalformats> that must be supported (in GL 4.2 or later) include
the following:
- "sized internal formats" from Table 3.12, 3.13, and 3.15,
- any specific "compressed internal format" from Table 3.14,
- any "image unit format" from Table 3.21.
- any generic "compressed internal format" from Table 3.14, if the
implementation accepts it for any texture specification commands, and
- unsized or base internal format, if the implementation accepts
it for texture or image specification.
In other words, any <internalformat> accepted by any of the commands:
ClearBufferData, ClearBufferSubData,
CompressedTexImage1D, CompressedTexImage2D, CompressedTexImage3D,
CopyTexImage1D, CopyTexImage2D,
RenderbufferStorage, RenderbufferStorageMultisample,
TexBuffer,
TexImage1D, TexImage2D, TexImage3D,
TexImage2DMultisample, TexImage3DMultisample,
TexStorage1D, TexStorage2D, TexStorage3D,
TexStorage2DMultisample, TexStorage3DMultisample
TextureView,
ClearNamedBufferDataEXT, ClearNamedBufferSubDataEXT,
TextureImage1DEXT, TextureImage2DEXT, TextureImage3DEXT
CopyTextureImage1DEXT, CopyTextureImage2DEXT,
MultiTexImage1DEXT, MultiTexImage2DEXT, MultiTexImage3DEXT
CompressedTextureImage3DEXT, CompressedTextureImage2DEXT, CompressedTextureImage1DEXT,
CompressedMultiTexImage3DEXT, CompressedMultiTexImage2DEXT, CompressedMultiTexImage1DEXT
TextureBufferEXT, MultiTexBufferEXT,
NamedRenderbufferStorageEXT, NamedRenderbufferStorageMultisampleEXT,
NamedRenderbufferStorageMultisampleCoverageEXT,
CopyMultiTexImage1DEXT, CopyMultiTexImage2DEXT,
TextureStorage1DEXT, TextureStorage2DEXT, TextureStorage3DEXT,
TextureStorage2DMultisampleEXT, TextureStorage3DMultisampleEXT, and
any valid <format> accepted by BindImageTexture, must be supported.
- NUM_SAMPLE_COUNTS: The number of sample counts that would be
returned by querying SAMPLES is returned in <params>.
* If <internalformat> is not color-renderable, depth-renderable, or
stencil-renderable (as defined in section 4.4.4), or if <target>
does not support multiple samples (ie other than TEXTURE_2D_MULTISAMPLE,
TEXTURE_2D_MULTISAMPLE_ARRAY, or RENDERBUFFER), 0 is returned.
- SAMPLES: The sample counts supported for this <internalformat> and
<target> are written into <params>, in descending order. Only
positive values are returned.
* Note that querying SAMPLES with a <bufSize> of 1 will return just
the maximum supported number of samples for this format.
* The maximum value in SAMPLES is guaranteed to be at least the lowest
of the following:
- The value of GetIntegerv(MAX_INTEGER_SAMPLES), if <internalformat>
is a signed or unsigned integer format.
- The value of GetIntegerv(MAX_DEPTH_TEXTURE_SAMPLES), if
<internalformat> is a depth/stencil-renderable format and <target>
is TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY.
- The value of GetIntegerv(MAX_COLOR_TEXTURE_SAMPLES), if
<internalformat> is a color-renderable format and <target> is
TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY.
- The value of GetIntegerv(MAX_SAMPLES).
* If <internalformat> is not color-renderable, depth-renderable, or
stencil-renderable (as defined in section 4.4.4), or if <target>
does not support multiple samples (ie other than TEXTURE_2D_MULTISAMPLE,
TEXTURE_2D_MULTISAMPLE_ARRAY, or RENDERBUFFER), <params> is not
modified.
- INTERNALFORMAT_PREFERRED: The implementation-preferred internal format
for representing resources of the specified <internalformat> is returned
in <params>. The preferred internal format should have no less precision
than the requested one. If the specified <internalformat> is already
a preferred format, or is there is no better format that is compatible,
the queried <internalformat> value is written to <params>. If the
<internalformat> is not supported, NONE is returned.
- INTERNALFORMAT_RED_SIZE
- INTERNALFORMAT_GREEN_SIZE
- INTERNALFORMAT_BLUE_SIZE
- INTERNALFORMAT_ALPHA_SIZE
- INTERNALFORMAT_DEPTH_SIZE
- INTERNALFORMAT_STENCIL_SIZE
- INTERNALFORMAT_SHARED_SIZE
For uncompressed internal formats, queries of these values return the
actual resolutions that would be used for storing image array components
for the resource.
For compressed internal formats, the resolutions returned specify the
component resolution of an uncompressed internal format that produces
an image of roughly the same quality as the compressed algorithm.
For textures this query will return the same information as querying
GetTexLevelParameter{if}v for TEXTURE_*_SIZE would return (except in
such cases where GetTexLevelParameter{if}v doesn't support such a query).
If the internal format is unsupported, or if a particular component is
not present in the format, 0 is written to <params>.
- INTERNALFORMAT_RED_TYPE
- INTERNALFORMAT_GREEN_TYPE
- INTERNALFORMAT_BLUE_TYPE
- INTERNALFORMAT_ALPHA_TYPE
- INTERNALFORMAT_DEPTH_TYPE
- INTERNALFORMAT_STENCIL_TYPE
For uncompressed internal formats, queries for these values return the
data type used to store the component.
For compressed internal formats the types returned specify how components
are interpreted after decompression.
For textures this query returns the same information as querying
GetTexLevelParameter{if}v for TEXTURE_*_TYPE would return (except in
such cases where GetTexLevelParameter{if}v doesn't support such a
query). Possible values return include, NONE, SIGNED_NORMALIZED,
UNSIGNED_NORMALIZED, FLOAT, INT, UNSIGNED_INT, representing missing,
signed normalized fixed point, unsigned normalized fixed point,
floating-point, signed unnormalized integer and unsigned unnormalized
integer components. NONE is returned for all component types if the
format is unsupported.
- MAX_WIDTH: The maximum supported width for the resource is returned in
<params>. For resources with only one-dimension, this one dimension is
considered the width. If the resource is unsupported, zero is returned.
- MAX_HEIGHT: The maximum supported height for the resource is returned in
<params>. For resources with two or more dimensions, the second dimension
is considered the height. If the resource does not have at least two
dimensions, or if the resource is unsupported, zero is returned.
- MAX_DEPTH: The maximum supported depth for the resource is returned in
<params>. For resources with three or more dimensions, the third
dimension is considered the depth. If the resource does not have at least
three dimensions, or if the resource is unsupported, zero is returned.
- MAX_LAYERS: The maximum supported number of layers for the resource is
returned in <params>. For 1D array targets, the value returned is the
same as the MAX_HEIGHT. For 2D and cube array targets, the value returned
is the same as the MAX_DEPTH. If the resource does not support layers,
or if the resource is unsupported, zero is returned.
- MAX_COMBINED_DIMENSIONS: The maximum combined dimensions for the resource
is returned in <params>. The combined dimensions is the product of the
individual dimensions of the resource. For multisampled surfaces the
number of samples is considered an additional dimension. Note that the
value returned can be >= 2^32 and should be queried with the 64-bit query.
This value should be considered a recommendations for applications. There
may be system-dependant reasons why allocations larger than this size may
fail, even if there might appear to be sufficient memory available when
queried via some other means. This also does not provide a guarantee that
allocations smaller than this will succeed because this value is not
affected by existing resource allocations.
For 1D targets this is the maximum single dimension.
For 1D array targets this is the maximum combined width and layers.
For 2D targets this is the maximum combined width and height.
For 2D multisample targets this is the combined width, height and samples.
For 2D array targets this is the max combined width, height and layers.
For 2D multisample array targets, this is the max combined width, height,
layers and samples.
For 3D targets this is the maximum combined width, height and depth.
For cube map targets this is the maximum combined width, height and
faces.
For cube map array targets this is the maximum width, height and
layer-faces.
If the resource is unsupported, zero is returned.
- COLOR_COMPONENTS: If the internal format contains any color components
(R, G, B, or A), TRUE is returned in <params>. If the internal format is
unsupported or contains no color components, FALSE is returned.
- DEPTH_COMPONENTS: If the internal format contains a depth component (D),
TRUE is returned in <params>. If the internal format is unsupported or
contains no depth component, FALSE is returned.
- STENCIL_COMPONENTS: If the internal format contains a stencil component
(S), TRUE is returned in <params>. If the internal format is unsupported
or contains no stencil component, FALSE is returned.
- COLOR_RENDERABLE: If <internalformat> is color-renderable (as defined in
section 4.4.4), TRUE is returned in <params>. If the internal format is
unsupported, or the internal format is not color-renderable, FALSE
is returned.
- DEPTH_RENDERABLE: If <internalformat> is depth-renderable (as defined in
section 4.4.4), TRUE is returned in <params>. If the internal format is
unsupported, or if the internal format is not depth-renderable, FALSE
is returned.
- STENCIL_RENDERABLE: If <internalformat> is stencil-renderable (as
defined in section 4.4.4), TRUE is returned in <params>. If the internal
format is unsupported, or if the internal format is not stencil-
renderable, FALSE is returned.
- FRAMEBUFFER_RENDERABLE: The support for rendering to the resource via
framebuffer attachment is returned in <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource is unsupported, NONE is returned.
- FRAMEBUFFER_RENDERABLE_LAYERED: The support for layered rendering to
the resource via framebuffer attachment is returned in <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource is unsupported, NONE is returned.
- FRAMEBUFFER_BLEND: The support for rendering to the resource
via framebuffer attachment when blending is enabled is returned in
<params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource is unsupported, NONE is returned.
- READ_PIXELS: The support for reading pixels from the resource when it is
attached to a framebuffer is returned in <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource is unsupported, NONE is returned.
- READ_PIXELS_FORMAT: The <format> to pass to ReadPixels to obtain the best
performance and image quality when reading from framebuffers with
<internalformat> is returned in <params>.
Possible values include any value that is legal to pass for the <format>
parameter to ReadPixels, or NONE if <internalformat> is not supported
or can never be a valid source for ReadPixels.
- READ_PIXELS_TYPE: The <type> to pass to ReadPixels to obtain the best
performance and image quality when reading from framebuffers with
<internalformat> is returned in <params>.
Possible values include any value that is legal to pass for the <type>
parameter to ReadPixels, or NONE if the internal format is not supported
or can never be a source for ReadPixels.
- TEXTURE_IMAGE_FORMAT: The implementation-preferred <format> to pass to
TexImage*D or TexSubImage*D when specifying texture image data for
this resource is returned in <params>.
Possible values include any value that is legal to pass for the <format>
parameter to the Tex*Image*D commands, or NONE if the resource is
not supported for this operation.
- TEXTURE_IMAGE_TYPE: The implementation-preferred <type> to pass to
TexImage*D or TexSubImage*D when specifying texture image data for
this resource is returned in <params>.
Possible values include any value that is legal to pass for the <type>
parameter to the Tex*Image*D commands, or NONE if the resource is
not supported for this operation.
- GET_TEXTURE_IMAGE_FORMAT: The implementation-preferred <format> to pass to
GetTexImage when querying texture image data from this resource.
Possible values include any value that is legal to pass for the <format>
parameter to GetTexImage, or NONE if the resource does not support
this operation, or if GetTexImage is not supported.
- GET_TEXTURE_IMAGE_TYPE: The implementation-preferred <type> to pass to
GetTexImage when querying texture image data from this resource.
Possible values include any value that is legal to pass for the <type>
parameter to GetTexImage, or NONE if the resource does not support
this operation, or if GetTexImage is not supported.
- MIPMAP: If the resource supports mipmaps, TRUE is returned in <params>.
If the resource is not supported, or if mipmaps are not supported for
this type of resource, FALSE is returned.
- MANUAL_GENERATE_MIPMAP: The support for manually generating mipmaps for
the resource is returned in <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource is not supported, or if the operation is not supported,
NONE is returned.
- AUTO_GENERATE_MIPMAP: The support for automatic generation of mipmaps
for the resource is returned in <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource is not supported, or if the operation is not supported,
NONE is returned.
- COLOR_ENCODING: The color encoding for the resource is returned in
<params>. Possible values for color buffers are LINEAR or SRGB,
for linear or sRGB-encoded color components, respectively. For non-color
formats (such as depth or stencil), or for unsupported resources,
the value NONE is returned.
- SRGB_READ: The support for converting from sRGB colorspace on read
operations (see section 3.9.18) from the resource is returned in
<params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- SRGB_WRITE: The support for converting to sRGB colorspace on write
operations to the resource is returned in <params>.
This indicates that writing to framebuffers with this internalformat
will encode to sRGB color spaces when FRAMEBUFFER_SRGB is enabled (see
section 4.1.8).
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- SRGB_DECODE_ARB: The support for toggling whether sRGB decode happens at
sampling time (see EXT/ARB_texture_sRGB_decode) for the resource is
returned in <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- FILTER: The support for filter types other than NEAREST or
NEAREST_MIPMAP_NEAREST for the resource is written to <params>.
This indicates if sampling from such resources supports setting the
MIN/MAG filters to LINEAR values.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- VERTEX_TEXTURE: The support for using the resource as a source for
texture sampling in a vertex shader is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- TESS_CONTROL_TEXTURE: The support for using the resource as a source for
texture sampling in a tessellation control shader is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- TESS_EVALUATION_TEXTURE: The support for using the resource as a source
for texture sampling in a tessellation evaluation shader is written to
<params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- GEOMETRY_TEXTURE: The support for using the resource as a source for
texture sampling in a geometry shader is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- FRAGMENT_TEXTURE: The support for using the resource as a source for
texture sampling in a fragment shader is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- COMPUTE_TEXTURE: The support for using the resource as a source for
texture sampling in a compute shader is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- TEXTURE_SHADOW: The support for using the resource with shadow samplers
is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- TEXTURE_GATHER: The support for using the resource with texture gather
operations is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- TEXTURE_GATHER_SHADOW: The support for using resource with texture gather
operations with shadow samplers is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- SHADER_IMAGE_LOAD: The support for using the resource with image load
operations in shaders is written to <params>.
In this case the <internalformat> is the value of the <format> parameter
that would be passed to BindImageTexture.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- SHADER_IMAGE_STORE: The support for using the resource with image store
operations in shaders is written to <params>.
In this case the <internalformat> is the value of the <format> parameter
that is passed to BindImageTexture.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- SHADER_IMAGE_ATOMIC: The support for using the resource with atomic
memory operations from shaders is written to <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- IMAGE_TEXEL_SIZE: The size of a texel when the resource when used as
an image texture is returned in <params>. This is the value from the
/Size/ column in Table 3.22. If the resource is not supported for image
textures, or if image textures are not supported, zero is returned.
- IMAGE_COMPATIBILITY_CLASS: The compatibility class of the resource when
used as an image texture is returned in <params>. This corresponds to
the value from the /Class/ column in Table 3.22. The possible values
returned are IMAGE_CLASS_4_X_32, IMAGE_CLASS_2_X_32, IMAGE_CLASS_1_X_32,
IMAGE_CLASS_4_X_16, IMAGE_CLASS_2_X_16, IMAGE_CLASS_1_X_16,
IMAGE_CLASS_4_X_8, IMAGE_CLASS_2_X_8, IMAGE_CLASS_1_X_8,
IMAGE_CLASS_11_11_10, and IMAGE_CLASS_10_10_10_2, which correspond to
the 4x32, 2x32, 1x32, 4x16, 2x16, 1x16, 4x8, 2x8, 1x8, the class
(a) 11/11/10 packed floating-point format, and the class (b)
10/10/10/2 packed formats, respectively.
If the resource is not supported for image textures, or if image
textures are not supported, NONE is returned.
- IMAGE_PIXEL_FORMAT: The pixel format of the resource when used as an
image texture is returned in <params>. This is the value
from the /Pixel format/ column in Table 3.22. If the resource is not
supported for image textures, or if image textures are not supported,
NONE is returned.
- IMAGE_PIXEL_TYPE: The pixel type of the resource when used as an
image texture is returned in <params>. This is the value from
the /Pixel type/ column in Table 3.22. If the resource is not supported
for image textures, or if image textures are not supported, NONE is
returned.
- IMAGE_FORMAT_COMPATIBILITY_TYPE: The matching criteria use for the
resource when used as an image textures is returned in <params>. This
is equivalent to calling GetTexParameter with <value> set to
IMAGE_FORMAT_COMPATIBILITY_TYPE. Possible values are
IMAGE_FORMAT_COMPATIBILITY_BY_SIZE or IMAGE_FORMAT_COMPATIBILITY_BY_CLASS.
If the resource is not supported for image textures, or if image textures
are not supported, NONE is returned.
- SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: The support for using the resource
both as a source for texture sampling while it is bound as a buffer for
depth test is written to <params>. For example, a depth (or stencil)
texture could be bound simultaneously for texturing while it is bound as
a depth (and/or stencil) buffer without causing a feedback loop, provided
that depth writes are disabled.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: The support for using the resource
both as a source for texture sampling while it is bound as a buffer for
stencil test is written to <params>. For example, a depth (or stencil)
texture could be bound simultaneously for texturing while it is bound as
a depth (and/or stencil) buffer without causing a feedback loop,
provided that stencil writes are disabled.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: The support for using the resource
both as a source for texture sampling while performing depth writes to
the resources is written to <params>. For example, a depth-stencil
texture could be bound simultaneously for stencil texturing while it
is bound as a depth buffer. Feedback loops cannot occur because sampling
a stencil texture only returns the stencil portion, and thus writes to
the depth buffer do not modify the stencil portions.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: The support for using the resource
both as a source for texture sampling while performing stencil writes to
the resources is written to <params>. For example, a depth-stencil
texture could be bound simultaneously for depth-texturing while it is
bound as a stencil buffer. Feedback loops cannot occur because sampling
a depth texture only returns the depth portion, and thus writes to
the stencil buffer could not modify the depth portions.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- TEXTURE_COMPRESSED: If <internalformat> is a compressed format
that is supported for this type of resource, TRUE is returned in
<params>. If the internal format is not compressed, or the type of
resource is not supported, FALSE is returned.
- TEXTURE_COMPRESSED_BLOCK_WIDTH: If the resource contains a compressed
format, the width of a compressed block (in bytes) is returned in
<params>. If the internal format is not compressed, or the resource
is not supported, 0 is returned.
- TEXTURE_COMPRESSED_BLOCK_HEIGHT: If the resource contains a compressed
format, the height of a compressed block (in bytes) is returned in
<params>. If the internal format is not compressed, or the resource
is not supported, 0 is returned.
- TEXTURE_COMPRESSED_BLOCK_SIZE: If the resource contains a compressed
format the number of bytes per block is returned in <params>. If the
internal format is not compressed, or the resource is not supported,
0 is returned.
(combined with the above, allows the bitrate to be computed, and may be
useful in conjunction with ARB_compressed_texture_pixel_storage).
- CLEAR_BUFFER: The support for using the resource with ClearBuffer*Data
commands is returned in <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- TEXTURE_VIEW: The support for using the resource with the TextureView
command is returned in <params>.
Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
If the resource or operation is not supported, NONE is returned.
- VIEW_COMPATIBILITY_CLASS: The compatibility class of the resource when
used as a texture view is returned in <params>. The compatibility
class is one of the values from the /Class/ column of Table 3.X.2
(added by the ARB_texture_view extension). If
the resource has no other formats that are compatible, the resource
does not support views, or if texture views are not supported, NONE is
returned.
If <pname> is not one of the preceeding names, the error INVALID_ENUM
is generated."
Additions to Appendix A of the OpenGL 4.2 (Core Profile) Specification
(Invariance)
None.
Additions to Appendix D of the OpenGL 4.2 (Core Profile) Specification
(Shared Objects and Multiple Contexts)
None.
GLX Protocol
XXX - TODO.
Dependencies on OpenGL ES 2.0
Queries involving any of the following enums for <target>:
- TEXTURE_1D
- TEXTURE_3D
- TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY
- TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY
- TEXTURE_RECTANGLE
- TEXTURE_BUFFER
or any of the following <pnames>:
- GET_TEXTURE_IMAGE_FORMAT, GET_TEXTURE_IMAGE_TYPE
- MAX_LAYERS
- FRAMEBUFFER_RENDERABLE_LAYERED
- AUTO_GENERATE_MIPMAP
- SRGB_READ, SRGB_WRITE
- TESS_CONTROL_TEXTURE, TESS_EVALUATION_TEXTURE
- GEOMETRY_TEXTURE
- COMPUTE_TEXTURE
- TEXTURE_SHADOW, TEXTURE_GATHER, TEXTURE_GATHER_SHADOW
- SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC
- IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE
- IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE
- CLEAR_BUFFER
- TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS
return the appropriate "unsupported" response.
Queries for unsupported features/targets do NOT set errors.
Dependencies on OES_texture_3D
- adds support for TEXTURE_3D targets in OpenGL ES 2.0 implementations.
Dependencies on OpenGL ES 3.0
Queries involving any of the following enums for <target>:
- TEXTURE_1D
- TEXTURE_1D_ARRAY, TEXTURE_CUBE_MAP_ARRAY
- TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY
- TEXTURE_RECTANGLE
- TEXTURE_BUFFER
or any of the following <pnames>:
- GET_TEXTURE_IMAGE_FORMAT, GET_TEXTURE_IMAGE_TYPE
- AUTO_GENERATE_MIPMAP
- TESS_CONTROL_TEXTURE, TESS_EVALUATION_TEXTURE
- GEOMETRY_TEXTURE
- COMPUTE_TEXTURE
- TEXTURE_GATHER, TEXTURE_GATHER_SHADOW
- SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC
- IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE
- IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE
- CLEAR_BUFFER
- TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS
return the appropriate "unsupported" response.
Queries for unsupported features/targets do NOT set errors.
If the <pname> is SRGB_WRITE, ignore references to FRAMEBUFFER_SRGB.
Dependencies on OpenGL 2.0
Queries involving any of the following enums for <target>:
- TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY
- TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY
- TEXTURE_RECTANGLE
- TEXTURE_BUFFER
- RENDERBUFFER
or any of the following <pnames>:
- MAX_LAYERS
- FRAMEBUFFER_RENDERABLE
- FRAMEBUFFER_RENDERABLE_LAYERED
- FRAMEBUFFER_BLEND
- MANUAL_GENERATE_MIPMAP
- SRGB_READ, SRGB_WRITE
- TESS_CONTROL_TEXTURE, TESS_EVALUATION_TEXTURE
- GEOMETRY_TEXTURE
- COMPUTE_TEXTURE
- TEXTURE_SHADOW, TEXTURE_GATHER, TEXTURE_GATHER_SHADOW
- SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC
- IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE
- IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE
- CLEAR_BUFFER
- TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS
return the appropriate "unsupported" response.
Queries for unsupported features/targets do NOT set errors.
Dependencies on OpenGL 3.0
Queries involving any of the following enums for <target>:
- TEXTURE_CUBE_MAP_ARRAY
- TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY
- TEXTURE_RECTANGLE
- TEXTURE_BUFFER
or any of the following <pnames>:
- TESS_CONTROL_TEXTURE, TESS_EVALUATION_TEXTURE
- GEOMETRY_TEXTURE
- COMPUTE_TEXTURE
- TEXTURE_SHADOW, TEXTURE_GATHER, TEXTURE_GATHER_SHADOW
- SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC
- IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE
- IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE
- CLEAR_BUFFER
- TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS
return the appropriate "unsupported" response.
Queries for unsupported features/targets do NOT set errors.
Dependencies on OpenGL 3.2 (Core Profile)
In core profiles for OpenGL 3.2 and later versions, queries
for the AUTO_GENERATE_MIPMAP <pname> return the appropriate
unsupported response.
Dependencies on OpenGL 4.0
Queries involving any of the following <pnames>:
- COMPUTE_TEXTURE
- SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC
- IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE
- IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE
- CLEAR_BUFFER
- TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS
return the appropriate "unsupported" response.
Queries for unsupported features/targets do NOT set errors.
Dependencies on ARB_framebuffer_object
If ARB_framebuffer_object, EXT_framebuffer_object or equivalent
functionality is not supported, queries involving the RENDERBUFFER
<target> or the following <pnames>:
- FRAMEBUFFER_RENDERABLE
- FRAMEBUFFER_RENDERABLE_LAYERED
- FRAMEBUFFER_BLEND
- MANUAL_GENERATE_MIPMAP
return the appropriate "unsupported" response.
Dependencies on EXT_texture_sRGB
If EXT_texture_sRGB or equivalent functionality is not supported,
queries for the SRGB_READ <pname> and for sRGB internalformats
return the appropriate "unsupported" response.
Dependencies on ARB_framebuffer_sRGB
If ARB_framebuffer_sRGB or equivalent functionality is not supported,
queries for the SRGB_WRITE <pname> return the appropriate "unsupported"
response.
Dependencies on ARB/EXT_texture_sRGB_decode
If ARB_texture_sRGB_decode or EXT_texture_sRGB_decode or equivalent
functionality is not supported, queries for the SRGB_DECODE_ARB <pname>
set the INVALID_ENUM error. (N.B. this is different from all other
extension interactions because this functionality is not present
in any core specification, and thus it behaves as an unrecognized
token rather than as an unsupported feature.)
Dependencies on ARB_tessellation_shader
If ARB_tessellation_shader or equivalent functionality is not supported,
queries for the TESS_CONTROL_TEXTURE and TESS_EVALUATION_TEXTURE <pnames>,
return the appropriate "unsupported" response.
Dependencies on ARB_geometry_shader4
If ARB_geometry_shader4 or equivalent functionality is not supported,
queries for the GEOMETRY_TEXTURE <pname> will return the appropriate
"unsupported" response.
Dependencies on ARB_compute_shader
If ARB_compute_shader or equivalent functionality is not supported,
queries for the COMPUTE_TEXTURE <pname> will return the appropriate
"unsupported" response.
Dependencies on EXT_texture_array
If EXT_texture_array or equivalent functionality is not supported,
queries for the TEXTURE_1D_ARRAY and TEXTURE_2D_ARRAY <targets> and
for the FRAMEBUFFER_RENDERABLE_LAYERED <pname> return the appropriate
"unsupported" response. In addition, the MAX_LAYERS query will return
zero.
Dependencies on ARB_texture_cube_map_array
If ARB_texture_cube_map_array or equivalent functionality is not supported,
queries for the TEXTURE_CUBE_MAP_ARRAY <target> will return the
appropriate "unsupported" response.
Dependencies on ARB_texture_multisample
If ARB_texture_multisample or equivalent functionality is not supported,
queries for the TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY
<target> parameter will return the appropriate unsupported response.
Dependencies on ARB_texture_rectangle
If ARB_texture_rectange or equivalent functionality is not supported,
queries for the TEXTURE_RECTANGLE <target> parameter will return the
appropriate unsupported response.
Dependencies on ARB_texture_buffer_object
If ARB_texture_buffer_object or equivalent functionality is not supported,
queries for the TEXTURE_BUFFER <target> parameter will return the
appropriate unsupported response. Ignore all references to TexBuffer.
Dependencies on ARB_texture_gather
If ARB_texture_gather or equivalent functionality is not supported,
queries for the TEXTURE_GATHER <pname> return the appropriate
unsupported response.
Dependecies on ARB_debug_output
If ARB_debug_output, KHR_debug or equivalent functionality is not
supported, ignore all references to debug output messages.
Dependencies on ARB_clear_buffer_object
If ARB_clear_buffer_object or equivalent functionality is not supported,
queries for the CLEAR_BUFFER <pname> return the appropriate
unsupported response. Ignore all references to ClearBufferData and
ClearBufferSubData, ClearNamedBufferDataEXT, and ClearNamedBufferSubDataEXT.
Dependencies on ARB_texture_compression_bptc
If ARB_texture_compression_bptc or equivalent functionality is not
supported, ignore all references to VIEW_CLASS_BPTC_UNORM and
VIEW_CLASS_BPTC_FLOAT.
Dependencies on ARB_texture_compression_rgtc
If ARB_texture_compression_rgtc or equivalent functionality is not
supported, ignore all references to VIEW_CLASS_RGTC1_RED and
VIEW_CLASS_RGTC2_RG.
Dependencies on ARB_ES3_compatibility
If ARB_ES3_compatibility or equivalent functionality is not supported,
ingore all references to VIEW_CLASS_EAC_R11, VIEW_CLASS_EAC_RG11,
VIEW_CLASS_ETC2_RGB, VIEW_CLASS_ETC2_RGBA, and VIEW_CLASS_ETC2_EAC_RGBA.
Dependencies on KHR_texture_compression_astc_ldr
If KHR_texture_compression_astc_ldr or equivalent functionality is not
supported, ignore all references to VIEW_CLASS_ASTC_4x4_RGBA,
VIEW_CLASS_ASTC_5x4_RGBA, VIEW_CLASS_ASTC_5x5_RGBA,
VIEW_CLASS_ASTC_6x5_RGBA, VIEW_CLASS_ASTC_6x6_RGBA,
VIEW_CLASS_ASTC_8x5_RGBA, VIEW_CLASS_ASTC_8x6_RGBA, VIEW_CLASS_ASTC_8x8_RGBA,
VIEW_CLASS_ASTC_10x5_RGBA, VIEW_CLASS_ASTC_10x6_RGBA,
VIEW_CLASS_ASTC_10x8_RGBA, VIEW_CLASS_ASTC_10x10_RGBA,
VIEW_CLASS_ASTC_12x10_RGBA, and VIEW_CLASS_ASTC_12x12_RGBA.
Dependencies on ARB_stencil_texturing
If ARB_stencil_texturing or equivalent functionality is not supported,
ignore all references to stencil texturing.
Dependencies on ARB_depth_texture and OES_depth_texture
If ARB_depth_texture, OES_depth_texture or equivalent functionality is
no supported, ignore all references to depth texturing.
Dependencies on ARB_texture_view
If ARB_texture_view or equivalent functionality is not supported,
queries for the TEXTURE_VIEW and VIEW_COMPATIBILITY_CLASS <pname> values
return the appropriate unsupported response. Ignore all references
to TextureView.
Dependencies on ARB_texture_storage
If ARB_texture_storage, EXT_texture_storage or equivalent functionality
is not supported, ignore all references to TexStorage1D, TexStorage2D,
TexStorage3D, TextureStorage1DEXT, TextureStorage2DEXT, and
TextureStorage3DEXT.
Dependencies on ARB_texture_storage_multisample
If ARB_texture_storage_multisample or equivalent functionality is not
supported, ignore all references to TexStorage2DMultisample,
TexImage3DMultisample, TextureStorage2DMultisampleEXT, and
TextureStorage3DMultisampleEXT.
Dependencies on ARB_shader_image_load_store
If ARB_shader_image_load_store or equivalent functionality is not
supported, queries for the following <pname> values:
- SHADER_IMAGE_LOAD
- SHADER_IMAGE_STORE
- SHADER_IMAGE_ATOMIC
- IMAGE_TEXEL_SIZE
- IMAGE_COMPATIBILITY_CLASS
- IMAGE_PIXEL_FORMAT
- IMAGE_PIXEL_TYPE
- IMAGE_FORMAT_COMPATIBILITY_TYPE
return the appropriate unsupported response.
Ignore all references to BindImageTexture.
Dependencies on EXT_direct_state_access
If EXT_direct_state_access or equivalent functionality is not supported,
ignore all references to:
ClearNamedBufferDataEXT, ClearNamedBufferSubDataEXT,
TextureImage1DEXT, TextureImage2DEXT, TextureImage3DEXT,
CopyTextureImage1DEXT, CopyTextureImage2DEXT,
MultiTexImage1DEXT, MultiTexImage2DEXT, MultiTexImage3DEXT,
CompressedTextureImage3DEXT, CompressedTextureImage2DEXT,
CompressedTextureImage1DEXT, CompressedMultiTexImage3DEXT,
CompressedMultiTexImage2DEXT, CompressedMultiTexImage1DEXT
TextureBufferEXT, MultiTexBufferEXT,
NamedRenderbufferStorageEXT, NamedRenderbufferStorageMultisampleEXT,
NamedRenderbufferStorageMultisampleCoverageEXT,
CopyMultiTexImage1DEXT, CopyMultiTexImage2DEXT,
TextureStorage1DEXT, TextureStorage2DEXT, TextureStorage3DEXT,
TextureStorage2DMultisampleEXT, and TextureStorage3DMultisampleEXT.
Dependencies on EXT_texture_compression_s3tc
If EXT_texture_compression_s3tc or equivalent functionality is not
supported, ignore all references to VIEW_CLASS_S3TC_DXT1_RGBA,
VIEW_CLASS_S3TC_DXT1_RGB, VIEW_CLASS_S3TC_DXT3_RGBA, and
VIEW_CLASS_S3TC_DXT5_RGBA.
Errors
The INVALID_ENUM error is generated if the <target> parameter to
GetInternalformati*v is not one of the targets listed in Table 6.xx.
The INVALID_ENUM error is generated if the <pname> parameter is
not one of the listed possibilities.
New State
None.
New Implementation Dependent State
None.
Sample Code
TBD
Conformance Tests
TBD
Issues
1) What should this extension be called?
DISCUSSION: Some options that come to mind:
ARB_internalformat_query2
ARB_internalformat_query_extended
RESOLVED: use ARB_internalformat_query2.
2) Should the <internalformat> parameter take "base internal formats" from
Table 3.11, any of the "generic" compressed formats, or any other unsized
tokens? What about allowing *any* possible value for <internalformat> so
that list of formats queryable is not tied to any particular GL version?
DISCUSSION: Tying the internalformats accepted to various tables in one
specific version of the spec makes it difficult to determine what should
be supported when this is implemented against other versions of the specs
and even worse when you consider extensions which add new formats but
which may not have updated the tables.
RESOLVED: It will be simpler and more useful to allow the query to take
any enum value for the INTERNALFORMAT_SUPPORTED <pname> and then define
the behaviour of all the other queries in terms of "supported internal
formats".
"base internal" formats, "generic compressed" formats and unsized
formats (such as RGBA or RGB_COMPRESSED) are all possible, provided the
implementation supports them for texture or image specification, and will
return appropriate information based on the internal format that the
particular implementation would map them to internally if used as such.
3 a) What if the combination of <target> and <pname> is invalid/nonsense
(e.g. any texture related query on RENDERBUFFER)?
b) What if the <target>/<pname> make sense, but the <internalformat>
does not for that <pname> (e.g. COLOR_ENCODING for non-color internal
format)?
RESOLVED. If the combinations of parameters does not make sense the
reponse best representing "not supported" or "not applicable" is returned
as defined for each <pname>.
In general:
- size- or count-based queries will return zero,
- support-, format- or type-based queries will return NONE,
- boolean-based queries will return FALSE, and
- list-based queries return no entries.
4) Should we expose a way for an implementation to describe what the
caveats might be on a particular operation?
RESOLVED. If ARB_debug_output or equivalent functionality is present
and enabled, the caveat will be written to the debug output log.
The message has the source DEBUG_SOURCE_API, the type
DEBUG_TYPE_PERFORMANCE, and an implementation-dependent ID.
5) Do layers generalize in the MAX_COMBINED_DIMENSIONS? How do cube map
faces and multisample resources work?
RESOLVED. Yes layers generalize in the MAX_COMBINED_DIMENSIONS, as do
cube map faces and multiple samples.
The calculation for cube maps is: width x height x 6.
The calculation for cube map arrays is: width x height x layers x 6.
The calculation for 2D multisample arrays is: width x height x layers x samples.
6) Is the READ_PIXELS query useful, should we replace it with
READ_PIXELS_FORMAT and READ_PIXELS_TYPE, or have all three of them?
RESOLVED. The READ_PIXELS_FORMAT and READ_PIXELS_TYPE queries have been
added. READ_PIXELS still has value because an implementation may want
to be able to report a caveat on the performance or lack of support.
7) There some <pnames> which it makes no sense to be qualified by
a per-format/target scope, how should we handle them?
e.g. MAX_WIDTH and MAX_HEIGHT might be the same for all formats.
e.g. properties like AUTO_GENERATE_MIPMAP and MANUAL_GENERATE_MIPMAP might
depend only on the GL version.
DISCUSSION:
A) Just use this entry point as is, if there are no per-format or
target differences, it is perfectly acceptable to have the implementation
return the same information for all valid parameters. This does
allow implementations to report caveats that may exist for some
formats but not others, even though all formats/targets may be supported.
B) Introduce new entry point(s) which can report on some general
properties.
RESOLVED: Option A, just the one entry point. It doesn't hurt to
give the implementation the ability to report more information.
8) In GL 4.2 MAX_TEXTURE_3D_SIZE is 2048 (2^11) so the
MAX_COMBINED_DIMENSIONS could be as high as 2^11*2^11*2^11 = 2^33.
The MAX_TEXTURE_SIZE is 16384 (2^14) and MAX_ARRAY_TEXTURE_LAYERS is
2048 (2^11) so the MAX_COMBINED_DIMENSIONS could be 2^14*2^14*2^11
= 2^39. Thus it is possible for the combined dimensions to exceed
32-bits. What should be reported in cases like this?
DISCUSSION: If the max combined size is great than 2^32, the resource
could take at least 2^32 bytes or 4GB of memory. While it is currently
unlikely that implementation would actually support resources of this
size, it is plausible that within a few years it would be possible to
exceed this with a single allocation. Possible alternatives:
A) Saturate the reported value at a max of 2^31 (since <pname> is GLint).
B) Add a 64-bit version of the query.
C) Add a HI and LO query to allow generatation of a 64-bit value.
D) Remove this query.
E) use other units? (MB)
Some other APIs have a maximum allocation size which may be 128 MB or
1/4 or the dedicated VRAM. Option A is not very appealing since it
limits the usefulness of the query when it is most needed. No interest
in Option C. Option E is undesireable since it is too granular for
lower-dimensioned resources. General consensus was either option B or D.
RESOLVED: Option B is specified as it is expected that is query will
be useful.
9) Is a MULTISAMPLE query useful?
RESOLVED: No. The same information can be obtained by querying if
NUM_SAMPLE_COUNTS and checking if it is greater than zero.
10) Is TEXTURE_SHADOW useful?
RESOLVED: Yes. While DEPTH_COMPONENTS tells you if the texture has depth
in it, some implementations may have caveats to report for shadow lookups.
For example there may be caveats that depend on the depth size, or some
hardware may not be able to do non-shadowed look ups and must emulate it
in the shader. Additionally some versions of the API do not support
shadow samplers.
11) Do we need a list of interactions with all extensions?
DISCUSSION: All pnames will always be supported, but return false/not-
supported. Interactions with specific extensions and pnames will be
noted in the interactions section.
12) We have a way to query the component sizes and types, should we have
a way to query the component orderings?
RESOLVED. No. It is unclear what value this would add, and an
implementation could already choose to expose this via the
TEXTURE_IMAGE_FORMAT and TEXTURE_IMAGE_TYPE queries.
13) What does the value returned for the MAX_COMBINED_DIMENSIONS
actually mean? Does this mean that if you try to create a texture
with more samples or texels than this it is guaranteed to fail
(possibly with OUT_OF_MEMORY)? Or is it just a recommendation that
says it might fail?
RESOLVED. This is a recommendation for applications. There are
system-dependant reasons why allocations larger than this size may
result in failures even if there might appear to be sufficient memory
available when queried via some other means. At the same time, some
systems may not have a single hard-limit on the allocation size and
it may be a combination of hardware and/or software limitations.
This value also does not a guarantee that allocations smaller than
this will succeed because it does not factor in the current available
memory. Applications should be able to reliably allocate resources
that fall under this limit, providing there is sufficient memory
available at the time of the allocation.
14) Can we add some queries for various forms of buffer support, for
example vertex attributes, element arrays or transform feedback?
Some implementations may have caveats they could report for some
formats.
RESOLVED: Deferred. While this is interesting, it is too late for
this version. It is also unclear if we could use the current
entry points which are more targetted at textures and renderbuffers
and keyed off an <internalformat>. We don't typically use an
internalformat for buffers.
15) Should we have separate values for FILTER, such as TEXTURE_MAG_FILTER
and TEXTURE_MIN_FILTER?
RESOLVED: No. The FITLER query is more about whether or not multi-texel
filtering is directly supported. We don't expect implmentations to
be able to support it for MIN filters but not for MAG, or vice versa.
16) What should we do in cases where a command is defined in terms of
GetTexLevelParameter, but GetTexLevelParameter doesn't support the target
(eg TEXTURE_BUFFER in versions of GL prior to 3.1) or there is no
corresponding pname (such as TEXTURE_STENCIL_TYPE)?
RESOLVED: GetInternalFormat* should return the correct information for the
specific query, it shouldn't be limited by the set of tokens that happen to
be legal for GetTexLevelParameter. This was just used a method of
reducing specification language duplication, and noting that the queries
are effectively the same.
Revision History
Rev. Date Author Changes
---- ---------- -------- --------------------------------------------
20 10/12/2018 dgkoch Add tokens for ETC2/EAC and ASTC VIEW_CLASSES
as interactions with ARB_ES3_compatibility
and KHR_texture_compression_astc_ldr.
19 02/14/2018 dgkoch Add issue 16, clarify references to
GetTexLevelParameter (gitlab/opengl/api/65)
18 07/15/2013 Jon Leech Remove redundant list of VIEW_CLASS_* tokens
(Bug 10518).
17 07/11/2013 Jon Leech Clarify relationship between VIEW_CLASS_*
tokens and ARB_texture_view (Bug 10518).
16 07/26/2012 dgkoch rename GENERATE_MIPMAP to MANUAL_GENERATE_MIPMAP
for clarity and restore previous token (9330)
15 07/24/2012 dgkoch Fix several token values (bug 9325)
14 07/20/2012 dgkoch Add _ARB suffix to SRGB_DECODE
13 07/17/2012 dgkoch Finish adding extension/version interactions.
SRGB_DECODE is only valid if extension supported (bug 9293).
12 07/10/2012 Jon Leech Change _BIT token names to _BITS (bug 9266).
11 06/15/2012 dgkoch Grammar fixes noticed in review (bug 9158).
10 06/11/2012 dgkoch Resolved Issue 13 and updated relevant spec language
Added Issue 14 and 15 and renamed some tokens (bug 9138)
9 06/06/2012 dgkoch renamed 64-bit query for consistency
Resolved Issue 8, and added a bit of related language.
Added Issue 13.
8 05/07/2012 dgkoch minor token renaming, misc wording improvements
started added extension interactions
7 05/05/2012 dgkoch added 64-bit entry point
allow any enum for internalformat
specify 'unsupported' responses for all queries
add errors
resolved issues as per Apr-12 F2F
added clear buffer, image and view related queries
6 04/25/2012 dgkoch remove MULTISAMPLE (redundant with NUM_SAMPLES > 0)
remove meta queries
add issues 9-11
added READ_PIXELS_FORMAT, READ_PIXELS_TYPE
added TEXTURE_IMAGE_FORMAT, TEXTURE_IMAGE_TYPE
added GET_TEXTURE_IMAGE_FORMAT, GET_TEXTURE_IMAGE_TYPE
changed ACTUAL_INTERNALFORMAT to PREFERRED_INTERNALFORMAT
added INTERNALFORMAT_x_SIZE/TYPE for
RED/GREEN/BLUE/ALPHA/DEPTH/STENCIL/SHARED
5 04/05/2012 dgkoch Update overview, issue 7.
4 04/04/2012 dgkoch Incorporate feedback from bmerry (Bug 8595)
3 01/23/2012 dgkoch Continue adding more details
2 01/23/2012 dgkoch Add more details
1 10/13/2011 dgkoch Initial draft