| Name |
| |
| ARB_texture_view |
| |
| Name Strings |
| |
| GL_ARB_texture_view |
| |
| Contact |
| |
| Jeff Bolz, NVIDIA Corporation (jbolz 'at' nvidia.com) |
| |
| Contributors |
| |
| Pat Brown, NVIDIA |
| Daniel Koch, TransGaming |
| Jon Leech |
| |
| Notice |
| |
| Copyright (c) 2012-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Specification Update Policy |
| |
| Khronos-approved extension specifications are updated in response to |
| issues and bugs prioritized by the Khronos OpenGL Working Group. For |
| extensions which have been promoted to a core Specification, fixes will |
| first appear in the latest version of that core Specification, and will |
| eventually be backported to the extension document. This policy is |
| described in more detail at |
| https://www.khronos.org/registry/OpenGL/docs/update_policy.php |
| |
| Status |
| |
| Complete. |
| Approved by the ARB on 2012/06/12. |
| |
| Version |
| |
| Last Modified Date: July 15, 2013 |
| Revision: 4 |
| |
| Number |
| |
| ARB Extension #124 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL 4.2 Core profile |
| specification. |
| |
| ARB_texture_storage or OpenGL 4.2 is required. |
| |
| ARB_internalformat_query2 interacts with this extension. |
| |
| EXT_texture_compression_s3tc interacts with this extension. |
| |
| EXT_texture_sRGB interacts with this extension. |
| |
| ARB_texture_storage_multisample interacts with this extension. |
| |
| Overview |
| |
| This extension allows a texture's data store to be "viewed" in multiple |
| ways, either reinterpreting the data format/type as a different format/ |
| type with the same element size, or by clamping the mipmap level range |
| or array slice range. |
| |
| The goals of this extension are to avoid having these alternate views |
| become shared mutable containers of shared mutable objects, and to add |
| the views to the API in a minimally invasive way. |
| |
| No new object types are added. Conceptually, a texture object is split |
| into the following parts: |
| |
| - A data store holding texel data. |
| - State describing which portions of the data store to use, and how |
| to interpret the data elements. |
| - An embedded sampler object. |
| - Various other texture parameters. |
| |
| With this extension, multiple textures can share a data store and have |
| different state describing which portions of the data store to use and how |
| to interpret the data elements. The data store is refcounted and not |
| destroyed until the last texture sharing it is deleted. |
| |
| This extension leverages the ARB_texture_storage concept of an "immutable |
| texture". Views can only be created of textures created with TexStorage. |
| |
| |
| New Procedures and Functions |
| |
| void TextureView(uint texture, enum target, uint origtexture, |
| enum internalformat, |
| uint minlevel, uint numlevels, |
| uint minlayer, uint numlayers); |
| |
| New Tokens |
| |
| Accepted by the <pname> parameters of GetTexParameterfv and |
| GetTexParameteriv: |
| |
| TEXTURE_VIEW_MIN_LEVEL 0x82DB |
| TEXTURE_VIEW_NUM_LEVELS 0x82DC |
| TEXTURE_VIEW_MIN_LAYER 0x82DD |
| TEXTURE_VIEW_NUM_LAYERS 0x82DE |
| TEXTURE_IMMUTABLE_LEVELS 0x82DF |
| |
| Used as compatibility class names in table 3.X.2 (see the "Interactions |
| with ARB_internalformat_query2" section below). |
| |
| VIEW_CLASS_128_BITS |
| VIEW_CLASS_96_BITS |
| VIEW_CLASS_64_BITS |
| VIEW_CLASS_48_BITS |
| VIEW_CLASS_32_BITS |
| VIEW_CLASS_24_BITS |
| VIEW_CLASS_16_BITS |
| VIEW_CLASS_8_BITS |
| VIEW_CLASS_S3TC_DXT1_RGB |
| VIEW_CLASS_S3TC_DXT1_RGBA |
| VIEW_CLASS_S3TC_DXT3_RGBA |
| VIEW_CLASS_S3TC_DXT5_RGBA |
| VIEW_CLASS_RGTC1_RED |
| VIEW_CLASS_RGTC2_RG |
| VIEW_CLASS_BPTC_UNORM |
| VIEW_CLASS_BPTC_FLOAT |
| |
| |
| Additions to Chapter 2 of the OpenGL 4.2 Specification (OpenGL Operation) |
| |
| None. |
| |
| Additions to Chapter 3 of the OpenGL 4.2 Specification (Rasterization) |
| |
| Modify subsection 3.9.8 (Texture Parameters) |
| |
| Add the following to the end of the paragraph on p. 240: |
| |
| If the texture was created with TextureView, then the TEXTURE_BASE_LEVEL |
| and TEXTURE_MAX_LEVEL parameters are interpreted relative to the view and |
| not relative to the original data store. |
| |
| Modify subsection 3.9.15 (Texture State and Proxy State) |
| |
| Add to the second paragraph on p. 256: |
| |
| The values of TEXTURE_IMMUTABLE_LEVELS, TEXTURE_VIEW_MIN_LEVEL, |
| TEXTURE_VIEW_NUM_LEVELS, TEXTURE_VIEW_MIN_LAYER, TEXTURE_VIEW_NUM_LAYERS |
| are 0. |
| |
| Modify subsection 3.9.16 (Immutable-Format Texture Images) |
| |
| Modify the second to last bullet on p. 258: |
| |
| If the command is successful, TEXTURE_IMMUTABLE_FORMAT becomes TRUE, |
| TEXTURE_IMMUTABLE_LEVELS and TEXTURE_VIEW_NUM_LEVELS become <levels>. |
| If the texture target is TEXTURE_1D_ARRAY then TEXTURE_VIEW_NUM_LAYERS |
| becomes <height>. If the texture target is TEXTURE_2D_ARRAY, |
| TEXTURE_CUBE_MAP_ARRAY, or TEXTURE_2D_MULTISAMPLE_ARRAY then |
| TEXTURE_VIEW_NUM_LAYERS becomes <depth>. If the texture target is |
| TEXTURE_CUBE_MAP, then TEXTURE_VIEW_NUM_LAYERS becomes 6. For any other |
| texture target, TEXTURE_VIEW_NUM_LAYERS becomes 1. |
| |
| Add a new subsection at the end of 3.9 (Texturing) |
| |
| 3.9.X Texture Views |
| |
| A texture can be created which references the data store of another texture |
| and interprets the data with a different format, and/or selects a subset of |
| the levels and/or layers of the other texture. The data store for such a |
| texture is shared with the data store of the original texture. Updating |
| the shared data store using the original texture affects texture values read |
| using the new texture, and vice versa. A texture data store remains in |
| existence until all textures that reference it are deleted. |
| |
| The command: |
| |
| void TextureView(uint texture, enum target, uint origtexture, |
| enum internalformat, |
| uint minlevel, uint numlevels, |
| uint minlayer, uint numlayers); |
| |
| initializes the texture named <texture> to the target specified by |
| <target>. <texture>'s data store is inherited from the texture named |
| <origtexture>, but elements of the data store are interpreted according |
| to the internal format specified by <internalformat>. Additionally, if the |
| original texture is an array or has multiple mipmap levels, the parameters |
| <minlayer>, <numlayers>, <minlevel>, and <numlevels> control which of those |
| slices and levels are considered part of the texture. |
| |
| The <minlevel> and <minlayer> parameters are relative to the view of the |
| original texture. If <numlayers> or <numlevels> extend beyond the original |
| texture, they are clamped to the max extent of the original texture. If |
| <minlevel> or <minlayer> are larger than the greatest level or layer of the |
| original texture, the error INVALID_VALUE is generated. |
| |
| If the command is successful, the texture parameters in <texture> are |
| updated as follows: |
| |
| - TEXTURE_IMMUTABLE_FORMAT is set to TRUE. |
| |
| - TEXTURE_IMMUTABLE_LEVELS is set to the value of TEXTURE_IMMUTABLE_LEVELS |
| from the original texture. |
| |
| - TEXTURE_VIEW_MIN_LEVEL is set to <minlevel> plus the value of |
| TEXTURE_VIEW_MIN_LEVEL from the original texture. |
| |
| - TEXTURE_VIEW_MIN_LAYER is set to <minlayer> plus the value of |
| TEXTURE_VIEW_MIN_LAYER from the original texture. |
| |
| - TEXTURE_VIEW_NUM_LEVELS is set to the lesser of <numlevels> and the |
| value of TEXTURE_VIEW_NUM_LEVELS from the original texture minus |
| <minlevels>. |
| |
| - TEXTURE_VIEW_NUM_LAYERS is set to the lesser of <numlayers> and the |
| value of TEXTURE_VIEW_NUM_LAYERS from the original texture minus |
| <minlayer>. |
| |
| The new texture's target must be "compatible" with the target of the |
| original texture, or else an INVALID_OPERATION error is generated. |
| Compatibility is defined by Table 3.X.1: |
| |
| --------------------------------------------------------------------------------------------------------- |
| | Original target | Valid new targets | |
| --------------------------------------------------------------------------------------------------------- |
| | TEXTURE_1D | TEXTURE_1D, TEXTURE_1D_ARRAY | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_2D | TEXTURE_2D, TEXTURE_2D_ARRAY | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_3D | TEXTURE_3D | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_CUBE_MAP | TEXTURE_CUBE_MAP, TEXTURE_2D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_RECTANGLE | TEXTURE_RECTANGLE | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_BUFFER | <none> | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_1D_ARRAY | TEXTURE_1D_ARRAY, TEXTURE_1D | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_2D_ARRAY | TEXTURE_2D_ARRAY, TEXTURE_2D, TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_CUBE_MAP_ARRAY | TEXTURE_CUBE_MAP_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_2D, TEXTURE_CUBE_MAP | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_2D_MULTISAMPLE | TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY | |
| |-------------------------------------------------------------------------------------------------------| |
| | TEXTURE_2D_MULTISAMPLE_ARRAY| TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY | |
| --------------------------------------------------------------------------------------------------------- |
| |
| Table 3.X.1: Legal texture targets for TextureView. |
| |
| If the new texture's target is TEXTURE_CUBE_MAP, the clamped <numlayers> |
| must be equal to 6. If the new texture's target is TEXTURE_CUBE_MAP_ARRAY, |
| then <numlayers> counts layer-faces rather than layers, and the clamped |
| <numlayers> must be a multiple of 6. Otherwise, the error INVALID_VALUE is |
| generated. If the new texture's target is TEXTURE_CUBE_MAP or |
| TEXTURE_CUBE_MAP_ARRAY, the width and height of the original texture's |
| levels must be equal otherwise the error INVALID_OPERATION is generated. |
| |
| When the original texture's target is TEXTURE_CUBE_MAP, the layer |
| parameters are interpreted in the same order as if it were a |
| TEXTURE_CUBE_MAP_ARRAY with 6 layer-faces. |
| |
| If <target> is TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_RECTANGLE, or |
| TEXTURE_2D_MULTISAMPLE and <numlayers> does not equal 1, the error |
| INVALID_VALUE is generated. |
| |
| If the dimensions of the original texture are larger than the maximum |
| supported dimensions of the new target, the error INVALID_OPERATION is |
| generated. For example, if the original texture has a TEXTURE_2D_ARRAY |
| target and its width is greater than MAX_CUBE_MAP_TEXTURE_SIZE, an error |
| will be generated if TextureView is called to create a TEXTURE_CUBE_MAP |
| view. |
| |
| The two textures' internal formats must be compatible according to Table |
| 3.X.2 (Compatible internal formats for TextureView) if the internal format |
| exists in that table and the internal formats must be identical if not in |
| that table, or else an INVALID_OPERATION error is generated. |
| |
| --------------------------------------------------------------------------- |
| | Class | Internal formats | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_128_BITS | RGBA32F, RGBA32UI, RGBA32I | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_96_BITS | RGB32F, RGB32UI, RGB32I | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_64_BITS | RGBA16F, RG32F, RGBA16UI, RG32UI, RGBA16I, | |
| | | RG32I, RGBA16, RGBA16_SNORM | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_48_BITS | RGB16, RGB16_SNORM, RGB16F, RGB16UI, RGB16I | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_32_BITS | RG16F, R11F_G11F_B10F, R32F, | |
| | | RGB10_A2UI, RGBA8UI, RG16UI, R32UI, | |
| | | RGBA8I, RG16I, R32I, RGB10_A2, RGBA8, RG16, | |
| | | RGBA8_SNORM, RG16_SNORM, SRGB8_ALPHA8, RGB9_E5 | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_24_BITS | RGB8, RGB8_SNORM, SRGB8, RGB8UI, RGB8I | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_16_BITS | R16F, RG8UI, R16UI, RG8I, R16I, RG8, R16, | |
| | | RG8_SNORM, R16_SNORM | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_8_BITS | R8UI, R8I, R8, R8_SNORM | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_RGTC1_RED | COMPRESSED_RED_RGTC1, | |
| | | COMPRESSED_SIGNED_RED_RGTC1 | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_RGTC2_RG | COMPRESSED_RG_RGTC2, | |
| | | COMPRESSED_SIGNED_RG_RGTC2 | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_BPTC_UNORM | COMPRESSED_RGBA_BPTC_UNORM, | |
| | | COMPRESSED_SRGB_ALPHA_BPTC_UNORM | |
| --------------------------------------------------------------------------- |
| | VIEW_CLASS_BPTC_FLOAT | COMPRESSED_RGB_BPTC_SIGNED_FLOAT, | |
| | | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT | |
| --------------------------------------------------------------------------- |
| |
| Table 3.X.2: Compatible internal formats for TextureView. Formats in |
| the same entry may be cast to each other. |
| |
| If the internal format does not exactly match the internal format of the |
| original texture, the contents of the memory are reinterpreted in the same |
| manner as for image bindings described in section 3.9.20 (Texture Image |
| Loads and Stores). |
| |
| If <texture> has already been bound and given a target, then the error |
| INVALID_OPERATION is generated. If <texture> is 0, INVALID_VALUE is |
| generated. If <texture> is not a valid name returned by GenTextures, the |
| error INVALID_OPERATION is generated. |
| |
| If <origtexture> is not the name of a texture, INVALID_VALUE is generated. |
| If <origtexture>'s TEXTURE_IMMUTABLE_FORMAT value is not TRUE, |
| INVALID_OPERATION is generated. |
| |
| Texture commands that take a <level> or <layer> parameter, such as |
| TexSubImage2D, interpret that parameter to be relative to the view of the |
| texture. i.e. the mipmap level of the data store that would be updated via |
| TexSubImage2D would be the sum of <level> and the value of |
| TEXTURE_VIEW_MIN_LEVEL. |
| |
| |
| Additions to Chapter 4 of the OpenGL 4.2 Specification (Per-Fragment |
| Operations and the Frame Buffer) |
| |
| None. |
| |
| Additions to Chapter 5 of the OpenGL 4.2 Specification (Special Functions) |
| |
| None. |
| |
| Additions to Chapter 6 of the OpenGL 4.2 Specification (State and |
| State Requests) |
| |
| Modify subsection 6.1.3 (Enumerated Queries) |
| |
| Modify the paragraph after GetTexParameter on p. 350: |
| |
| ... <value> must be IMAGE_FORMAT_COMPATIBILITY_TYPE, |
| TEXTURE_IMMUTABLE_FORMAT, TEXTURE_VIEW_MIN_LEVEL, |
| TEXTURE_VIEW_NUM_LEVELS, TEXTURE_VIEW_MIN_LAYER, |
| TEXTURE_VIEW_NUM_LAYERS, or TEXTURE_IMMUTABLE_LEVELS. |
| |
| Additions to Appendix D of the OpenGL 4.2 Specification (Shared Objects and |
| Multiple Contexts) |
| |
| Modify section D.3 (Propagating Changes to Objects) |
| |
| Modify the second bullet point on p 461: |
| |
| - The contents of the data stores of textures and renderbuffers. |
| |
| Add the following sentence to the paragraph that begins "When the contents |
| of an object <T>": |
| |
| When <T> is a texture, "the contents of an object <T>" should be construed |
| to include the contents of the data store of <T>, even if <T>'s data store |
| was modified via a different view of the data store. |
| |
| Additions to the AGL/GLX/WGL Specifications |
| |
| None. |
| |
| GLX Protocol |
| |
| TBD |
| |
| Dependencies on EXT_texture_compression_s3tc |
| |
| If EXT_texture_compression_s3tc and EXT_texture_sRGB are supported, then |
| Table 3.X.2 is updated to add the following rows: |
| |
| ------------------------------------------------------------------- |
| | Class | Internal formats | |
| ------------------------------------------------------------------- |
| | VIEW_CLASS_S3TC_DXT1_RGB | COMPRESSED_RGB_S3TC_DXT1_EXT, | |
| | | COMPRESSED_SRGB_S3TC_DXT1_EXT | |
| ------------------------------------------------------------------- |
| | VIEW_CLASS_S3TC_DXT1_RGBA | COMPRESSED_RGBA_S3TC_DXT1_EXT, | |
| | | COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT | |
| ------------------------------------------------------------------- |
| | VIEW_CLASS_S3TC_DXT3_RGBA | COMPRESSED_RGBA_S3TC_DXT3_EXT, | |
| | | COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT | |
| ------------------------------------------------------------------- |
| | VIEW_CLASS_S3TC_DXT5_RGBA | COMPRESSED_RGBA_S3TC_DXT5_EXT, | |
| | | COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT | |
| ------------------------------------------------------------------- |
| |
| Interactions with ARB_internalformat_query2 |
| |
| The VIEW_CLASS_* tokens used as compatibility class names in table 3.X.2 |
| are the same tokens returned by the VIEW_COMPATIBILITY_CLASS query in |
| ARB_internalformat_query2. In this extension they are simply a labelling |
| mechanism and serve no functional purpose in the API, so their numeric |
| values are not specified. |
| |
| Dependencies on ARB_texture_storage_multisample |
| |
| Views are only supported for textures created by TexStorage. The original |
| ARB_texture_storage extension did not include TexStorage commands for |
| multisample textures. These are added by ARB_texture_storage_multisample, |
| so without that extension multisample textures cannot be used with views. |
| |
| Errors |
| |
| TODO |
| |
| New State |
| |
| Changes to table 6.16, p. 277 (Texture, state per texture object) |
| |
| Initial |
| Get Value Type Get Command Value Description Sec. Attribute |
| --------- ---- ----------- ------- ----------- ---- --------- |
| TEXTURE_VIEW_MIN_LEVEL Z+ GetTexParameter 0 view base texture level 3.9.X texture |
| TEXTURE_VIEW_NUM_LEVELS Z+ GetTexParameter 0 view number of texture levels 3.9.X texture |
| TEXTURE_VIEW_MIN_LAYER Z+ GetTexParameter 0 view min array layer 3.9.X texture |
| TEXTURE_VIEW_NUM_LAYERS Z+ GetTexParameter 0 view number of array layers 3.9.X texture |
| TEXTURE_IMMUTABLE_LEVELS Z+ GetTexParameter 0 storage number of levels 3.9.X texture |
| |
| New Implementation Dependent State |
| |
| None. |
| |
| Examples |
| |
| TODO |
| |
| Issues |
| |
| (1) What internal formats can be cast to what other formats? |
| |
| RESOLVED: In general, we try to follow the precedent from |
| ARB_shader_image_load_store where formats with the same element size can |
| be cast to each other. Some specific issues with that: |
| |
| - Depth formats cannot be cast to other formats. D3D1x handles depth |
| formats differently than GL, depth formats are not texturable and |
| instead there are equivalent "RG" formats for each depth format. In GL, |
| depth formats are all texturable and we don't have equivalent RG |
| formats for most of them (we only have R32F and R16). Since these can |
| be textured from in GL, there's no great need to cast them. |
| |
| - Compressed formats can only be cast to other compressed formats with |
| nearly identical encodings. Only the sRGB/signed-ness can change. See |
| also issue (10). |
| |
| - RGB formats cannot be cast to/from RGBA. For the case of RGBA->RGB, |
| the same can be accomplished using ARB_texture_swizzle. For the case |
| of RGB->RGBA, an RGB texture may have been allocated without storage |
| for alpha bits so this needs to be disallowed. |
| |
| (2) Should TEXTURE_IMMUTABLE_FORMAT be renamed? |
| |
| ARB_texture_storage isn't really about the format being immutable, it's |
| more about the data store not needing to be reallocated. This extension |
| allows interpreting the data store with a different format, so this enum |
| now feels poorly named. |
| |
| RESOLVED: Leave it as is. |
| |
| (3) Is it possible to create a texture view using an original texture |
| which is itself a view? And if so, how are the level/layer values |
| interpreted? |
| |
| RESOLVED: It is legal. For example, let's say texture 1 is a 2D_ARRAY |
| texture with 200 layers. It will have TEXTURE_VIEW_MIN_LAYER=0, |
| TEXTURE_VIEW_NUM_LAYERS=200. Then we create texture 2 from texture 1 using |
| <minlayer>=100, <numlayers>=100. It will have TEXTURE_VIEW_MIN_LAYER=100, |
| TEXTURE_VIEW_NUM_LAYERS=100. Then we create texture 3 from texture 2 using |
| <minlayer>=50, <numlayers>=50. It will have TEXTURE_VIEW_MIN_LAYER=150, |
| TEXTURE_VIEW_NUM_LAYERS=50. |
| |
| (4) Should we allow views of textures not created through TexStorage? |
| |
| RESOLVED: No. It might be possible, but if TexImage is called on a texture |
| whose data store is shared it would likely require orphaning the old data |
| store and creating/copying to a new data store. That's not desirable. |
| |
| (5) How are TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL interpreted if |
| TEXTURE_VIEW_MIN_LEVEL is non-zero? |
| |
| RESOLVED: The intent is that TEXTURE_BASE_LEVEL is relative to the view, |
| i.e. the base level is TEXTURE_BASE_LEVEL+TEXTURE_VIEW_MIN_LEVEL relative |
| to the data store. |
| |
| (6) Do we need any new "typeless" formats? |
| |
| RESOLVED: No. Any "compatible" format can be used in place of a typeless |
| format. |
| |
| (7) Why aren't BUFFER textures supported? |
| |
| RESOLVED: The same can be accomplished with the contemporaneous |
| GL_ARB_texture_buffer_range extension. |
| |
| (8) This extension requires TEXTURE_IMMUTABLE_FORMAT to be TRUE, |
| but we don't have TexStorage*Multisample. Should we add these |
| commands, or not require immutable format? |
| |
| RESOLVED: Add TexStorage*Multisample. This is done by |
| ARB_texture_storage_multisample. |
| |
| (9) Should it be possible to create a 2D view from a RECTANGLE texture |
| or vice versa? |
| |
| RESOLVED: No. These targets may have different max dimensions, or may be |
| allocated in memory with different tiling/swizzling. |
| |
| (10) Should it be possible to view a compressed texture in such a way |
| that a block of the compressed view corresponds to a texel of an |
| uncompressed view? For example, taking a 256x256 DXT1 texture and viewing |
| it as a 64x64 RG32UI texture? |
| |
| RESOLVED: No. The different mipmap stack sizes would be a problem, and |
| it's unclear whether all hardware could support this. Maybe a future |
| extension could enable this, but only allowing the view to have a single |
| level? |
| |
| (11) Interaction between TEXTURE_IMMUTABLE_LEVELS and View textures? |
| |
| RESOLVED: There are several new TexParameter queries, and the values they |
| return depend on how the texture was created: |
| |
| - If the texture is in its initial state or the data store was created |
| with TexImage, then all five new parameters are zero. |
| |
| - If the texture was created with TexStorage, then the parameters take |
| their values from the arguments, with both MIN parameters being zero, |
| both LEVELS parameters being <levels>, and NUM_LAYERS being the number |
| of layers if it's an array texture. |
| |
| - If the texture was created with TextureView, then the VIEW parameters |
| describe the texture's subset of the entire data store, and |
| IMMUTABLE_LEVELS is inherited from the original texture. |
| |
| (12) Are uses of two different views of the same data store automatically |
| coherent? |
| |
| RESOLVED: Yes, to the extent that they were for a single texture. A few |
| examples of this are: |
| |
| - TexSubImage to view A followed by texturing from view B. |
| |
| - Rendering to view A attached to an FBO followed by texturing from |
| view B. |
| |
| - Shader image stores to view A followed by texturing from view B. |
| |
| The first two cases would automatically work correctly if A and B were |
| the same texture, as described in Appendix D, so they continue to work |
| with separate views. If an implementation were (for example) tracking |
| uses of the texture to do cache invalidations, it should do such |
| tracking on the data store instead. |
| |
| The third case would not automatically work if A and B were the same |
| texture, instead requiring a MemoryBarrier call to force coherency. This |
| same solution applies with texture views. |
| |
| (13) Are interactions with ETC2/EAC compressed texture formats defined? |
| |
| RESOLVED: No. It is likely that these formats are emulated with |
| uncompressed internal formats on older hardware, and the resulting |
| complications make defining texture view classes for these formats too |
| difficult for too little functionality. |
| |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- -------- -------- ----------------------------------------- |
| 5 10/08/13 Jon Leech Add issue 13 discussing why ETC2/EAC view |
| classes aren't supported (Bug 11011). |
| 4 07/15/13 Jon Leech Change "Class" column of table 3.X.2 from |
| abstract names to VIEW_CLASS_* enums from |
| ARB_internalformat_query2 (Bug 10518). |
| 3 08/13/12 Jon Leech Renumbered from #142 to #124 |
| 2 05/07/12 dgkoch Added class names to Table 3.X.2 |
| 1 jbolz Internal revisions. |