15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci ARB_texture_view 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_ARB_texture_view 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Jeff Bolz, NVIDIA Corporation (jbolz 'at' nvidia.com) 125bd8deadSopenharmony_ci 135bd8deadSopenharmony_ciContributors 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ci Pat Brown, NVIDIA 165bd8deadSopenharmony_ci Daniel Koch, TransGaming 175bd8deadSopenharmony_ci Jon Leech 185bd8deadSopenharmony_ci 195bd8deadSopenharmony_ciNotice 205bd8deadSopenharmony_ci 215bd8deadSopenharmony_ci Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at 225bd8deadSopenharmony_ci http://www.khronos.org/registry/speccopyright.html 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ciSpecification Update Policy 255bd8deadSopenharmony_ci 265bd8deadSopenharmony_ci Khronos-approved extension specifications are updated in response to 275bd8deadSopenharmony_ci issues and bugs prioritized by the Khronos OpenGL Working Group. For 285bd8deadSopenharmony_ci extensions which have been promoted to a core Specification, fixes will 295bd8deadSopenharmony_ci first appear in the latest version of that core Specification, and will 305bd8deadSopenharmony_ci eventually be backported to the extension document. This policy is 315bd8deadSopenharmony_ci described in more detail at 325bd8deadSopenharmony_ci https://www.khronos.org/registry/OpenGL/docs/update_policy.php 335bd8deadSopenharmony_ci 345bd8deadSopenharmony_ciStatus 355bd8deadSopenharmony_ci 365bd8deadSopenharmony_ci Complete. 375bd8deadSopenharmony_ci Approved by the ARB on 2012/06/12. 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ciVersion 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ci Last Modified Date: July 15, 2013 425bd8deadSopenharmony_ci Revision: 4 435bd8deadSopenharmony_ci 445bd8deadSopenharmony_ciNumber 455bd8deadSopenharmony_ci 465bd8deadSopenharmony_ci ARB Extension #124 475bd8deadSopenharmony_ci 485bd8deadSopenharmony_ciDependencies 495bd8deadSopenharmony_ci 505bd8deadSopenharmony_ci This extension is written against the OpenGL 4.2 Core profile 515bd8deadSopenharmony_ci specification. 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ci ARB_texture_storage or OpenGL 4.2 is required. 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci ARB_internalformat_query2 interacts with this extension. 565bd8deadSopenharmony_ci 575bd8deadSopenharmony_ci EXT_texture_compression_s3tc interacts with this extension. 585bd8deadSopenharmony_ci 595bd8deadSopenharmony_ci EXT_texture_sRGB interacts with this extension. 605bd8deadSopenharmony_ci 615bd8deadSopenharmony_ci ARB_texture_storage_multisample interacts with this extension. 625bd8deadSopenharmony_ci 635bd8deadSopenharmony_ciOverview 645bd8deadSopenharmony_ci 655bd8deadSopenharmony_ci This extension allows a texture's data store to be "viewed" in multiple 665bd8deadSopenharmony_ci ways, either reinterpreting the data format/type as a different format/ 675bd8deadSopenharmony_ci type with the same element size, or by clamping the mipmap level range 685bd8deadSopenharmony_ci or array slice range. 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ci The goals of this extension are to avoid having these alternate views 715bd8deadSopenharmony_ci become shared mutable containers of shared mutable objects, and to add 725bd8deadSopenharmony_ci the views to the API in a minimally invasive way. 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ci No new object types are added. Conceptually, a texture object is split 755bd8deadSopenharmony_ci into the following parts: 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ci - A data store holding texel data. 785bd8deadSopenharmony_ci - State describing which portions of the data store to use, and how 795bd8deadSopenharmony_ci to interpret the data elements. 805bd8deadSopenharmony_ci - An embedded sampler object. 815bd8deadSopenharmony_ci - Various other texture parameters. 825bd8deadSopenharmony_ci 835bd8deadSopenharmony_ci With this extension, multiple textures can share a data store and have 845bd8deadSopenharmony_ci different state describing which portions of the data store to use and how 855bd8deadSopenharmony_ci to interpret the data elements. The data store is refcounted and not 865bd8deadSopenharmony_ci destroyed until the last texture sharing it is deleted. 875bd8deadSopenharmony_ci 885bd8deadSopenharmony_ci This extension leverages the ARB_texture_storage concept of an "immutable 895bd8deadSopenharmony_ci texture". Views can only be created of textures created with TexStorage. 905bd8deadSopenharmony_ci 915bd8deadSopenharmony_ci 925bd8deadSopenharmony_ciNew Procedures and Functions 935bd8deadSopenharmony_ci 945bd8deadSopenharmony_ci void TextureView(uint texture, enum target, uint origtexture, 955bd8deadSopenharmony_ci enum internalformat, 965bd8deadSopenharmony_ci uint minlevel, uint numlevels, 975bd8deadSopenharmony_ci uint minlayer, uint numlayers); 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ciNew Tokens 1005bd8deadSopenharmony_ci 1015bd8deadSopenharmony_ci Accepted by the <pname> parameters of GetTexParameterfv and 1025bd8deadSopenharmony_ci GetTexParameteriv: 1035bd8deadSopenharmony_ci 1045bd8deadSopenharmony_ci TEXTURE_VIEW_MIN_LEVEL 0x82DB 1055bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LEVELS 0x82DC 1065bd8deadSopenharmony_ci TEXTURE_VIEW_MIN_LAYER 0x82DD 1075bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LAYERS 0x82DE 1085bd8deadSopenharmony_ci TEXTURE_IMMUTABLE_LEVELS 0x82DF 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ci Used as compatibility class names in table 3.X.2 (see the "Interactions 1115bd8deadSopenharmony_ci with ARB_internalformat_query2" section below). 1125bd8deadSopenharmony_ci 1135bd8deadSopenharmony_ci VIEW_CLASS_128_BITS 1145bd8deadSopenharmony_ci VIEW_CLASS_96_BITS 1155bd8deadSopenharmony_ci VIEW_CLASS_64_BITS 1165bd8deadSopenharmony_ci VIEW_CLASS_48_BITS 1175bd8deadSopenharmony_ci VIEW_CLASS_32_BITS 1185bd8deadSopenharmony_ci VIEW_CLASS_24_BITS 1195bd8deadSopenharmony_ci VIEW_CLASS_16_BITS 1205bd8deadSopenharmony_ci VIEW_CLASS_8_BITS 1215bd8deadSopenharmony_ci VIEW_CLASS_S3TC_DXT1_RGB 1225bd8deadSopenharmony_ci VIEW_CLASS_S3TC_DXT1_RGBA 1235bd8deadSopenharmony_ci VIEW_CLASS_S3TC_DXT3_RGBA 1245bd8deadSopenharmony_ci VIEW_CLASS_S3TC_DXT5_RGBA 1255bd8deadSopenharmony_ci VIEW_CLASS_RGTC1_RED 1265bd8deadSopenharmony_ci VIEW_CLASS_RGTC2_RG 1275bd8deadSopenharmony_ci VIEW_CLASS_BPTC_UNORM 1285bd8deadSopenharmony_ci VIEW_CLASS_BPTC_FLOAT 1295bd8deadSopenharmony_ci 1305bd8deadSopenharmony_ci 1315bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 4.2 Specification (OpenGL Operation) 1325bd8deadSopenharmony_ci 1335bd8deadSopenharmony_ci None. 1345bd8deadSopenharmony_ci 1355bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 4.2 Specification (Rasterization) 1365bd8deadSopenharmony_ci 1375bd8deadSopenharmony_ci Modify subsection 3.9.8 (Texture Parameters) 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ci Add the following to the end of the paragraph on p. 240: 1405bd8deadSopenharmony_ci 1415bd8deadSopenharmony_ci If the texture was created with TextureView, then the TEXTURE_BASE_LEVEL 1425bd8deadSopenharmony_ci and TEXTURE_MAX_LEVEL parameters are interpreted relative to the view and 1435bd8deadSopenharmony_ci not relative to the original data store. 1445bd8deadSopenharmony_ci 1455bd8deadSopenharmony_ci Modify subsection 3.9.15 (Texture State and Proxy State) 1465bd8deadSopenharmony_ci 1475bd8deadSopenharmony_ci Add to the second paragraph on p. 256: 1485bd8deadSopenharmony_ci 1495bd8deadSopenharmony_ci The values of TEXTURE_IMMUTABLE_LEVELS, TEXTURE_VIEW_MIN_LEVEL, 1505bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LEVELS, TEXTURE_VIEW_MIN_LAYER, TEXTURE_VIEW_NUM_LAYERS 1515bd8deadSopenharmony_ci are 0. 1525bd8deadSopenharmony_ci 1535bd8deadSopenharmony_ci Modify subsection 3.9.16 (Immutable-Format Texture Images) 1545bd8deadSopenharmony_ci 1555bd8deadSopenharmony_ci Modify the second to last bullet on p. 258: 1565bd8deadSopenharmony_ci 1575bd8deadSopenharmony_ci If the command is successful, TEXTURE_IMMUTABLE_FORMAT becomes TRUE, 1585bd8deadSopenharmony_ci TEXTURE_IMMUTABLE_LEVELS and TEXTURE_VIEW_NUM_LEVELS become <levels>. 1595bd8deadSopenharmony_ci If the texture target is TEXTURE_1D_ARRAY then TEXTURE_VIEW_NUM_LAYERS 1605bd8deadSopenharmony_ci becomes <height>. If the texture target is TEXTURE_2D_ARRAY, 1615bd8deadSopenharmony_ci TEXTURE_CUBE_MAP_ARRAY, or TEXTURE_2D_MULTISAMPLE_ARRAY then 1625bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LAYERS becomes <depth>. If the texture target is 1635bd8deadSopenharmony_ci TEXTURE_CUBE_MAP, then TEXTURE_VIEW_NUM_LAYERS becomes 6. For any other 1645bd8deadSopenharmony_ci texture target, TEXTURE_VIEW_NUM_LAYERS becomes 1. 1655bd8deadSopenharmony_ci 1665bd8deadSopenharmony_ci Add a new subsection at the end of 3.9 (Texturing) 1675bd8deadSopenharmony_ci 1685bd8deadSopenharmony_ci 3.9.X Texture Views 1695bd8deadSopenharmony_ci 1705bd8deadSopenharmony_ci A texture can be created which references the data store of another texture 1715bd8deadSopenharmony_ci and interprets the data with a different format, and/or selects a subset of 1725bd8deadSopenharmony_ci the levels and/or layers of the other texture. The data store for such a 1735bd8deadSopenharmony_ci texture is shared with the data store of the original texture. Updating 1745bd8deadSopenharmony_ci the shared data store using the original texture affects texture values read 1755bd8deadSopenharmony_ci using the new texture, and vice versa. A texture data store remains in 1765bd8deadSopenharmony_ci existence until all textures that reference it are deleted. 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ci The command: 1795bd8deadSopenharmony_ci 1805bd8deadSopenharmony_ci void TextureView(uint texture, enum target, uint origtexture, 1815bd8deadSopenharmony_ci enum internalformat, 1825bd8deadSopenharmony_ci uint minlevel, uint numlevels, 1835bd8deadSopenharmony_ci uint minlayer, uint numlayers); 1845bd8deadSopenharmony_ci 1855bd8deadSopenharmony_ci initializes the texture named <texture> to the target specified by 1865bd8deadSopenharmony_ci <target>. <texture>'s data store is inherited from the texture named 1875bd8deadSopenharmony_ci <origtexture>, but elements of the data store are interpreted according 1885bd8deadSopenharmony_ci to the internal format specified by <internalformat>. Additionally, if the 1895bd8deadSopenharmony_ci original texture is an array or has multiple mipmap levels, the parameters 1905bd8deadSopenharmony_ci <minlayer>, <numlayers>, <minlevel>, and <numlevels> control which of those 1915bd8deadSopenharmony_ci slices and levels are considered part of the texture. 1925bd8deadSopenharmony_ci 1935bd8deadSopenharmony_ci The <minlevel> and <minlayer> parameters are relative to the view of the 1945bd8deadSopenharmony_ci original texture. If <numlayers> or <numlevels> extend beyond the original 1955bd8deadSopenharmony_ci texture, they are clamped to the max extent of the original texture. If 1965bd8deadSopenharmony_ci <minlevel> or <minlayer> are larger than the greatest level or layer of the 1975bd8deadSopenharmony_ci original texture, the error INVALID_VALUE is generated. 1985bd8deadSopenharmony_ci 1995bd8deadSopenharmony_ci If the command is successful, the texture parameters in <texture> are 2005bd8deadSopenharmony_ci updated as follows: 2015bd8deadSopenharmony_ci 2025bd8deadSopenharmony_ci - TEXTURE_IMMUTABLE_FORMAT is set to TRUE. 2035bd8deadSopenharmony_ci 2045bd8deadSopenharmony_ci - TEXTURE_IMMUTABLE_LEVELS is set to the value of TEXTURE_IMMUTABLE_LEVELS 2055bd8deadSopenharmony_ci from the original texture. 2065bd8deadSopenharmony_ci 2075bd8deadSopenharmony_ci - TEXTURE_VIEW_MIN_LEVEL is set to <minlevel> plus the value of 2085bd8deadSopenharmony_ci TEXTURE_VIEW_MIN_LEVEL from the original texture. 2095bd8deadSopenharmony_ci 2105bd8deadSopenharmony_ci - TEXTURE_VIEW_MIN_LAYER is set to <minlayer> plus the value of 2115bd8deadSopenharmony_ci TEXTURE_VIEW_MIN_LAYER from the original texture. 2125bd8deadSopenharmony_ci 2135bd8deadSopenharmony_ci - TEXTURE_VIEW_NUM_LEVELS is set to the lesser of <numlevels> and the 2145bd8deadSopenharmony_ci value of TEXTURE_VIEW_NUM_LEVELS from the original texture minus 2155bd8deadSopenharmony_ci <minlevels>. 2165bd8deadSopenharmony_ci 2175bd8deadSopenharmony_ci - TEXTURE_VIEW_NUM_LAYERS is set to the lesser of <numlayers> and the 2185bd8deadSopenharmony_ci value of TEXTURE_VIEW_NUM_LAYERS from the original texture minus 2195bd8deadSopenharmony_ci <minlayer>. 2205bd8deadSopenharmony_ci 2215bd8deadSopenharmony_ci The new texture's target must be "compatible" with the target of the 2225bd8deadSopenharmony_ci original texture, or else an INVALID_OPERATION error is generated. 2235bd8deadSopenharmony_ci Compatibility is defined by Table 3.X.1: 2245bd8deadSopenharmony_ci 2255bd8deadSopenharmony_ci --------------------------------------------------------------------------------------------------------- 2265bd8deadSopenharmony_ci | Original target | Valid new targets | 2275bd8deadSopenharmony_ci --------------------------------------------------------------------------------------------------------- 2285bd8deadSopenharmony_ci | TEXTURE_1D | TEXTURE_1D, TEXTURE_1D_ARRAY | 2295bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2305bd8deadSopenharmony_ci | TEXTURE_2D | TEXTURE_2D, TEXTURE_2D_ARRAY | 2315bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2325bd8deadSopenharmony_ci | TEXTURE_3D | TEXTURE_3D | 2335bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2345bd8deadSopenharmony_ci | TEXTURE_CUBE_MAP | TEXTURE_CUBE_MAP, TEXTURE_2D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY | 2355bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2365bd8deadSopenharmony_ci | TEXTURE_RECTANGLE | TEXTURE_RECTANGLE | 2375bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2385bd8deadSopenharmony_ci | TEXTURE_BUFFER | <none> | 2395bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2405bd8deadSopenharmony_ci | TEXTURE_1D_ARRAY | TEXTURE_1D_ARRAY, TEXTURE_1D | 2415bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2425bd8deadSopenharmony_ci | TEXTURE_2D_ARRAY | TEXTURE_2D_ARRAY, TEXTURE_2D, TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY | 2435bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2445bd8deadSopenharmony_ci | TEXTURE_CUBE_MAP_ARRAY | TEXTURE_CUBE_MAP_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_2D, TEXTURE_CUBE_MAP | 2455bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2465bd8deadSopenharmony_ci | TEXTURE_2D_MULTISAMPLE | TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY | 2475bd8deadSopenharmony_ci |-------------------------------------------------------------------------------------------------------| 2485bd8deadSopenharmony_ci | TEXTURE_2D_MULTISAMPLE_ARRAY| TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY | 2495bd8deadSopenharmony_ci --------------------------------------------------------------------------------------------------------- 2505bd8deadSopenharmony_ci 2515bd8deadSopenharmony_ci Table 3.X.1: Legal texture targets for TextureView. 2525bd8deadSopenharmony_ci 2535bd8deadSopenharmony_ci If the new texture's target is TEXTURE_CUBE_MAP, the clamped <numlayers> 2545bd8deadSopenharmony_ci must be equal to 6. If the new texture's target is TEXTURE_CUBE_MAP_ARRAY, 2555bd8deadSopenharmony_ci then <numlayers> counts layer-faces rather than layers, and the clamped 2565bd8deadSopenharmony_ci <numlayers> must be a multiple of 6. Otherwise, the error INVALID_VALUE is 2575bd8deadSopenharmony_ci generated. If the new texture's target is TEXTURE_CUBE_MAP or 2585bd8deadSopenharmony_ci TEXTURE_CUBE_MAP_ARRAY, the width and height of the original texture's 2595bd8deadSopenharmony_ci levels must be equal otherwise the error INVALID_OPERATION is generated. 2605bd8deadSopenharmony_ci 2615bd8deadSopenharmony_ci When the original texture's target is TEXTURE_CUBE_MAP, the layer 2625bd8deadSopenharmony_ci parameters are interpreted in the same order as if it were a 2635bd8deadSopenharmony_ci TEXTURE_CUBE_MAP_ARRAY with 6 layer-faces. 2645bd8deadSopenharmony_ci 2655bd8deadSopenharmony_ci If <target> is TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_RECTANGLE, or 2665bd8deadSopenharmony_ci TEXTURE_2D_MULTISAMPLE and <numlayers> does not equal 1, the error 2675bd8deadSopenharmony_ci INVALID_VALUE is generated. 2685bd8deadSopenharmony_ci 2695bd8deadSopenharmony_ci If the dimensions of the original texture are larger than the maximum 2705bd8deadSopenharmony_ci supported dimensions of the new target, the error INVALID_OPERATION is 2715bd8deadSopenharmony_ci generated. For example, if the original texture has a TEXTURE_2D_ARRAY 2725bd8deadSopenharmony_ci target and its width is greater than MAX_CUBE_MAP_TEXTURE_SIZE, an error 2735bd8deadSopenharmony_ci will be generated if TextureView is called to create a TEXTURE_CUBE_MAP 2745bd8deadSopenharmony_ci view. 2755bd8deadSopenharmony_ci 2765bd8deadSopenharmony_ci The two textures' internal formats must be compatible according to Table 2775bd8deadSopenharmony_ci 3.X.2 (Compatible internal formats for TextureView) if the internal format 2785bd8deadSopenharmony_ci exists in that table and the internal formats must be identical if not in 2795bd8deadSopenharmony_ci that table, or else an INVALID_OPERATION error is generated. 2805bd8deadSopenharmony_ci 2815bd8deadSopenharmony_ci --------------------------------------------------------------------------- 2825bd8deadSopenharmony_ci | Class | Internal formats | 2835bd8deadSopenharmony_ci --------------------------------------------------------------------------- 2845bd8deadSopenharmony_ci | VIEW_CLASS_128_BITS | RGBA32F, RGBA32UI, RGBA32I | 2855bd8deadSopenharmony_ci --------------------------------------------------------------------------- 2865bd8deadSopenharmony_ci | VIEW_CLASS_96_BITS | RGB32F, RGB32UI, RGB32I | 2875bd8deadSopenharmony_ci --------------------------------------------------------------------------- 2885bd8deadSopenharmony_ci | VIEW_CLASS_64_BITS | RGBA16F, RG32F, RGBA16UI, RG32UI, RGBA16I, | 2895bd8deadSopenharmony_ci | | RG32I, RGBA16, RGBA16_SNORM | 2905bd8deadSopenharmony_ci --------------------------------------------------------------------------- 2915bd8deadSopenharmony_ci | VIEW_CLASS_48_BITS | RGB16, RGB16_SNORM, RGB16F, RGB16UI, RGB16I | 2925bd8deadSopenharmony_ci --------------------------------------------------------------------------- 2935bd8deadSopenharmony_ci | VIEW_CLASS_32_BITS | RG16F, R11F_G11F_B10F, R32F, | 2945bd8deadSopenharmony_ci | | RGB10_A2UI, RGBA8UI, RG16UI, R32UI, | 2955bd8deadSopenharmony_ci | | RGBA8I, RG16I, R32I, RGB10_A2, RGBA8, RG16, | 2965bd8deadSopenharmony_ci | | RGBA8_SNORM, RG16_SNORM, SRGB8_ALPHA8, RGB9_E5 | 2975bd8deadSopenharmony_ci --------------------------------------------------------------------------- 2985bd8deadSopenharmony_ci | VIEW_CLASS_24_BITS | RGB8, RGB8_SNORM, SRGB8, RGB8UI, RGB8I | 2995bd8deadSopenharmony_ci --------------------------------------------------------------------------- 3005bd8deadSopenharmony_ci | VIEW_CLASS_16_BITS | R16F, RG8UI, R16UI, RG8I, R16I, RG8, R16, | 3015bd8deadSopenharmony_ci | | RG8_SNORM, R16_SNORM | 3025bd8deadSopenharmony_ci --------------------------------------------------------------------------- 3035bd8deadSopenharmony_ci | VIEW_CLASS_8_BITS | R8UI, R8I, R8, R8_SNORM | 3045bd8deadSopenharmony_ci --------------------------------------------------------------------------- 3055bd8deadSopenharmony_ci | VIEW_CLASS_RGTC1_RED | COMPRESSED_RED_RGTC1, | 3065bd8deadSopenharmony_ci | | COMPRESSED_SIGNED_RED_RGTC1 | 3075bd8deadSopenharmony_ci --------------------------------------------------------------------------- 3085bd8deadSopenharmony_ci | VIEW_CLASS_RGTC2_RG | COMPRESSED_RG_RGTC2, | 3095bd8deadSopenharmony_ci | | COMPRESSED_SIGNED_RG_RGTC2 | 3105bd8deadSopenharmony_ci --------------------------------------------------------------------------- 3115bd8deadSopenharmony_ci | VIEW_CLASS_BPTC_UNORM | COMPRESSED_RGBA_BPTC_UNORM, | 3125bd8deadSopenharmony_ci | | COMPRESSED_SRGB_ALPHA_BPTC_UNORM | 3135bd8deadSopenharmony_ci --------------------------------------------------------------------------- 3145bd8deadSopenharmony_ci | VIEW_CLASS_BPTC_FLOAT | COMPRESSED_RGB_BPTC_SIGNED_FLOAT, | 3155bd8deadSopenharmony_ci | | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT | 3165bd8deadSopenharmony_ci --------------------------------------------------------------------------- 3175bd8deadSopenharmony_ci 3185bd8deadSopenharmony_ci Table 3.X.2: Compatible internal formats for TextureView. Formats in 3195bd8deadSopenharmony_ci the same entry may be cast to each other. 3205bd8deadSopenharmony_ci 3215bd8deadSopenharmony_ci If the internal format does not exactly match the internal format of the 3225bd8deadSopenharmony_ci original texture, the contents of the memory are reinterpreted in the same 3235bd8deadSopenharmony_ci manner as for image bindings described in section 3.9.20 (Texture Image 3245bd8deadSopenharmony_ci Loads and Stores). 3255bd8deadSopenharmony_ci 3265bd8deadSopenharmony_ci If <texture> has already been bound and given a target, then the error 3275bd8deadSopenharmony_ci INVALID_OPERATION is generated. If <texture> is 0, INVALID_VALUE is 3285bd8deadSopenharmony_ci generated. If <texture> is not a valid name returned by GenTextures, the 3295bd8deadSopenharmony_ci error INVALID_OPERATION is generated. 3305bd8deadSopenharmony_ci 3315bd8deadSopenharmony_ci If <origtexture> is not the name of a texture, INVALID_VALUE is generated. 3325bd8deadSopenharmony_ci If <origtexture>'s TEXTURE_IMMUTABLE_FORMAT value is not TRUE, 3335bd8deadSopenharmony_ci INVALID_OPERATION is generated. 3345bd8deadSopenharmony_ci 3355bd8deadSopenharmony_ci Texture commands that take a <level> or <layer> parameter, such as 3365bd8deadSopenharmony_ci TexSubImage2D, interpret that parameter to be relative to the view of the 3375bd8deadSopenharmony_ci texture. i.e. the mipmap level of the data store that would be updated via 3385bd8deadSopenharmony_ci TexSubImage2D would be the sum of <level> and the value of 3395bd8deadSopenharmony_ci TEXTURE_VIEW_MIN_LEVEL. 3405bd8deadSopenharmony_ci 3415bd8deadSopenharmony_ci 3425bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 4.2 Specification (Per-Fragment 3435bd8deadSopenharmony_ciOperations and the Frame Buffer) 3445bd8deadSopenharmony_ci 3455bd8deadSopenharmony_ci None. 3465bd8deadSopenharmony_ci 3475bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 4.2 Specification (Special Functions) 3485bd8deadSopenharmony_ci 3495bd8deadSopenharmony_ci None. 3505bd8deadSopenharmony_ci 3515bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 4.2 Specification (State and 3525bd8deadSopenharmony_ciState Requests) 3535bd8deadSopenharmony_ci 3545bd8deadSopenharmony_ci Modify subsection 6.1.3 (Enumerated Queries) 3555bd8deadSopenharmony_ci 3565bd8deadSopenharmony_ci Modify the paragraph after GetTexParameter on p. 350: 3575bd8deadSopenharmony_ci 3585bd8deadSopenharmony_ci ... <value> must be IMAGE_FORMAT_COMPATIBILITY_TYPE, 3595bd8deadSopenharmony_ci TEXTURE_IMMUTABLE_FORMAT, TEXTURE_VIEW_MIN_LEVEL, 3605bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LEVELS, TEXTURE_VIEW_MIN_LAYER, 3615bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LAYERS, or TEXTURE_IMMUTABLE_LEVELS. 3625bd8deadSopenharmony_ci 3635bd8deadSopenharmony_ciAdditions to Appendix D of the OpenGL 4.2 Specification (Shared Objects and 3645bd8deadSopenharmony_ciMultiple Contexts) 3655bd8deadSopenharmony_ci 3665bd8deadSopenharmony_ci Modify section D.3 (Propagating Changes to Objects) 3675bd8deadSopenharmony_ci 3685bd8deadSopenharmony_ci Modify the second bullet point on p 461: 3695bd8deadSopenharmony_ci 3705bd8deadSopenharmony_ci - The contents of the data stores of textures and renderbuffers. 3715bd8deadSopenharmony_ci 3725bd8deadSopenharmony_ci Add the following sentence to the paragraph that begins "When the contents 3735bd8deadSopenharmony_ci of an object <T>": 3745bd8deadSopenharmony_ci 3755bd8deadSopenharmony_ci When <T> is a texture, "the contents of an object <T>" should be construed 3765bd8deadSopenharmony_ci to include the contents of the data store of <T>, even if <T>'s data store 3775bd8deadSopenharmony_ci was modified via a different view of the data store. 3785bd8deadSopenharmony_ci 3795bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications 3805bd8deadSopenharmony_ci 3815bd8deadSopenharmony_ci None. 3825bd8deadSopenharmony_ci 3835bd8deadSopenharmony_ciGLX Protocol 3845bd8deadSopenharmony_ci 3855bd8deadSopenharmony_ci TBD 3865bd8deadSopenharmony_ci 3875bd8deadSopenharmony_ciDependencies on EXT_texture_compression_s3tc 3885bd8deadSopenharmony_ci 3895bd8deadSopenharmony_ci If EXT_texture_compression_s3tc and EXT_texture_sRGB are supported, then 3905bd8deadSopenharmony_ci Table 3.X.2 is updated to add the following rows: 3915bd8deadSopenharmony_ci 3925bd8deadSopenharmony_ci ------------------------------------------------------------------- 3935bd8deadSopenharmony_ci | Class | Internal formats | 3945bd8deadSopenharmony_ci ------------------------------------------------------------------- 3955bd8deadSopenharmony_ci | VIEW_CLASS_S3TC_DXT1_RGB | COMPRESSED_RGB_S3TC_DXT1_EXT, | 3965bd8deadSopenharmony_ci | | COMPRESSED_SRGB_S3TC_DXT1_EXT | 3975bd8deadSopenharmony_ci ------------------------------------------------------------------- 3985bd8deadSopenharmony_ci | VIEW_CLASS_S3TC_DXT1_RGBA | COMPRESSED_RGBA_S3TC_DXT1_EXT, | 3995bd8deadSopenharmony_ci | | COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT | 4005bd8deadSopenharmony_ci ------------------------------------------------------------------- 4015bd8deadSopenharmony_ci | VIEW_CLASS_S3TC_DXT3_RGBA | COMPRESSED_RGBA_S3TC_DXT3_EXT, | 4025bd8deadSopenharmony_ci | | COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT | 4035bd8deadSopenharmony_ci ------------------------------------------------------------------- 4045bd8deadSopenharmony_ci | VIEW_CLASS_S3TC_DXT5_RGBA | COMPRESSED_RGBA_S3TC_DXT5_EXT, | 4055bd8deadSopenharmony_ci | | COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT | 4065bd8deadSopenharmony_ci ------------------------------------------------------------------- 4075bd8deadSopenharmony_ci 4085bd8deadSopenharmony_ciInteractions with ARB_internalformat_query2 4095bd8deadSopenharmony_ci 4105bd8deadSopenharmony_ci The VIEW_CLASS_* tokens used as compatibility class names in table 3.X.2 4115bd8deadSopenharmony_ci are the same tokens returned by the VIEW_COMPATIBILITY_CLASS query in 4125bd8deadSopenharmony_ci ARB_internalformat_query2. In this extension they are simply a labelling 4135bd8deadSopenharmony_ci mechanism and serve no functional purpose in the API, so their numeric 4145bd8deadSopenharmony_ci values are not specified. 4155bd8deadSopenharmony_ci 4165bd8deadSopenharmony_ciDependencies on ARB_texture_storage_multisample 4175bd8deadSopenharmony_ci 4185bd8deadSopenharmony_ci Views are only supported for textures created by TexStorage. The original 4195bd8deadSopenharmony_ci ARB_texture_storage extension did not include TexStorage commands for 4205bd8deadSopenharmony_ci multisample textures. These are added by ARB_texture_storage_multisample, 4215bd8deadSopenharmony_ci so without that extension multisample textures cannot be used with views. 4225bd8deadSopenharmony_ci 4235bd8deadSopenharmony_ciErrors 4245bd8deadSopenharmony_ci 4255bd8deadSopenharmony_ci TODO 4265bd8deadSopenharmony_ci 4275bd8deadSopenharmony_ciNew State 4285bd8deadSopenharmony_ci 4295bd8deadSopenharmony_ci Changes to table 6.16, p. 277 (Texture, state per texture object) 4305bd8deadSopenharmony_ci 4315bd8deadSopenharmony_ci Initial 4325bd8deadSopenharmony_ci Get Value Type Get Command Value Description Sec. Attribute 4335bd8deadSopenharmony_ci --------- ---- ----------- ------- ----------- ---- --------- 4345bd8deadSopenharmony_ci TEXTURE_VIEW_MIN_LEVEL Z+ GetTexParameter 0 view base texture level 3.9.X texture 4355bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LEVELS Z+ GetTexParameter 0 view number of texture levels 3.9.X texture 4365bd8deadSopenharmony_ci TEXTURE_VIEW_MIN_LAYER Z+ GetTexParameter 0 view min array layer 3.9.X texture 4375bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LAYERS Z+ GetTexParameter 0 view number of array layers 3.9.X texture 4385bd8deadSopenharmony_ci TEXTURE_IMMUTABLE_LEVELS Z+ GetTexParameter 0 storage number of levels 3.9.X texture 4395bd8deadSopenharmony_ci 4405bd8deadSopenharmony_ciNew Implementation Dependent State 4415bd8deadSopenharmony_ci 4425bd8deadSopenharmony_ci None. 4435bd8deadSopenharmony_ci 4445bd8deadSopenharmony_ciExamples 4455bd8deadSopenharmony_ci 4465bd8deadSopenharmony_ci TODO 4475bd8deadSopenharmony_ci 4485bd8deadSopenharmony_ciIssues 4495bd8deadSopenharmony_ci 4505bd8deadSopenharmony_ci (1) What internal formats can be cast to what other formats? 4515bd8deadSopenharmony_ci 4525bd8deadSopenharmony_ci RESOLVED: In general, we try to follow the precedent from 4535bd8deadSopenharmony_ci ARB_shader_image_load_store where formats with the same element size can 4545bd8deadSopenharmony_ci be cast to each other. Some specific issues with that: 4555bd8deadSopenharmony_ci 4565bd8deadSopenharmony_ci - Depth formats cannot be cast to other formats. D3D1x handles depth 4575bd8deadSopenharmony_ci formats differently than GL, depth formats are not texturable and 4585bd8deadSopenharmony_ci instead there are equivalent "RG" formats for each depth format. In GL, 4595bd8deadSopenharmony_ci depth formats are all texturable and we don't have equivalent RG 4605bd8deadSopenharmony_ci formats for most of them (we only have R32F and R16). Since these can 4615bd8deadSopenharmony_ci be textured from in GL, there's no great need to cast them. 4625bd8deadSopenharmony_ci 4635bd8deadSopenharmony_ci - Compressed formats can only be cast to other compressed formats with 4645bd8deadSopenharmony_ci nearly identical encodings. Only the sRGB/signed-ness can change. See 4655bd8deadSopenharmony_ci also issue (10). 4665bd8deadSopenharmony_ci 4675bd8deadSopenharmony_ci - RGB formats cannot be cast to/from RGBA. For the case of RGBA->RGB, 4685bd8deadSopenharmony_ci the same can be accomplished using ARB_texture_swizzle. For the case 4695bd8deadSopenharmony_ci of RGB->RGBA, an RGB texture may have been allocated without storage 4705bd8deadSopenharmony_ci for alpha bits so this needs to be disallowed. 4715bd8deadSopenharmony_ci 4725bd8deadSopenharmony_ci (2) Should TEXTURE_IMMUTABLE_FORMAT be renamed? 4735bd8deadSopenharmony_ci 4745bd8deadSopenharmony_ci ARB_texture_storage isn't really about the format being immutable, it's 4755bd8deadSopenharmony_ci more about the data store not needing to be reallocated. This extension 4765bd8deadSopenharmony_ci allows interpreting the data store with a different format, so this enum 4775bd8deadSopenharmony_ci now feels poorly named. 4785bd8deadSopenharmony_ci 4795bd8deadSopenharmony_ci RESOLVED: Leave it as is. 4805bd8deadSopenharmony_ci 4815bd8deadSopenharmony_ci (3) Is it possible to create a texture view using an original texture 4825bd8deadSopenharmony_ci which is itself a view? And if so, how are the level/layer values 4835bd8deadSopenharmony_ci interpreted? 4845bd8deadSopenharmony_ci 4855bd8deadSopenharmony_ci RESOLVED: It is legal. For example, let's say texture 1 is a 2D_ARRAY 4865bd8deadSopenharmony_ci texture with 200 layers. It will have TEXTURE_VIEW_MIN_LAYER=0, 4875bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LAYERS=200. Then we create texture 2 from texture 1 using 4885bd8deadSopenharmony_ci <minlayer>=100, <numlayers>=100. It will have TEXTURE_VIEW_MIN_LAYER=100, 4895bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LAYERS=100. Then we create texture 3 from texture 2 using 4905bd8deadSopenharmony_ci <minlayer>=50, <numlayers>=50. It will have TEXTURE_VIEW_MIN_LAYER=150, 4915bd8deadSopenharmony_ci TEXTURE_VIEW_NUM_LAYERS=50. 4925bd8deadSopenharmony_ci 4935bd8deadSopenharmony_ci (4) Should we allow views of textures not created through TexStorage? 4945bd8deadSopenharmony_ci 4955bd8deadSopenharmony_ci RESOLVED: No. It might be possible, but if TexImage is called on a texture 4965bd8deadSopenharmony_ci whose data store is shared it would likely require orphaning the old data 4975bd8deadSopenharmony_ci store and creating/copying to a new data store. That's not desirable. 4985bd8deadSopenharmony_ci 4995bd8deadSopenharmony_ci (5) How are TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL interpreted if 5005bd8deadSopenharmony_ci TEXTURE_VIEW_MIN_LEVEL is non-zero? 5015bd8deadSopenharmony_ci 5025bd8deadSopenharmony_ci RESOLVED: The intent is that TEXTURE_BASE_LEVEL is relative to the view, 5035bd8deadSopenharmony_ci i.e. the base level is TEXTURE_BASE_LEVEL+TEXTURE_VIEW_MIN_LEVEL relative 5045bd8deadSopenharmony_ci to the data store. 5055bd8deadSopenharmony_ci 5065bd8deadSopenharmony_ci (6) Do we need any new "typeless" formats? 5075bd8deadSopenharmony_ci 5085bd8deadSopenharmony_ci RESOLVED: No. Any "compatible" format can be used in place of a typeless 5095bd8deadSopenharmony_ci format. 5105bd8deadSopenharmony_ci 5115bd8deadSopenharmony_ci (7) Why aren't BUFFER textures supported? 5125bd8deadSopenharmony_ci 5135bd8deadSopenharmony_ci RESOLVED: The same can be accomplished with the contemporaneous 5145bd8deadSopenharmony_ci GL_ARB_texture_buffer_range extension. 5155bd8deadSopenharmony_ci 5165bd8deadSopenharmony_ci (8) This extension requires TEXTURE_IMMUTABLE_FORMAT to be TRUE, 5175bd8deadSopenharmony_ci but we don't have TexStorage*Multisample. Should we add these 5185bd8deadSopenharmony_ci commands, or not require immutable format? 5195bd8deadSopenharmony_ci 5205bd8deadSopenharmony_ci RESOLVED: Add TexStorage*Multisample. This is done by 5215bd8deadSopenharmony_ci ARB_texture_storage_multisample. 5225bd8deadSopenharmony_ci 5235bd8deadSopenharmony_ci (9) Should it be possible to create a 2D view from a RECTANGLE texture 5245bd8deadSopenharmony_ci or vice versa? 5255bd8deadSopenharmony_ci 5265bd8deadSopenharmony_ci RESOLVED: No. These targets may have different max dimensions, or may be 5275bd8deadSopenharmony_ci allocated in memory with different tiling/swizzling. 5285bd8deadSopenharmony_ci 5295bd8deadSopenharmony_ci (10) Should it be possible to view a compressed texture in such a way 5305bd8deadSopenharmony_ci that a block of the compressed view corresponds to a texel of an 5315bd8deadSopenharmony_ci uncompressed view? For example, taking a 256x256 DXT1 texture and viewing 5325bd8deadSopenharmony_ci it as a 64x64 RG32UI texture? 5335bd8deadSopenharmony_ci 5345bd8deadSopenharmony_ci RESOLVED: No. The different mipmap stack sizes would be a problem, and 5355bd8deadSopenharmony_ci it's unclear whether all hardware could support this. Maybe a future 5365bd8deadSopenharmony_ci extension could enable this, but only allowing the view to have a single 5375bd8deadSopenharmony_ci level? 5385bd8deadSopenharmony_ci 5395bd8deadSopenharmony_ci (11) Interaction between TEXTURE_IMMUTABLE_LEVELS and View textures? 5405bd8deadSopenharmony_ci 5415bd8deadSopenharmony_ci RESOLVED: There are several new TexParameter queries, and the values they 5425bd8deadSopenharmony_ci return depend on how the texture was created: 5435bd8deadSopenharmony_ci 5445bd8deadSopenharmony_ci - If the texture is in its initial state or the data store was created 5455bd8deadSopenharmony_ci with TexImage, then all five new parameters are zero. 5465bd8deadSopenharmony_ci 5475bd8deadSopenharmony_ci - If the texture was created with TexStorage, then the parameters take 5485bd8deadSopenharmony_ci their values from the arguments, with both MIN parameters being zero, 5495bd8deadSopenharmony_ci both LEVELS parameters being <levels>, and NUM_LAYERS being the number 5505bd8deadSopenharmony_ci of layers if it's an array texture. 5515bd8deadSopenharmony_ci 5525bd8deadSopenharmony_ci - If the texture was created with TextureView, then the VIEW parameters 5535bd8deadSopenharmony_ci describe the texture's subset of the entire data store, and 5545bd8deadSopenharmony_ci IMMUTABLE_LEVELS is inherited from the original texture. 5555bd8deadSopenharmony_ci 5565bd8deadSopenharmony_ci (12) Are uses of two different views of the same data store automatically 5575bd8deadSopenharmony_ci coherent? 5585bd8deadSopenharmony_ci 5595bd8deadSopenharmony_ci RESOLVED: Yes, to the extent that they were for a single texture. A few 5605bd8deadSopenharmony_ci examples of this are: 5615bd8deadSopenharmony_ci 5625bd8deadSopenharmony_ci - TexSubImage to view A followed by texturing from view B. 5635bd8deadSopenharmony_ci 5645bd8deadSopenharmony_ci - Rendering to view A attached to an FBO followed by texturing from 5655bd8deadSopenharmony_ci view B. 5665bd8deadSopenharmony_ci 5675bd8deadSopenharmony_ci - Shader image stores to view A followed by texturing from view B. 5685bd8deadSopenharmony_ci 5695bd8deadSopenharmony_ci The first two cases would automatically work correctly if A and B were 5705bd8deadSopenharmony_ci the same texture, as described in Appendix D, so they continue to work 5715bd8deadSopenharmony_ci with separate views. If an implementation were (for example) tracking 5725bd8deadSopenharmony_ci uses of the texture to do cache invalidations, it should do such 5735bd8deadSopenharmony_ci tracking on the data store instead. 5745bd8deadSopenharmony_ci 5755bd8deadSopenharmony_ci The third case would not automatically work if A and B were the same 5765bd8deadSopenharmony_ci texture, instead requiring a MemoryBarrier call to force coherency. This 5775bd8deadSopenharmony_ci same solution applies with texture views. 5785bd8deadSopenharmony_ci 5795bd8deadSopenharmony_ci (13) Are interactions with ETC2/EAC compressed texture formats defined? 5805bd8deadSopenharmony_ci 5815bd8deadSopenharmony_ci RESOLVED: No. It is likely that these formats are emulated with 5825bd8deadSopenharmony_ci uncompressed internal formats on older hardware, and the resulting 5835bd8deadSopenharmony_ci complications make defining texture view classes for these formats too 5845bd8deadSopenharmony_ci difficult for too little functionality. 5855bd8deadSopenharmony_ci 5865bd8deadSopenharmony_ci 5875bd8deadSopenharmony_ciRevision History 5885bd8deadSopenharmony_ci 5895bd8deadSopenharmony_ci Rev. Date Author Changes 5905bd8deadSopenharmony_ci ---- -------- -------- ----------------------------------------- 5915bd8deadSopenharmony_ci 5 10/08/13 Jon Leech Add issue 13 discussing why ETC2/EAC view 5925bd8deadSopenharmony_ci classes aren't supported (Bug 11011). 5935bd8deadSopenharmony_ci 4 07/15/13 Jon Leech Change "Class" column of table 3.X.2 from 5945bd8deadSopenharmony_ci abstract names to VIEW_CLASS_* enums from 5955bd8deadSopenharmony_ci ARB_internalformat_query2 (Bug 10518). 5965bd8deadSopenharmony_ci 3 08/13/12 Jon Leech Renumbered from #142 to #124 5975bd8deadSopenharmony_ci 2 05/07/12 dgkoch Added class names to Table 3.X.2 5985bd8deadSopenharmony_ci 1 jbolz Internal revisions. 599