1Name 2 3 ARB_internalformat_query2 4 5Name Strings 6 7 GL_ARB_internalformat_query2 8 9Contact 10 11 Daniel Koch (dkoch 'at' nvidia 'dot' com) 12 13Contributors 14 15 Christophe Riccio, AMD 16 Bruce Merry 17 Yuan Wang, IMG 18 Pat Brown, NVIDIA 19 Piers Daniel, NVIDIA 20 Daniel Koch, TransGaming 21 Jon Leech, Khronos 22 Members of the ARB Working group. 23 24Notice 25 26 Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at 27 http://www.khronos.org/registry/speccopyright.html 28 29Specification Update Policy 30 31 Khronos-approved extension specifications are updated in response to 32 issues and bugs prioritized by the Khronos OpenGL Working Group. For 33 extensions which have been promoted to a core Specification, fixes will 34 first appear in the latest version of that core Specification, and will 35 eventually be backported to the extension document. This policy is 36 described in more detail at 37 https://www.khronos.org/registry/OpenGL/docs/update_policy.php 38 39Status 40 41 Complete. 42 Approved by the ARB on 2012/06/12. 43 44Version 45 46 Last Modified Date: October 12, 2018 47 Revision: 20 48 49Number 50 51 ARB Extension #131 52 53Dependencies 54 55 OpenGL 2.0 is required. 56 57 ARB_internalformat_query is required. 58 59 This extension is written against the OpenGL 4.2 (Core Profile) 60 Specification. 61 62 OES_texture_3D, ARB_framebuffer_object, EXT_texture_sRGB, 63 ARB_framebuffer_sRGB, ARB_texture_sRGB_decode, 64 EXT_texture_sRGB_decode, ARB_tessellation_shader, 65 ARB_geometry_shader4, ARB_compute_shader, EXT_texture_array, 66 ARB_texture_cube_map_array, ARB_texture_multisample, 67 ARB_texture_rectangle, ARB_texture_buffer_object, 68 ARB_texture_gather, ARB_debug_output, KHR_debug, 69 ARB_clear_buffer_object, ARB_texture_compression_bptc, 70 ARB_texture_compression_rgtc, ARB_stencil_texturing, 71 ARB_depth_texture, OES_depth_texture, ARB_texture_view, 72 ARB_texture_storage, ARB_texture_storage_multisample, 73 ARB_shader_image_load_store, EXT_direct_state_access, 74 EXT_texture_compression_s3tc, ARB_ES3_compatibility, 75 KHR_texture_compression_astc_ldr, and core specifications 76 that incorporate these extensions affect the definition 77 of this extension. 78 79Overview 80 81 This extension extends the GetInternalformativ query that was added in 82 the ARB_internalformat_query extension to provide applications with more 83 granular per-format capability information. 84 85 This extension allows the remainder of the texture-style targets to 86 be specified along with any possible internal format. 87 We add queries for additional properties supported for an internal 88 format in addition to the multisample-related information that was 89 added in ARB_internalformat_query. 90 91 The goals of this extension are to: 92 93 a) provide a mechanism for implementations to declare support *above* the 94 minimum required by the specification 95 96 b) provide API to allow universally constant information to be queried 97 98 c) provide a user-friendly way of finding out about version- or 99 implementation-specific limitations. 100 101 While much of this information can be determined for a single GL version 102 by careful examination of the specification, support for many of these 103 properties has been gradually introduced over a number of API 104 revisions. This can observed when considering the range in functionality 105 between the various versions of GL 2, 3, and 4, as well as GL ES 2 and 3. 106 107 In the case of an application which wishes to be scalable and able to run 108 on a variety of possible GL or GL ES versions without being specifically 109 tailored for each version, it must either have knowledge of the 110 specifications built up into either the code or tables, or it must do 111 a number of tests on startup to determine which capabilities are present. 112 113 In OpenGL, other than the course-grained extension mechanism, many 114 limitations of, or limited support for, an internalformat can only 115 be signaled by failing an operation or by operating at reduced 116 performance. Thus, such tests often involve attempts to create resources, 117 using them in specific ways and benchmarking the operations to 118 find out if it is supported in the desired form, and at a required 119 performance level. The extension provides a way for these properties 120 and caveats to be directly queried from the implementation. 121 122 This extension is NOT intended to allow implementations to only support 123 a subset of features that are required by a specific GL version, nor is 124 it intended to replace the proper use of extension checks for optional 125 functionality. 126 127IP Status 128 129 No known IP claims. 130 131New Procedures and Functions 132 133 void GetInternalformati64v(enum target, enum internalformat, 134 enum pname, sizei bufSize, int64 *params); 135 136New Types 137 138 None. 139 140New Tokens 141 142 Accepted by the <target> parameter of GetInternalformativ 143 and GetInternalformati64v: 144 145 TEXTURE_1D 0x0DE0 146 TEXTURE_1D_ARRAY 0x8C18 147 TEXTURE_2D 0x0DE1 148 TEXTURE_2D_ARRAY 0x8C1A 149 TEXTURE_3D 0x806F 150 TEXTURE_CUBE_MAP 0x8513 151 TEXTURE_CUBE_MAP_ARRAY 0x9009 152 TEXTURE_RECTANGLE 0x84F5 153 TEXTURE_BUFFER 0x8C2A 154 RENDERBUFFER 0x8D41 155 TEXTURE_2D_MULTISAMPLE 0x9100 156 TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 157 158 Accepted by the <pname> parameter of GetInternalformativ 159 and GetInternalformati64v: 160 161 SAMPLES 0x80A9 162 NUM_SAMPLE_COUNTS 0x9380 163 INTERNALFORMAT_SUPPORTED 0x826F 164 INTERNALFORMAT_PREFERRED 0x8270 165 INTERNALFORMAT_RED_SIZE 0x8271 166 INTERNALFORMAT_GREEN_SIZE 0x8272 167 INTERNALFORMAT_BLUE_SIZE 0x8273 168 INTERNALFORMAT_ALPHA_SIZE 0x8274 169 INTERNALFORMAT_DEPTH_SIZE 0x8275 170 INTERNALFORMAT_STENCIL_SIZE 0x8276 171 INTERNALFORMAT_SHARED_SIZE 0x8277 172 INTERNALFORMAT_RED_TYPE 0x8278 173 INTERNALFORMAT_GREEN_TYPE 0x8279 174 INTERNALFORMAT_BLUE_TYPE 0x827A 175 INTERNALFORMAT_ALPHA_TYPE 0x827B 176 INTERNALFORMAT_DEPTH_TYPE 0x827C 177 INTERNALFORMAT_STENCIL_TYPE 0x827D 178 MAX_WIDTH 0x827E 179 MAX_HEIGHT 0x827F 180 MAX_DEPTH 0x8280 181 MAX_LAYERS 0x8281 182 MAX_COMBINED_DIMENSIONS 0x8282 183 COLOR_COMPONENTS 0x8283 184 DEPTH_COMPONENTS 0x8284 185 STENCIL_COMPONENTS 0x8285 186 COLOR_RENDERABLE 0x8286 187 DEPTH_RENDERABLE 0x8287 188 STENCIL_RENDERABLE 0x8288 189 FRAMEBUFFER_RENDERABLE 0x8289 190 FRAMEBUFFER_RENDERABLE_LAYERED 0x828A 191 FRAMEBUFFER_BLEND 0x828B 192 READ_PIXELS 0x828C 193 READ_PIXELS_FORMAT 0x828D 194 READ_PIXELS_TYPE 0x828E 195 TEXTURE_IMAGE_FORMAT 0x828F 196 TEXTURE_IMAGE_TYPE 0x8290 197 GET_TEXTURE_IMAGE_FORMAT 0x8291 198 GET_TEXTURE_IMAGE_TYPE 0x8292 199 MIPMAP 0x8293 200 MANUAL_GENERATE_MIPMAP 0x8294 201 AUTO_GENERATE_MIPMAP 0x8295 202 COLOR_ENCODING 0x8296 203 SRGB_READ 0x8297 204 SRGB_WRITE 0x8298 205 SRGB_DECODE_ARB 0x8299 206 FILTER 0x829A 207 VERTEX_TEXTURE 0x829B 208 TESS_CONTROL_TEXTURE 0x829C 209 TESS_EVALUATION_TEXTURE 0x829D 210 GEOMETRY_TEXTURE 0x829E 211 FRAGMENT_TEXTURE 0x829F 212 COMPUTE_TEXTURE 0x82A0 213 TEXTURE_SHADOW 0x82A1 214 TEXTURE_GATHER 0x82A2 215 TEXTURE_GATHER_SHADOW 0x82A3 216 SHADER_IMAGE_LOAD 0x82A4 217 SHADER_IMAGE_STORE 0x82A5 218 SHADER_IMAGE_ATOMIC 0x82A6 219 IMAGE_TEXEL_SIZE 0x82A7 220 IMAGE_COMPATIBILITY_CLASS 0x82A8 221 IMAGE_PIXEL_FORMAT 0x82A9 222 IMAGE_PIXEL_TYPE 0x82AA 223 IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 224 SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC 225 SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD 226 SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE 227 SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF 228 TEXTURE_COMPRESSED 0x86A1 229 TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 230 TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 231 TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 232 CLEAR_BUFFER 0x82B4 233 TEXTURE_VIEW 0x82B5 234 VIEW_COMPATIBILITY_CLASS 0x82B6 235 236 Returned as possible responses for various <pname> queries 237 to GetInternalformativ and GetInternalformati64v 238 FULL_SUPPORT 0x82B7 239 CAVEAT_SUPPORT 0x82B8 240 IMAGE_CLASS_4_X_32 0x82B9 241 IMAGE_CLASS_2_X_32 0x82BA 242 IMAGE_CLASS_1_X_32 0x82BB 243 IMAGE_CLASS_4_X_16 0x82BC 244 IMAGE_CLASS_2_X_16 0x82BD 245 IMAGE_CLASS_1_X_16 0x82BE 246 IMAGE_CLASS_4_X_8 0x82BF 247 IMAGE_CLASS_2_X_8 0x82C0 248 IMAGE_CLASS_1_X_8 0x82C1 249 IMAGE_CLASS_11_11_10 0x82C2 250 IMAGE_CLASS_10_10_10_2 0x82C3 251 VIEW_CLASS_128_BITS 0x82C4 252 VIEW_CLASS_96_BITS 0x82C5 253 VIEW_CLASS_64_BITS 0x82C6 254 VIEW_CLASS_48_BITS 0x82C7 255 VIEW_CLASS_32_BITS 0x82C8 256 VIEW_CLASS_24_BITS 0x82C9 257 VIEW_CLASS_16_BITS 0x82CA 258 VIEW_CLASS_8_BITS 0x82CB 259 VIEW_CLASS_S3TC_DXT1_RGB 0x82CC 260 VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD 261 VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE 262 VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF 263 VIEW_CLASS_RGTC1_RED 0x82D0 264 VIEW_CLASS_RGTC2_RG 0x82D1 265 VIEW_CLASS_BPTC_UNORM 0x82D2 266 VIEW_CLASS_BPTC_FLOAT 0x82D3 267 [interactions with ARB_ES3_compatibility] 268 VIEW_CLASS_EAC_R11 0x9383 269 VIEW_CLASS_EAC_RG11 0x9384 270 VIEW_CLASS_ETC2_RGB 0x9385 271 VIEW_CLASS_ETC2_RGBA 0x9386 272 VIEW_CLASS_ETC2_EAC_RGBA 0x9387 273 [interactions with KHR_texture_compression_astc_ldr] 274 VIEW_CLASS_ASTC_4x4_RGBA 0x9388 275 VIEW_CLASS_ASTC_5x4_RGBA 0x9389 276 VIEW_CLASS_ASTC_5x5_RGBA 0x938A 277 VIEW_CLASS_ASTC_6x5_RGBA 0x938B 278 VIEW_CLASS_ASTC_6x6_RGBA 0x938C 279 VIEW_CLASS_ASTC_8x5_RGBA 0x938D 280 VIEW_CLASS_ASTC_8x6_RGBA 0x938E 281 VIEW_CLASS_ASTC_8x8_RGBA 0x938F 282 VIEW_CLASS_ASTC_10x5_RGBA 0x9390 283 VIEW_CLASS_ASTC_10x6_RGBA 0x9391 284 VIEW_CLASS_ASTC_10x8_RGBA 0x9392 285 VIEW_CLASS_ASTC_10x10_RGBA 0x9393 286 VIEW_CLASS_ASTC_12x10_RGBA 0x9394 287 VIEW_CLASS_ASTC_12x12_RGBA 0x9395 288 289 290Additions to Chapter 2 of the OpenGL 4.2 (Core Profile) Specification 291(OpenGL Operation) 292 293 None. 294 295Additions to Chapter 3 of the OpenGL 4.2 (Core Profile) Specification 296(Rasterization) 297 298 None. 299 300Additions to Chapter 4 of the OpenGL 4.2 (Core Profile) Specification 301(Per-Fragment Operations and the Frame Buffer) 302 303 None. 304 305Additions to Chapter 5 of the OpenGL 4.2 (Compatibility Profile) 306Specification (Special Functions) 307 308 None. 309 310Additions to Chapter 6 of the OpenGL 4.2 (Core Profile) Specification 311(State and State Requests) 312 313 Replace Section 6.1.15 "Internal Format Queries" with the following: 314 315 "Information about implementation-dependent support for internal formats 316 can be queried with the commands 317 318 void GetInternalformativ(enum target, enum internalformat, 319 enum pname, sizei bufSize, int *params); 320 void GetInternalformati64v(enum target, enum internalformat, 321 enum pname, sizei bufSize, int64 *params); 322 323 <internalformat> can be any value. The INTERNALFORMAT_SUPPORTED <pname> 324 can be used to determine if the internal format is supported, and the 325 other <pnames> are defined in terms of whether or not the format is 326 supported. 327 328 <target> indicates the usage of the <internalformat>, and must be one of 329 the targets listed in Table 6.xx, otherwise the INVALID_ENUM error is 330 generated. 331 332 Target Usage 333 ----------------- ------ 334 TEXTURE_1D 1D texture 335 TEXTURE_1D_ARRAY 1D array texture 336 TEXTURE_2D 2D texture 337 TEXTURE_2D_ARRAY 2D array texture 338 TEXTURE_2D_MULTISAMPLE 2D multisample texture 339 TEXTURE_2D_MULTISAMPLE_ARRAY 2D multisample array texture 340 TEXTURE_3D 3D texture 341 TEXTURE_BUFFER buffer texture 342 TEXTURE_CUBE_MAP cube map texture 343 TEXTURE_CUBE_MAP_ARRAY cube map array texture 344 TEXTURE_RECTANGLE rectangle texture 345 RENDERBUFFER renderbuffer 346 347 Table 6.xx: Possible targets that <internalformat> can be used with 348 and the corresponding usage meaning. 349 350 No more than <bufSize> integers will be written into <params>. If 351 more data are available, they will be ignored and no error will be 352 generated. 353 354 <pname> indicates the information to query. The following list provides 355 the valid values for <pname>, defines the meaning and the possible 356 responses. In the following descriptions, the term /resource/ is used 357 to generically refer to an object of the appropriate type that has 358 been created with <internalformat> and <target>. If the particualar 359 <target> and <internalformat> combination do not make sense, or if 360 a particular type of <target> is not supported by the implementation 361 the "unsupported" answer should be given. This is not an error. 362 363 All properties can be queried via either GetInternalformat* command. 364 Data conversions are done as defined in section 6.1.2. 365 366 For <pname> queries that return information about supported type of 367 operation in <params>, they have the following meanings: 368 369 - NONE: the requested capability is not supported at all by the 370 implementation. 371 372 - CAVEAT_SUPPORT: the requested capability is supported by the 373 implementation, but there may be some implementation-specific 374 caveats that make support less than optimal. For example using 375 the feature may result in reduced performance (relative to other 376 formats or features), such as software rendering or other mechanisms 377 of emulating the desired feature. 378 379 If a query reports that there is a caveat and the debug output 380 functionality is enabled (see section 5.5 or ARB_debug_output), 381 the GL will generate a debug output message describing the caveat. 382 The message has the source DEBUG_SOURCE_API, the type 383 DEBUG_TYPE_PERFORMANCE, and an implementation-dependent ID. 384 385 - FULL_SUPPORT: the requested capability is fully supported by the 386 implementation. 387 388 The following are the supported values for <pname>: 389 390 - INTERNALFORMAT_SUPPORTED: If <internalformat> is an internal format 391 that is supported by the implementation in at least some subset of 392 possible operations, TRUE is written to <params>. If <internalformat> 393 if not a valid token for any internal format usage, FALSE is returned. 394 395 <internalformats> that must be supported (in GL 4.2 or later) include 396 the following: 397 - "sized internal formats" from Table 3.12, 3.13, and 3.15, 398 - any specific "compressed internal format" from Table 3.14, 399 - any "image unit format" from Table 3.21. 400 - any generic "compressed internal format" from Table 3.14, if the 401 implementation accepts it for any texture specification commands, and 402 - unsized or base internal format, if the implementation accepts 403 it for texture or image specification. 404 405 In other words, any <internalformat> accepted by any of the commands: 406 ClearBufferData, ClearBufferSubData, 407 CompressedTexImage1D, CompressedTexImage2D, CompressedTexImage3D, 408 CopyTexImage1D, CopyTexImage2D, 409 RenderbufferStorage, RenderbufferStorageMultisample, 410 TexBuffer, 411 TexImage1D, TexImage2D, TexImage3D, 412 TexImage2DMultisample, TexImage3DMultisample, 413 TexStorage1D, TexStorage2D, TexStorage3D, 414 TexStorage2DMultisample, TexStorage3DMultisample 415 TextureView, 416 ClearNamedBufferDataEXT, ClearNamedBufferSubDataEXT, 417 TextureImage1DEXT, TextureImage2DEXT, TextureImage3DEXT 418 CopyTextureImage1DEXT, CopyTextureImage2DEXT, 419 MultiTexImage1DEXT, MultiTexImage2DEXT, MultiTexImage3DEXT 420 CompressedTextureImage3DEXT, CompressedTextureImage2DEXT, CompressedTextureImage1DEXT, 421 CompressedMultiTexImage3DEXT, CompressedMultiTexImage2DEXT, CompressedMultiTexImage1DEXT 422 TextureBufferEXT, MultiTexBufferEXT, 423 NamedRenderbufferStorageEXT, NamedRenderbufferStorageMultisampleEXT, 424 NamedRenderbufferStorageMultisampleCoverageEXT, 425 CopyMultiTexImage1DEXT, CopyMultiTexImage2DEXT, 426 TextureStorage1DEXT, TextureStorage2DEXT, TextureStorage3DEXT, 427 TextureStorage2DMultisampleEXT, TextureStorage3DMultisampleEXT, and 428 any valid <format> accepted by BindImageTexture, must be supported. 429 430 - NUM_SAMPLE_COUNTS: The number of sample counts that would be 431 returned by querying SAMPLES is returned in <params>. 432 * If <internalformat> is not color-renderable, depth-renderable, or 433 stencil-renderable (as defined in section 4.4.4), or if <target> 434 does not support multiple samples (ie other than TEXTURE_2D_MULTISAMPLE, 435 TEXTURE_2D_MULTISAMPLE_ARRAY, or RENDERBUFFER), 0 is returned. 436 437 - SAMPLES: The sample counts supported for this <internalformat> and 438 <target> are written into <params>, in descending order. Only 439 positive values are returned. 440 * Note that querying SAMPLES with a <bufSize> of 1 will return just 441 the maximum supported number of samples for this format. 442 * The maximum value in SAMPLES is guaranteed to be at least the lowest 443 of the following: 444 - The value of GetIntegerv(MAX_INTEGER_SAMPLES), if <internalformat> 445 is a signed or unsigned integer format. 446 - The value of GetIntegerv(MAX_DEPTH_TEXTURE_SAMPLES), if 447 <internalformat> is a depth/stencil-renderable format and <target> 448 is TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY. 449 - The value of GetIntegerv(MAX_COLOR_TEXTURE_SAMPLES), if 450 <internalformat> is a color-renderable format and <target> is 451 TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY. 452 - The value of GetIntegerv(MAX_SAMPLES). 453 * If <internalformat> is not color-renderable, depth-renderable, or 454 stencil-renderable (as defined in section 4.4.4), or if <target> 455 does not support multiple samples (ie other than TEXTURE_2D_MULTISAMPLE, 456 TEXTURE_2D_MULTISAMPLE_ARRAY, or RENDERBUFFER), <params> is not 457 modified. 458 459 - INTERNALFORMAT_PREFERRED: The implementation-preferred internal format 460 for representing resources of the specified <internalformat> is returned 461 in <params>. The preferred internal format should have no less precision 462 than the requested one. If the specified <internalformat> is already 463 a preferred format, or is there is no better format that is compatible, 464 the queried <internalformat> value is written to <params>. If the 465 <internalformat> is not supported, NONE is returned. 466 467 - INTERNALFORMAT_RED_SIZE 468 - INTERNALFORMAT_GREEN_SIZE 469 - INTERNALFORMAT_BLUE_SIZE 470 - INTERNALFORMAT_ALPHA_SIZE 471 - INTERNALFORMAT_DEPTH_SIZE 472 - INTERNALFORMAT_STENCIL_SIZE 473 - INTERNALFORMAT_SHARED_SIZE 474 For uncompressed internal formats, queries of these values return the 475 actual resolutions that would be used for storing image array components 476 for the resource. 477 For compressed internal formats, the resolutions returned specify the 478 component resolution of an uncompressed internal format that produces 479 an image of roughly the same quality as the compressed algorithm. 480 For textures this query will return the same information as querying 481 GetTexLevelParameter{if}v for TEXTURE_*_SIZE would return (except in 482 such cases where GetTexLevelParameter{if}v doesn't support such a query). 483 If the internal format is unsupported, or if a particular component is 484 not present in the format, 0 is written to <params>. 485 486 - INTERNALFORMAT_RED_TYPE 487 - INTERNALFORMAT_GREEN_TYPE 488 - INTERNALFORMAT_BLUE_TYPE 489 - INTERNALFORMAT_ALPHA_TYPE 490 - INTERNALFORMAT_DEPTH_TYPE 491 - INTERNALFORMAT_STENCIL_TYPE 492 For uncompressed internal formats, queries for these values return the 493 data type used to store the component. 494 For compressed internal formats the types returned specify how components 495 are interpreted after decompression. 496 For textures this query returns the same information as querying 497 GetTexLevelParameter{if}v for TEXTURE_*_TYPE would return (except in 498 such cases where GetTexLevelParameter{if}v doesn't support such a 499 query). Possible values return include, NONE, SIGNED_NORMALIZED, 500 UNSIGNED_NORMALIZED, FLOAT, INT, UNSIGNED_INT, representing missing, 501 signed normalized fixed point, unsigned normalized fixed point, 502 floating-point, signed unnormalized integer and unsigned unnormalized 503 integer components. NONE is returned for all component types if the 504 format is unsupported. 505 506 - MAX_WIDTH: The maximum supported width for the resource is returned in 507 <params>. For resources with only one-dimension, this one dimension is 508 considered the width. If the resource is unsupported, zero is returned. 509 510 - MAX_HEIGHT: The maximum supported height for the resource is returned in 511 <params>. For resources with two or more dimensions, the second dimension 512 is considered the height. If the resource does not have at least two 513 dimensions, or if the resource is unsupported, zero is returned. 514 515 - MAX_DEPTH: The maximum supported depth for the resource is returned in 516 <params>. For resources with three or more dimensions, the third 517 dimension is considered the depth. If the resource does not have at least 518 three dimensions, or if the resource is unsupported, zero is returned. 519 520 - MAX_LAYERS: The maximum supported number of layers for the resource is 521 returned in <params>. For 1D array targets, the value returned is the 522 same as the MAX_HEIGHT. For 2D and cube array targets, the value returned 523 is the same as the MAX_DEPTH. If the resource does not support layers, 524 or if the resource is unsupported, zero is returned. 525 526 - MAX_COMBINED_DIMENSIONS: The maximum combined dimensions for the resource 527 is returned in <params>. The combined dimensions is the product of the 528 individual dimensions of the resource. For multisampled surfaces the 529 number of samples is considered an additional dimension. Note that the 530 value returned can be >= 2^32 and should be queried with the 64-bit query. 531 This value should be considered a recommendations for applications. There 532 may be system-dependant reasons why allocations larger than this size may 533 fail, even if there might appear to be sufficient memory available when 534 queried via some other means. This also does not provide a guarantee that 535 allocations smaller than this will succeed because this value is not 536 affected by existing resource allocations. 537 For 1D targets this is the maximum single dimension. 538 For 1D array targets this is the maximum combined width and layers. 539 For 2D targets this is the maximum combined width and height. 540 For 2D multisample targets this is the combined width, height and samples. 541 For 2D array targets this is the max combined width, height and layers. 542 For 2D multisample array targets, this is the max combined width, height, 543 layers and samples. 544 For 3D targets this is the maximum combined width, height and depth. 545 For cube map targets this is the maximum combined width, height and 546 faces. 547 For cube map array targets this is the maximum width, height and 548 layer-faces. 549 If the resource is unsupported, zero is returned. 550 551 - COLOR_COMPONENTS: If the internal format contains any color components 552 (R, G, B, or A), TRUE is returned in <params>. If the internal format is 553 unsupported or contains no color components, FALSE is returned. 554 555 - DEPTH_COMPONENTS: If the internal format contains a depth component (D), 556 TRUE is returned in <params>. If the internal format is unsupported or 557 contains no depth component, FALSE is returned. 558 559 - STENCIL_COMPONENTS: If the internal format contains a stencil component 560 (S), TRUE is returned in <params>. If the internal format is unsupported 561 or contains no stencil component, FALSE is returned. 562 563 - COLOR_RENDERABLE: If <internalformat> is color-renderable (as defined in 564 section 4.4.4), TRUE is returned in <params>. If the internal format is 565 unsupported, or the internal format is not color-renderable, FALSE 566 is returned. 567 568 - DEPTH_RENDERABLE: If <internalformat> is depth-renderable (as defined in 569 section 4.4.4), TRUE is returned in <params>. If the internal format is 570 unsupported, or if the internal format is not depth-renderable, FALSE 571 is returned. 572 573 - STENCIL_RENDERABLE: If <internalformat> is stencil-renderable (as 574 defined in section 4.4.4), TRUE is returned in <params>. If the internal 575 format is unsupported, or if the internal format is not stencil- 576 renderable, FALSE is returned. 577 578 - FRAMEBUFFER_RENDERABLE: The support for rendering to the resource via 579 framebuffer attachment is returned in <params>. 580 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 581 If the resource is unsupported, NONE is returned. 582 583 - FRAMEBUFFER_RENDERABLE_LAYERED: The support for layered rendering to 584 the resource via framebuffer attachment is returned in <params>. 585 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 586 If the resource is unsupported, NONE is returned. 587 588 - FRAMEBUFFER_BLEND: The support for rendering to the resource 589 via framebuffer attachment when blending is enabled is returned in 590 <params>. 591 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 592 If the resource is unsupported, NONE is returned. 593 594 - READ_PIXELS: The support for reading pixels from the resource when it is 595 attached to a framebuffer is returned in <params>. 596 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 597 If the resource is unsupported, NONE is returned. 598 599 - READ_PIXELS_FORMAT: The <format> to pass to ReadPixels to obtain the best 600 performance and image quality when reading from framebuffers with 601 <internalformat> is returned in <params>. 602 Possible values include any value that is legal to pass for the <format> 603 parameter to ReadPixels, or NONE if <internalformat> is not supported 604 or can never be a valid source for ReadPixels. 605 606 - READ_PIXELS_TYPE: The <type> to pass to ReadPixels to obtain the best 607 performance and image quality when reading from framebuffers with 608 <internalformat> is returned in <params>. 609 Possible values include any value that is legal to pass for the <type> 610 parameter to ReadPixels, or NONE if the internal format is not supported 611 or can never be a source for ReadPixels. 612 613 - TEXTURE_IMAGE_FORMAT: The implementation-preferred <format> to pass to 614 TexImage*D or TexSubImage*D when specifying texture image data for 615 this resource is returned in <params>. 616 Possible values include any value that is legal to pass for the <format> 617 parameter to the Tex*Image*D commands, or NONE if the resource is 618 not supported for this operation. 619 620 - TEXTURE_IMAGE_TYPE: The implementation-preferred <type> to pass to 621 TexImage*D or TexSubImage*D when specifying texture image data for 622 this resource is returned in <params>. 623 Possible values include any value that is legal to pass for the <type> 624 parameter to the Tex*Image*D commands, or NONE if the resource is 625 not supported for this operation. 626 627 - GET_TEXTURE_IMAGE_FORMAT: The implementation-preferred <format> to pass to 628 GetTexImage when querying texture image data from this resource. 629 Possible values include any value that is legal to pass for the <format> 630 parameter to GetTexImage, or NONE if the resource does not support 631 this operation, or if GetTexImage is not supported. 632 633 - GET_TEXTURE_IMAGE_TYPE: The implementation-preferred <type> to pass to 634 GetTexImage when querying texture image data from this resource. 635 Possible values include any value that is legal to pass for the <type> 636 parameter to GetTexImage, or NONE if the resource does not support 637 this operation, or if GetTexImage is not supported. 638 639 - MIPMAP: If the resource supports mipmaps, TRUE is returned in <params>. 640 If the resource is not supported, or if mipmaps are not supported for 641 this type of resource, FALSE is returned. 642 643 - MANUAL_GENERATE_MIPMAP: The support for manually generating mipmaps for 644 the resource is returned in <params>. 645 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 646 If the resource is not supported, or if the operation is not supported, 647 NONE is returned. 648 649 - AUTO_GENERATE_MIPMAP: The support for automatic generation of mipmaps 650 for the resource is returned in <params>. 651 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 652 If the resource is not supported, or if the operation is not supported, 653 NONE is returned. 654 655 - COLOR_ENCODING: The color encoding for the resource is returned in 656 <params>. Possible values for color buffers are LINEAR or SRGB, 657 for linear or sRGB-encoded color components, respectively. For non-color 658 formats (such as depth or stencil), or for unsupported resources, 659 the value NONE is returned. 660 661 - SRGB_READ: The support for converting from sRGB colorspace on read 662 operations (see section 3.9.18) from the resource is returned in 663 <params>. 664 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 665 If the resource or operation is not supported, NONE is returned. 666 667 - SRGB_WRITE: The support for converting to sRGB colorspace on write 668 operations to the resource is returned in <params>. 669 This indicates that writing to framebuffers with this internalformat 670 will encode to sRGB color spaces when FRAMEBUFFER_SRGB is enabled (see 671 section 4.1.8). 672 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 673 If the resource or operation is not supported, NONE is returned. 674 675 - SRGB_DECODE_ARB: The support for toggling whether sRGB decode happens at 676 sampling time (see EXT/ARB_texture_sRGB_decode) for the resource is 677 returned in <params>. 678 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 679 If the resource or operation is not supported, NONE is returned. 680 681 - FILTER: The support for filter types other than NEAREST or 682 NEAREST_MIPMAP_NEAREST for the resource is written to <params>. 683 This indicates if sampling from such resources supports setting the 684 MIN/MAG filters to LINEAR values. 685 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 686 If the resource or operation is not supported, NONE is returned. 687 688 - VERTEX_TEXTURE: The support for using the resource as a source for 689 texture sampling in a vertex shader is written to <params>. 690 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 691 If the resource or operation is not supported, NONE is returned. 692 693 - TESS_CONTROL_TEXTURE: The support for using the resource as a source for 694 texture sampling in a tessellation control shader is written to <params>. 695 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 696 If the resource or operation is not supported, NONE is returned. 697 698 - TESS_EVALUATION_TEXTURE: The support for using the resource as a source 699 for texture sampling in a tessellation evaluation shader is written to 700 <params>. 701 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 702 If the resource or operation is not supported, NONE is returned. 703 704 - GEOMETRY_TEXTURE: The support for using the resource as a source for 705 texture sampling in a geometry shader is written to <params>. 706 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 707 If the resource or operation is not supported, NONE is returned. 708 709 - FRAGMENT_TEXTURE: The support for using the resource as a source for 710 texture sampling in a fragment shader is written to <params>. 711 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 712 If the resource or operation is not supported, NONE is returned. 713 714 - COMPUTE_TEXTURE: The support for using the resource as a source for 715 texture sampling in a compute shader is written to <params>. 716 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 717 If the resource or operation is not supported, NONE is returned. 718 719 - TEXTURE_SHADOW: The support for using the resource with shadow samplers 720 is written to <params>. 721 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 722 If the resource or operation is not supported, NONE is returned. 723 724 - TEXTURE_GATHER: The support for using the resource with texture gather 725 operations is written to <params>. 726 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 727 If the resource or operation is not supported, NONE is returned. 728 729 - TEXTURE_GATHER_SHADOW: The support for using resource with texture gather 730 operations with shadow samplers is written to <params>. 731 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 732 If the resource or operation is not supported, NONE is returned. 733 734 - SHADER_IMAGE_LOAD: The support for using the resource with image load 735 operations in shaders is written to <params>. 736 In this case the <internalformat> is the value of the <format> parameter 737 that would be passed to BindImageTexture. 738 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 739 If the resource or operation is not supported, NONE is returned. 740 741 - SHADER_IMAGE_STORE: The support for using the resource with image store 742 operations in shaders is written to <params>. 743 In this case the <internalformat> is the value of the <format> parameter 744 that is passed to BindImageTexture. 745 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 746 If the resource or operation is not supported, NONE is returned. 747 748 - SHADER_IMAGE_ATOMIC: The support for using the resource with atomic 749 memory operations from shaders is written to <params>. 750 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 751 If the resource or operation is not supported, NONE is returned. 752 753 - IMAGE_TEXEL_SIZE: The size of a texel when the resource when used as 754 an image texture is returned in <params>. This is the value from the 755 /Size/ column in Table 3.22. If the resource is not supported for image 756 textures, or if image textures are not supported, zero is returned. 757 758 - IMAGE_COMPATIBILITY_CLASS: The compatibility class of the resource when 759 used as an image texture is returned in <params>. This corresponds to 760 the value from the /Class/ column in Table 3.22. The possible values 761 returned are IMAGE_CLASS_4_X_32, IMAGE_CLASS_2_X_32, IMAGE_CLASS_1_X_32, 762 IMAGE_CLASS_4_X_16, IMAGE_CLASS_2_X_16, IMAGE_CLASS_1_X_16, 763 IMAGE_CLASS_4_X_8, IMAGE_CLASS_2_X_8, IMAGE_CLASS_1_X_8, 764 IMAGE_CLASS_11_11_10, and IMAGE_CLASS_10_10_10_2, which correspond to 765 the 4x32, 2x32, 1x32, 4x16, 2x16, 1x16, 4x8, 2x8, 1x8, the class 766 (a) 11/11/10 packed floating-point format, and the class (b) 767 10/10/10/2 packed formats, respectively. 768 If the resource is not supported for image textures, or if image 769 textures are not supported, NONE is returned. 770 771 - IMAGE_PIXEL_FORMAT: The pixel format of the resource when used as an 772 image texture is returned in <params>. This is the value 773 from the /Pixel format/ column in Table 3.22. If the resource is not 774 supported for image textures, or if image textures are not supported, 775 NONE is returned. 776 777 - IMAGE_PIXEL_TYPE: The pixel type of the resource when used as an 778 image texture is returned in <params>. This is the value from 779 the /Pixel type/ column in Table 3.22. If the resource is not supported 780 for image textures, or if image textures are not supported, NONE is 781 returned. 782 783 - IMAGE_FORMAT_COMPATIBILITY_TYPE: The matching criteria use for the 784 resource when used as an image textures is returned in <params>. This 785 is equivalent to calling GetTexParameter with <value> set to 786 IMAGE_FORMAT_COMPATIBILITY_TYPE. Possible values are 787 IMAGE_FORMAT_COMPATIBILITY_BY_SIZE or IMAGE_FORMAT_COMPATIBILITY_BY_CLASS. 788 If the resource is not supported for image textures, or if image textures 789 are not supported, NONE is returned. 790 791 - SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: The support for using the resource 792 both as a source for texture sampling while it is bound as a buffer for 793 depth test is written to <params>. For example, a depth (or stencil) 794 texture could be bound simultaneously for texturing while it is bound as 795 a depth (and/or stencil) buffer without causing a feedback loop, provided 796 that depth writes are disabled. 797 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 798 If the resource or operation is not supported, NONE is returned. 799 800 - SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: The support for using the resource 801 both as a source for texture sampling while it is bound as a buffer for 802 stencil test is written to <params>. For example, a depth (or stencil) 803 texture could be bound simultaneously for texturing while it is bound as 804 a depth (and/or stencil) buffer without causing a feedback loop, 805 provided that stencil writes are disabled. 806 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 807 If the resource or operation is not supported, NONE is returned. 808 809 - SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: The support for using the resource 810 both as a source for texture sampling while performing depth writes to 811 the resources is written to <params>. For example, a depth-stencil 812 texture could be bound simultaneously for stencil texturing while it 813 is bound as a depth buffer. Feedback loops cannot occur because sampling 814 a stencil texture only returns the stencil portion, and thus writes to 815 the depth buffer do not modify the stencil portions. 816 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 817 If the resource or operation is not supported, NONE is returned. 818 819 - SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: The support for using the resource 820 both as a source for texture sampling while performing stencil writes to 821 the resources is written to <params>. For example, a depth-stencil 822 texture could be bound simultaneously for depth-texturing while it is 823 bound as a stencil buffer. Feedback loops cannot occur because sampling 824 a depth texture only returns the depth portion, and thus writes to 825 the stencil buffer could not modify the depth portions. 826 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 827 If the resource or operation is not supported, NONE is returned. 828 829 - TEXTURE_COMPRESSED: If <internalformat> is a compressed format 830 that is supported for this type of resource, TRUE is returned in 831 <params>. If the internal format is not compressed, or the type of 832 resource is not supported, FALSE is returned. 833 834 - TEXTURE_COMPRESSED_BLOCK_WIDTH: If the resource contains a compressed 835 format, the width of a compressed block (in bytes) is returned in 836 <params>. If the internal format is not compressed, or the resource 837 is not supported, 0 is returned. 838 839 - TEXTURE_COMPRESSED_BLOCK_HEIGHT: If the resource contains a compressed 840 format, the height of a compressed block (in bytes) is returned in 841 <params>. If the internal format is not compressed, or the resource 842 is not supported, 0 is returned. 843 844 - TEXTURE_COMPRESSED_BLOCK_SIZE: If the resource contains a compressed 845 format the number of bytes per block is returned in <params>. If the 846 internal format is not compressed, or the resource is not supported, 847 0 is returned. 848 (combined with the above, allows the bitrate to be computed, and may be 849 useful in conjunction with ARB_compressed_texture_pixel_storage). 850 851 - CLEAR_BUFFER: The support for using the resource with ClearBuffer*Data 852 commands is returned in <params>. 853 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 854 If the resource or operation is not supported, NONE is returned. 855 856 - TEXTURE_VIEW: The support for using the resource with the TextureView 857 command is returned in <params>. 858 Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE. 859 If the resource or operation is not supported, NONE is returned. 860 861 - VIEW_COMPATIBILITY_CLASS: The compatibility class of the resource when 862 used as a texture view is returned in <params>. The compatibility 863 class is one of the values from the /Class/ column of Table 3.X.2 864 (added by the ARB_texture_view extension). If 865 the resource has no other formats that are compatible, the resource 866 does not support views, or if texture views are not supported, NONE is 867 returned. 868 869 If <pname> is not one of the preceeding names, the error INVALID_ENUM 870 is generated." 871 872Additions to Appendix A of the OpenGL 4.2 (Core Profile) Specification 873(Invariance) 874 875 None. 876 877Additions to Appendix D of the OpenGL 4.2 (Core Profile) Specification 878(Shared Objects and Multiple Contexts) 879 880 None. 881 882GLX Protocol 883 884 XXX - TODO. 885 886Dependencies on OpenGL ES 2.0 887 Queries involving any of the following enums for <target>: 888 - TEXTURE_1D 889 - TEXTURE_3D 890 - TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY 891 - TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY 892 - TEXTURE_RECTANGLE 893 - TEXTURE_BUFFER 894 or any of the following <pnames>: 895 - GET_TEXTURE_IMAGE_FORMAT, GET_TEXTURE_IMAGE_TYPE 896 - MAX_LAYERS 897 - FRAMEBUFFER_RENDERABLE_LAYERED 898 - AUTO_GENERATE_MIPMAP 899 - SRGB_READ, SRGB_WRITE 900 - TESS_CONTROL_TEXTURE, TESS_EVALUATION_TEXTURE 901 - GEOMETRY_TEXTURE 902 - COMPUTE_TEXTURE 903 - TEXTURE_SHADOW, TEXTURE_GATHER, TEXTURE_GATHER_SHADOW 904 - SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC 905 - IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE 906 - IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE 907 - CLEAR_BUFFER 908 - TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS 909 return the appropriate "unsupported" response. 910 Queries for unsupported features/targets do NOT set errors. 911 912Dependencies on OES_texture_3D 913 - adds support for TEXTURE_3D targets in OpenGL ES 2.0 implementations. 914 915Dependencies on OpenGL ES 3.0 916 Queries involving any of the following enums for <target>: 917 - TEXTURE_1D 918 - TEXTURE_1D_ARRAY, TEXTURE_CUBE_MAP_ARRAY 919 - TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY 920 - TEXTURE_RECTANGLE 921 - TEXTURE_BUFFER 922 or any of the following <pnames>: 923 - GET_TEXTURE_IMAGE_FORMAT, GET_TEXTURE_IMAGE_TYPE 924 - AUTO_GENERATE_MIPMAP 925 - TESS_CONTROL_TEXTURE, TESS_EVALUATION_TEXTURE 926 - GEOMETRY_TEXTURE 927 - COMPUTE_TEXTURE 928 - TEXTURE_GATHER, TEXTURE_GATHER_SHADOW 929 - SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC 930 - IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE 931 - IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE 932 - CLEAR_BUFFER 933 - TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS 934 return the appropriate "unsupported" response. 935 Queries for unsupported features/targets do NOT set errors. 936 937 If the <pname> is SRGB_WRITE, ignore references to FRAMEBUFFER_SRGB. 938 939Dependencies on OpenGL 2.0 940 Queries involving any of the following enums for <target>: 941 - TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY 942 - TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY 943 - TEXTURE_RECTANGLE 944 - TEXTURE_BUFFER 945 - RENDERBUFFER 946 or any of the following <pnames>: 947 - MAX_LAYERS 948 - FRAMEBUFFER_RENDERABLE 949 - FRAMEBUFFER_RENDERABLE_LAYERED 950 - FRAMEBUFFER_BLEND 951 - MANUAL_GENERATE_MIPMAP 952 - SRGB_READ, SRGB_WRITE 953 - TESS_CONTROL_TEXTURE, TESS_EVALUATION_TEXTURE 954 - GEOMETRY_TEXTURE 955 - COMPUTE_TEXTURE 956 - TEXTURE_SHADOW, TEXTURE_GATHER, TEXTURE_GATHER_SHADOW 957 - SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC 958 - IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE 959 - IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE 960 - CLEAR_BUFFER 961 - TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS 962 return the appropriate "unsupported" response. 963 Queries for unsupported features/targets do NOT set errors. 964 965Dependencies on OpenGL 3.0 966 Queries involving any of the following enums for <target>: 967 - TEXTURE_CUBE_MAP_ARRAY 968 - TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY 969 - TEXTURE_RECTANGLE 970 - TEXTURE_BUFFER 971 or any of the following <pnames>: 972 - TESS_CONTROL_TEXTURE, TESS_EVALUATION_TEXTURE 973 - GEOMETRY_TEXTURE 974 - COMPUTE_TEXTURE 975 - TEXTURE_SHADOW, TEXTURE_GATHER, TEXTURE_GATHER_SHADOW 976 - SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC 977 - IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE 978 - IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE 979 - CLEAR_BUFFER 980 - TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS 981 return the appropriate "unsupported" response. 982 Queries for unsupported features/targets do NOT set errors. 983 984Dependencies on OpenGL 3.2 (Core Profile) 985 In core profiles for OpenGL 3.2 and later versions, queries 986 for the AUTO_GENERATE_MIPMAP <pname> return the appropriate 987 unsupported response. 988 989Dependencies on OpenGL 4.0 990 Queries involving any of the following <pnames>: 991 - COMPUTE_TEXTURE 992 - SHADER_IMAGE_LOAD, SHADER_IMAGE_STORE, SHADER_IMAGE_ATOMIC 993 - IMAGE_TEXEL_SIZE, IMAGE_PIXEL_FORMAT, IMAGE_PIXEL_TYPE 994 - IMAGE_COMPATIBILITY_CLASS, IMAGE_FORMAT_COMPATIBILITY_TYPE 995 - CLEAR_BUFFER 996 - TEXTURE_VIEW, VIEW_COMPATIBILITY_CLASS 997 return the appropriate "unsupported" response. 998 Queries for unsupported features/targets do NOT set errors. 999 1000Dependencies on ARB_framebuffer_object 1001 If ARB_framebuffer_object, EXT_framebuffer_object or equivalent 1002 functionality is not supported, queries involving the RENDERBUFFER 1003 <target> or the following <pnames>: 1004 - FRAMEBUFFER_RENDERABLE 1005 - FRAMEBUFFER_RENDERABLE_LAYERED 1006 - FRAMEBUFFER_BLEND 1007 - MANUAL_GENERATE_MIPMAP 1008 return the appropriate "unsupported" response. 1009 1010Dependencies on EXT_texture_sRGB 1011 If EXT_texture_sRGB or equivalent functionality is not supported, 1012 queries for the SRGB_READ <pname> and for sRGB internalformats 1013 return the appropriate "unsupported" response. 1014 1015Dependencies on ARB_framebuffer_sRGB 1016 If ARB_framebuffer_sRGB or equivalent functionality is not supported, 1017 queries for the SRGB_WRITE <pname> return the appropriate "unsupported" 1018 response. 1019 1020Dependencies on ARB/EXT_texture_sRGB_decode 1021 If ARB_texture_sRGB_decode or EXT_texture_sRGB_decode or equivalent 1022 functionality is not supported, queries for the SRGB_DECODE_ARB <pname> 1023 set the INVALID_ENUM error. (N.B. this is different from all other 1024 extension interactions because this functionality is not present 1025 in any core specification, and thus it behaves as an unrecognized 1026 token rather than as an unsupported feature.) 1027 1028Dependencies on ARB_tessellation_shader 1029 If ARB_tessellation_shader or equivalent functionality is not supported, 1030 queries for the TESS_CONTROL_TEXTURE and TESS_EVALUATION_TEXTURE <pnames>, 1031 return the appropriate "unsupported" response. 1032 1033Dependencies on ARB_geometry_shader4 1034 If ARB_geometry_shader4 or equivalent functionality is not supported, 1035 queries for the GEOMETRY_TEXTURE <pname> will return the appropriate 1036 "unsupported" response. 1037 1038Dependencies on ARB_compute_shader 1039 If ARB_compute_shader or equivalent functionality is not supported, 1040 queries for the COMPUTE_TEXTURE <pname> will return the appropriate 1041 "unsupported" response. 1042 1043Dependencies on EXT_texture_array 1044 If EXT_texture_array or equivalent functionality is not supported, 1045 queries for the TEXTURE_1D_ARRAY and TEXTURE_2D_ARRAY <targets> and 1046 for the FRAMEBUFFER_RENDERABLE_LAYERED <pname> return the appropriate 1047 "unsupported" response. In addition, the MAX_LAYERS query will return 1048 zero. 1049 1050Dependencies on ARB_texture_cube_map_array 1051 If ARB_texture_cube_map_array or equivalent functionality is not supported, 1052 queries for the TEXTURE_CUBE_MAP_ARRAY <target> will return the 1053 appropriate "unsupported" response. 1054 1055Dependencies on ARB_texture_multisample 1056 If ARB_texture_multisample or equivalent functionality is not supported, 1057 queries for the TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY 1058 <target> parameter will return the appropriate unsupported response. 1059 1060Dependencies on ARB_texture_rectangle 1061 If ARB_texture_rectange or equivalent functionality is not supported, 1062 queries for the TEXTURE_RECTANGLE <target> parameter will return the 1063 appropriate unsupported response. 1064 1065Dependencies on ARB_texture_buffer_object 1066 If ARB_texture_buffer_object or equivalent functionality is not supported, 1067 queries for the TEXTURE_BUFFER <target> parameter will return the 1068 appropriate unsupported response. Ignore all references to TexBuffer. 1069 1070Dependencies on ARB_texture_gather 1071 If ARB_texture_gather or equivalent functionality is not supported, 1072 queries for the TEXTURE_GATHER <pname> return the appropriate 1073 unsupported response. 1074 1075Dependecies on ARB_debug_output 1076 If ARB_debug_output, KHR_debug or equivalent functionality is not 1077 supported, ignore all references to debug output messages. 1078 1079Dependencies on ARB_clear_buffer_object 1080 If ARB_clear_buffer_object or equivalent functionality is not supported, 1081 queries for the CLEAR_BUFFER <pname> return the appropriate 1082 unsupported response. Ignore all references to ClearBufferData and 1083 ClearBufferSubData, ClearNamedBufferDataEXT, and ClearNamedBufferSubDataEXT. 1084 1085Dependencies on ARB_texture_compression_bptc 1086 If ARB_texture_compression_bptc or equivalent functionality is not 1087 supported, ignore all references to VIEW_CLASS_BPTC_UNORM and 1088 VIEW_CLASS_BPTC_FLOAT. 1089 1090Dependencies on ARB_texture_compression_rgtc 1091 If ARB_texture_compression_rgtc or equivalent functionality is not 1092 supported, ignore all references to VIEW_CLASS_RGTC1_RED and 1093 VIEW_CLASS_RGTC2_RG. 1094 1095Dependencies on ARB_ES3_compatibility 1096 If ARB_ES3_compatibility or equivalent functionality is not supported, 1097 ingore all references to VIEW_CLASS_EAC_R11, VIEW_CLASS_EAC_RG11, 1098 VIEW_CLASS_ETC2_RGB, VIEW_CLASS_ETC2_RGBA, and VIEW_CLASS_ETC2_EAC_RGBA. 1099 1100Dependencies on KHR_texture_compression_astc_ldr 1101 If KHR_texture_compression_astc_ldr or equivalent functionality is not 1102 supported, ignore all references to VIEW_CLASS_ASTC_4x4_RGBA, 1103 VIEW_CLASS_ASTC_5x4_RGBA, VIEW_CLASS_ASTC_5x5_RGBA, 1104 VIEW_CLASS_ASTC_6x5_RGBA, VIEW_CLASS_ASTC_6x6_RGBA, 1105 VIEW_CLASS_ASTC_8x5_RGBA, VIEW_CLASS_ASTC_8x6_RGBA, VIEW_CLASS_ASTC_8x8_RGBA, 1106 VIEW_CLASS_ASTC_10x5_RGBA, VIEW_CLASS_ASTC_10x6_RGBA, 1107 VIEW_CLASS_ASTC_10x8_RGBA, VIEW_CLASS_ASTC_10x10_RGBA, 1108 VIEW_CLASS_ASTC_12x10_RGBA, and VIEW_CLASS_ASTC_12x12_RGBA. 1109 1110Dependencies on ARB_stencil_texturing 1111 If ARB_stencil_texturing or equivalent functionality is not supported, 1112 ignore all references to stencil texturing. 1113 1114Dependencies on ARB_depth_texture and OES_depth_texture 1115 If ARB_depth_texture, OES_depth_texture or equivalent functionality is 1116 no supported, ignore all references to depth texturing. 1117 1118Dependencies on ARB_texture_view 1119 If ARB_texture_view or equivalent functionality is not supported, 1120 queries for the TEXTURE_VIEW and VIEW_COMPATIBILITY_CLASS <pname> values 1121 return the appropriate unsupported response. Ignore all references 1122 to TextureView. 1123 1124Dependencies on ARB_texture_storage 1125 If ARB_texture_storage, EXT_texture_storage or equivalent functionality 1126 is not supported, ignore all references to TexStorage1D, TexStorage2D, 1127 TexStorage3D, TextureStorage1DEXT, TextureStorage2DEXT, and 1128 TextureStorage3DEXT. 1129 1130Dependencies on ARB_texture_storage_multisample 1131 If ARB_texture_storage_multisample or equivalent functionality is not 1132 supported, ignore all references to TexStorage2DMultisample, 1133 TexImage3DMultisample, TextureStorage2DMultisampleEXT, and 1134 TextureStorage3DMultisampleEXT. 1135 1136Dependencies on ARB_shader_image_load_store 1137 If ARB_shader_image_load_store or equivalent functionality is not 1138 supported, queries for the following <pname> values: 1139 - SHADER_IMAGE_LOAD 1140 - SHADER_IMAGE_STORE 1141 - SHADER_IMAGE_ATOMIC 1142 - IMAGE_TEXEL_SIZE 1143 - IMAGE_COMPATIBILITY_CLASS 1144 - IMAGE_PIXEL_FORMAT 1145 - IMAGE_PIXEL_TYPE 1146 - IMAGE_FORMAT_COMPATIBILITY_TYPE 1147 return the appropriate unsupported response. 1148 Ignore all references to BindImageTexture. 1149 1150Dependencies on EXT_direct_state_access 1151 If EXT_direct_state_access or equivalent functionality is not supported, 1152 ignore all references to: 1153 ClearNamedBufferDataEXT, ClearNamedBufferSubDataEXT, 1154 TextureImage1DEXT, TextureImage2DEXT, TextureImage3DEXT, 1155 CopyTextureImage1DEXT, CopyTextureImage2DEXT, 1156 MultiTexImage1DEXT, MultiTexImage2DEXT, MultiTexImage3DEXT, 1157 CompressedTextureImage3DEXT, CompressedTextureImage2DEXT, 1158 CompressedTextureImage1DEXT, CompressedMultiTexImage3DEXT, 1159 CompressedMultiTexImage2DEXT, CompressedMultiTexImage1DEXT 1160 TextureBufferEXT, MultiTexBufferEXT, 1161 NamedRenderbufferStorageEXT, NamedRenderbufferStorageMultisampleEXT, 1162 NamedRenderbufferStorageMultisampleCoverageEXT, 1163 CopyMultiTexImage1DEXT, CopyMultiTexImage2DEXT, 1164 TextureStorage1DEXT, TextureStorage2DEXT, TextureStorage3DEXT, 1165 TextureStorage2DMultisampleEXT, and TextureStorage3DMultisampleEXT. 1166 1167Dependencies on EXT_texture_compression_s3tc 1168 If EXT_texture_compression_s3tc or equivalent functionality is not 1169 supported, ignore all references to VIEW_CLASS_S3TC_DXT1_RGBA, 1170 VIEW_CLASS_S3TC_DXT1_RGB, VIEW_CLASS_S3TC_DXT3_RGBA, and 1171 VIEW_CLASS_S3TC_DXT5_RGBA. 1172 1173Errors 1174 1175 The INVALID_ENUM error is generated if the <target> parameter to 1176 GetInternalformati*v is not one of the targets listed in Table 6.xx. 1177 1178 The INVALID_ENUM error is generated if the <pname> parameter is 1179 not one of the listed possibilities. 1180 1181New State 1182 1183 None. 1184 1185New Implementation Dependent State 1186 1187 None. 1188 1189Sample Code 1190 1191 TBD 1192 1193Conformance Tests 1194 1195 TBD 1196 1197Issues 1198 1199 1) What should this extension be called? 1200 1201 DISCUSSION: Some options that come to mind: 1202 ARB_internalformat_query2 1203 ARB_internalformat_query_extended 1204 RESOLVED: use ARB_internalformat_query2. 1205 1206 2) Should the <internalformat> parameter take "base internal formats" from 1207 Table 3.11, any of the "generic" compressed formats, or any other unsized 1208 tokens? What about allowing *any* possible value for <internalformat> so 1209 that list of formats queryable is not tied to any particular GL version? 1210 1211 DISCUSSION: Tying the internalformats accepted to various tables in one 1212 specific version of the spec makes it difficult to determine what should 1213 be supported when this is implemented against other versions of the specs 1214 and even worse when you consider extensions which add new formats but 1215 which may not have updated the tables. 1216 1217 RESOLVED: It will be simpler and more useful to allow the query to take 1218 any enum value for the INTERNALFORMAT_SUPPORTED <pname> and then define 1219 the behaviour of all the other queries in terms of "supported internal 1220 formats". 1221 1222 "base internal" formats, "generic compressed" formats and unsized 1223 formats (such as RGBA or RGB_COMPRESSED) are all possible, provided the 1224 implementation supports them for texture or image specification, and will 1225 return appropriate information based on the internal format that the 1226 particular implementation would map them to internally if used as such. 1227 1228 3 a) What if the combination of <target> and <pname> is invalid/nonsense 1229 (e.g. any texture related query on RENDERBUFFER)? 1230 b) What if the <target>/<pname> make sense, but the <internalformat> 1231 does not for that <pname> (e.g. COLOR_ENCODING for non-color internal 1232 format)? 1233 1234 RESOLVED. If the combinations of parameters does not make sense the 1235 reponse best representing "not supported" or "not applicable" is returned 1236 as defined for each <pname>. 1237 In general: 1238 - size- or count-based queries will return zero, 1239 - support-, format- or type-based queries will return NONE, 1240 - boolean-based queries will return FALSE, and 1241 - list-based queries return no entries. 1242 1243 4) Should we expose a way for an implementation to describe what the 1244 caveats might be on a particular operation? 1245 1246 RESOLVED. If ARB_debug_output or equivalent functionality is present 1247 and enabled, the caveat will be written to the debug output log. 1248 The message has the source DEBUG_SOURCE_API, the type 1249 DEBUG_TYPE_PERFORMANCE, and an implementation-dependent ID. 1250 1251 5) Do layers generalize in the MAX_COMBINED_DIMENSIONS? How do cube map 1252 faces and multisample resources work? 1253 1254 RESOLVED. Yes layers generalize in the MAX_COMBINED_DIMENSIONS, as do 1255 cube map faces and multiple samples. 1256 The calculation for cube maps is: width x height x 6. 1257 The calculation for cube map arrays is: width x height x layers x 6. 1258 The calculation for 2D multisample arrays is: width x height x layers x samples. 1259 1260 6) Is the READ_PIXELS query useful, should we replace it with 1261 READ_PIXELS_FORMAT and READ_PIXELS_TYPE, or have all three of them? 1262 1263 RESOLVED. The READ_PIXELS_FORMAT and READ_PIXELS_TYPE queries have been 1264 added. READ_PIXELS still has value because an implementation may want 1265 to be able to report a caveat on the performance or lack of support. 1266 1267 7) There some <pnames> which it makes no sense to be qualified by 1268 a per-format/target scope, how should we handle them? 1269 e.g. MAX_WIDTH and MAX_HEIGHT might be the same for all formats. 1270 e.g. properties like AUTO_GENERATE_MIPMAP and MANUAL_GENERATE_MIPMAP might 1271 depend only on the GL version. 1272 1273 DISCUSSION: 1274 A) Just use this entry point as is, if there are no per-format or 1275 target differences, it is perfectly acceptable to have the implementation 1276 return the same information for all valid parameters. This does 1277 allow implementations to report caveats that may exist for some 1278 formats but not others, even though all formats/targets may be supported. 1279 B) Introduce new entry point(s) which can report on some general 1280 properties. 1281 1282 RESOLVED: Option A, just the one entry point. It doesn't hurt to 1283 give the implementation the ability to report more information. 1284 1285 8) In GL 4.2 MAX_TEXTURE_3D_SIZE is 2048 (2^11) so the 1286 MAX_COMBINED_DIMENSIONS could be as high as 2^11*2^11*2^11 = 2^33. 1287 The MAX_TEXTURE_SIZE is 16384 (2^14) and MAX_ARRAY_TEXTURE_LAYERS is 1288 2048 (2^11) so the MAX_COMBINED_DIMENSIONS could be 2^14*2^14*2^11 1289 = 2^39. Thus it is possible for the combined dimensions to exceed 1290 32-bits. What should be reported in cases like this? 1291 1292 DISCUSSION: If the max combined size is great than 2^32, the resource 1293 could take at least 2^32 bytes or 4GB of memory. While it is currently 1294 unlikely that implementation would actually support resources of this 1295 size, it is plausible that within a few years it would be possible to 1296 exceed this with a single allocation. Possible alternatives: 1297 A) Saturate the reported value at a max of 2^31 (since <pname> is GLint). 1298 B) Add a 64-bit version of the query. 1299 C) Add a HI and LO query to allow generatation of a 64-bit value. 1300 D) Remove this query. 1301 E) use other units? (MB) 1302 1303 Some other APIs have a maximum allocation size which may be 128 MB or 1304 1/4 or the dedicated VRAM. Option A is not very appealing since it 1305 limits the usefulness of the query when it is most needed. No interest 1306 in Option C. Option E is undesireable since it is too granular for 1307 lower-dimensioned resources. General consensus was either option B or D. 1308 1309 RESOLVED: Option B is specified as it is expected that is query will 1310 be useful. 1311 1312 9) Is a MULTISAMPLE query useful? 1313 1314 RESOLVED: No. The same information can be obtained by querying if 1315 NUM_SAMPLE_COUNTS and checking if it is greater than zero. 1316 1317 10) Is TEXTURE_SHADOW useful? 1318 1319 RESOLVED: Yes. While DEPTH_COMPONENTS tells you if the texture has depth 1320 in it, some implementations may have caveats to report for shadow lookups. 1321 For example there may be caveats that depend on the depth size, or some 1322 hardware may not be able to do non-shadowed look ups and must emulate it 1323 in the shader. Additionally some versions of the API do not support 1324 shadow samplers. 1325 1326 11) Do we need a list of interactions with all extensions? 1327 1328 DISCUSSION: All pnames will always be supported, but return false/not- 1329 supported. Interactions with specific extensions and pnames will be 1330 noted in the interactions section. 1331 1332 12) We have a way to query the component sizes and types, should we have 1333 a way to query the component orderings? 1334 1335 RESOLVED. No. It is unclear what value this would add, and an 1336 implementation could already choose to expose this via the 1337 TEXTURE_IMAGE_FORMAT and TEXTURE_IMAGE_TYPE queries. 1338 1339 13) What does the value returned for the MAX_COMBINED_DIMENSIONS 1340 actually mean? Does this mean that if you try to create a texture 1341 with more samples or texels than this it is guaranteed to fail 1342 (possibly with OUT_OF_MEMORY)? Or is it just a recommendation that 1343 says it might fail? 1344 1345 RESOLVED. This is a recommendation for applications. There are 1346 system-dependant reasons why allocations larger than this size may 1347 result in failures even if there might appear to be sufficient memory 1348 available when queried via some other means. At the same time, some 1349 systems may not have a single hard-limit on the allocation size and 1350 it may be a combination of hardware and/or software limitations. 1351 This value also does not a guarantee that allocations smaller than 1352 this will succeed because it does not factor in the current available 1353 memory. Applications should be able to reliably allocate resources 1354 that fall under this limit, providing there is sufficient memory 1355 available at the time of the allocation. 1356 1357 14) Can we add some queries for various forms of buffer support, for 1358 example vertex attributes, element arrays or transform feedback? 1359 Some implementations may have caveats they could report for some 1360 formats. 1361 1362 RESOLVED: Deferred. While this is interesting, it is too late for 1363 this version. It is also unclear if we could use the current 1364 entry points which are more targetted at textures and renderbuffers 1365 and keyed off an <internalformat>. We don't typically use an 1366 internalformat for buffers. 1367 1368 15) Should we have separate values for FILTER, such as TEXTURE_MAG_FILTER 1369 and TEXTURE_MIN_FILTER? 1370 1371 RESOLVED: No. The FITLER query is more about whether or not multi-texel 1372 filtering is directly supported. We don't expect implmentations to 1373 be able to support it for MIN filters but not for MAG, or vice versa. 1374 1375 16) What should we do in cases where a command is defined in terms of 1376 GetTexLevelParameter, but GetTexLevelParameter doesn't support the target 1377 (eg TEXTURE_BUFFER in versions of GL prior to 3.1) or there is no 1378 corresponding pname (such as TEXTURE_STENCIL_TYPE)? 1379 1380 RESOLVED: GetInternalFormat* should return the correct information for the 1381 specific query, it shouldn't be limited by the set of tokens that happen to 1382 be legal for GetTexLevelParameter. This was just used a method of 1383 reducing specification language duplication, and noting that the queries 1384 are effectively the same. 1385 1386Revision History 1387 1388 Rev. Date Author Changes 1389 ---- ---------- -------- -------------------------------------------- 1390 20 10/12/2018 dgkoch Add tokens for ETC2/EAC and ASTC VIEW_CLASSES 1391 as interactions with ARB_ES3_compatibility 1392 and KHR_texture_compression_astc_ldr. 1393 19 02/14/2018 dgkoch Add issue 16, clarify references to 1394 GetTexLevelParameter (gitlab/opengl/api/65) 1395 18 07/15/2013 Jon Leech Remove redundant list of VIEW_CLASS_* tokens 1396 (Bug 10518). 1397 17 07/11/2013 Jon Leech Clarify relationship between VIEW_CLASS_* 1398 tokens and ARB_texture_view (Bug 10518). 1399 16 07/26/2012 dgkoch rename GENERATE_MIPMAP to MANUAL_GENERATE_MIPMAP 1400 for clarity and restore previous token (9330) 1401 15 07/24/2012 dgkoch Fix several token values (bug 9325) 1402 14 07/20/2012 dgkoch Add _ARB suffix to SRGB_DECODE 1403 13 07/17/2012 dgkoch Finish adding extension/version interactions. 1404 SRGB_DECODE is only valid if extension supported (bug 9293). 1405 12 07/10/2012 Jon Leech Change _BIT token names to _BITS (bug 9266). 1406 11 06/15/2012 dgkoch Grammar fixes noticed in review (bug 9158). 1407 10 06/11/2012 dgkoch Resolved Issue 13 and updated relevant spec language 1408 Added Issue 14 and 15 and renamed some tokens (bug 9138) 1409 9 06/06/2012 dgkoch renamed 64-bit query for consistency 1410 Resolved Issue 8, and added a bit of related language. 1411 Added Issue 13. 1412 8 05/07/2012 dgkoch minor token renaming, misc wording improvements 1413 started added extension interactions 1414 7 05/05/2012 dgkoch added 64-bit entry point 1415 allow any enum for internalformat 1416 specify 'unsupported' responses for all queries 1417 add errors 1418 resolved issues as per Apr-12 F2F 1419 added clear buffer, image and view related queries 1420 6 04/25/2012 dgkoch remove MULTISAMPLE (redundant with NUM_SAMPLES > 0) 1421 remove meta queries 1422 add issues 9-11 1423 added READ_PIXELS_FORMAT, READ_PIXELS_TYPE 1424 added TEXTURE_IMAGE_FORMAT, TEXTURE_IMAGE_TYPE 1425 added GET_TEXTURE_IMAGE_FORMAT, GET_TEXTURE_IMAGE_TYPE 1426 changed ACTUAL_INTERNALFORMAT to PREFERRED_INTERNALFORMAT 1427 added INTERNALFORMAT_x_SIZE/TYPE for 1428 RED/GREEN/BLUE/ALPHA/DEPTH/STENCIL/SHARED 1429 5 04/05/2012 dgkoch Update overview, issue 7. 1430 4 04/04/2012 dgkoch Incorporate feedback from bmerry (Bug 8595) 1431 3 01/23/2012 dgkoch Continue adding more details 1432 2 01/23/2012 dgkoch Add more details 1433 1 10/13/2011 dgkoch Initial draft 1434 1435