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 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 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 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); can be any value. The INTERNALFORMAT_SUPPORTED can be used to determine if the internal format is supported, and the other are defined in terms of whether or not the format is supported. indicates the usage of the , 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 can be used with and the corresponding usage meaning. No more than integers will be written into . If more data are available, they will be ignored and no error will be generated. indicates the information to query. The following list provides the valid values for , 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 and . If the particualar and combination do not make sense, or if a particular type of 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 queries that return information about supported type of operation in , 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 : - INTERNALFORMAT_SUPPORTED: If is an internal format that is supported by the implementation in at least some subset of possible operations, TRUE is written to . If if not a valid token for any internal format usage, FALSE is returned. 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 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 accepted by BindImageTexture, must be supported. - NUM_SAMPLE_COUNTS: The number of sample counts that would be returned by querying SAMPLES is returned in . * If is not color-renderable, depth-renderable, or stencil-renderable (as defined in section 4.4.4), or if 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 and are written into , in descending order. Only positive values are returned. * Note that querying SAMPLES with a 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 is a signed or unsigned integer format. - The value of GetIntegerv(MAX_DEPTH_TEXTURE_SAMPLES), if is a depth/stencil-renderable format and is TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY. - The value of GetIntegerv(MAX_COLOR_TEXTURE_SAMPLES), if is a color-renderable format and is TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY. - The value of GetIntegerv(MAX_SAMPLES). * If is not color-renderable, depth-renderable, or stencil-renderable (as defined in section 4.4.4), or if does not support multiple samples (ie other than TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY, or RENDERBUFFER), is not modified. - INTERNALFORMAT_PREFERRED: The implementation-preferred internal format for representing resources of the specified is returned in . The preferred internal format should have no less precision than the requested one. If the specified is already a preferred format, or is there is no better format that is compatible, the queried value is written to . If the 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 . - 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . If the internal format is unsupported or contains no stencil component, FALSE is returned. - COLOR_RENDERABLE: If is color-renderable (as defined in section 4.4.4), TRUE is returned in . If the internal format is unsupported, or the internal format is not color-renderable, FALSE is returned. - DEPTH_RENDERABLE: If is depth-renderable (as defined in section 4.4.4), TRUE is returned in . If the internal format is unsupported, or if the internal format is not depth-renderable, FALSE is returned. - STENCIL_RENDERABLE: If is stencil-renderable (as defined in section 4.4.4), TRUE is returned in . 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 . 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 . 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 . 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 . Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. If the resource is unsupported, NONE is returned. - READ_PIXELS_FORMAT: The to pass to ReadPixels to obtain the best performance and image quality when reading from framebuffers with is returned in . Possible values include any value that is legal to pass for the parameter to ReadPixels, or NONE if is not supported or can never be a valid source for ReadPixels. - READ_PIXELS_TYPE: The to pass to ReadPixels to obtain the best performance and image quality when reading from framebuffers with is returned in . Possible values include any value that is legal to pass for the 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 to pass to TexImage*D or TexSubImage*D when specifying texture image data for this resource is returned in . Possible values include any value that is legal to pass for the parameter to the Tex*Image*D commands, or NONE if the resource is not supported for this operation. - TEXTURE_IMAGE_TYPE: The implementation-preferred to pass to TexImage*D or TexSubImage*D when specifying texture image data for this resource is returned in . Possible values include any value that is legal to pass for the 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 to pass to GetTexImage when querying texture image data from this resource. Possible values include any value that is legal to pass for the 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 to pass to GetTexImage when querying texture image data from this resource. Possible values include any value that is legal to pass for the 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . In this case the is the value of the 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 . In this case the is the value of the 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 . 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 . 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 . 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 . 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 . 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 . This is equivalent to calling GetTexParameter with 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 . 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 . 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 . 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 . 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 is a compressed format that is supported for this type of resource, TRUE is returned in . 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 . 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 . 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 . 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 . 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 . 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 . 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 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 : - 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 : - 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 : - 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 : - 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 is SRGB_WRITE, ignore references to FRAMEBUFFER_SRGB. Dependencies on OpenGL 2.0 Queries involving any of the following enums for : - 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 : - 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 : - TEXTURE_CUBE_MAP_ARRAY - TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY - TEXTURE_RECTANGLE - TEXTURE_BUFFER or any of the following : - 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 return the appropriate unsupported response. Dependencies on OpenGL 4.0 Queries involving any of the following : - 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 or the following : - 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 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 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 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 , 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 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 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 and for the FRAMEBUFFER_RENDERABLE_LAYERED 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 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 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 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 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 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 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 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 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 parameter to GetInternalformati*v is not one of the targets listed in Table 6.xx. The INVALID_ENUM error is generated if the 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 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 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 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 and is invalid/nonsense (e.g. any texture related query on RENDERBUFFER)? b) What if the / make sense, but the does not for that (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 . 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 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 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 . 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