Path: blob/main_old/extensions/ANGLE_external_objects_flags.txt
1693 views
Name12ANGLE_external_objects_flags34Name Strings56GL_ANGLE_memory_object_flags78Contributors910Shahbaz Youssefi, Google1112Contact1314Shahbaz Youssefi, Google (syoussefi 'at' google.com)1516Status1718Draft1920Version2122Last Modified Date: Aug 3, 202023Revision: 12425Number2627TBD2829Dependencies3031Written against the OpenGL 4.5 and OpenGL ES 3.2 specifications3233GL_ANGLE_memory_object_flags requires GL_EXT_memory_object.3435Overview3637Building upon the OpenGL memory object framework defined in38EXT_external_objects, this extension introduces new Texture entry points39for specifying create and usage flags parameters. These parameters match40an external Texture's corresponding Vulkan create and usage flags. This41allows applications to drop usage flags that are detrimental to42performance, or add create flags as necessary.4344New Procedures and Functions4546The following commands are added:4748void TexStorageMemFlags2DANGLE(enum target,49sizei levels,50enum internalFormat,51sizei width,52sizei height,53uint memory,54uint64 offset,55bitfield createFlags,56bitfield usageFlags);5758void TexStorageMemFlags2DMultisampleANGLE(enum target,59sizei samples,60enum internalFormat,61sizei width,62sizei height,63boolean fixedSampleLocations,64uint memory,65uint64 offset,66bitfield createFlags,67bitfield usageFlags);6869void TexStorageMemFlags3DANGLE(enum target,70sizei levels,71enum internalFormat,72sizei width,73sizei height,74sizei depth,75uint memory,76uint64 offset,77bitfield createFlags,78bitfield usageFlags);7980void TexStorageMemFlags3DMultisampleANGLE(enum target,81sizei samples,82enum internalFormat,83sizei width,84sizei height,85sizei depth,86boolean fixedSampleLocations,87uint memory,88uint64 offset,89bitfield createFlags,90bitfield usageFlags);9192[[ The following are added if direct state access is supported ]]9394void TextureStorageMemFlags2DANGLE(uint texture,95sizei levels,96enum internalFormat,97sizei width,98sizei height,99uint memory,100uint64 offset,101bitfield createFlags,102bitfield usageFlags);103104void TextureStorageMemFlags2DMultisampleANGLE(uint texture,105sizei samples,106enum internalFormat,107sizei width,108sizei height,109boolean fixedSampleLocations,110uint memory,111uint64 offset,112bitfield createFlags,113bitfield usageFlags);114115void TextureStorageMemFlags3DANGLE(uint texture,116sizei levels,117enum internalFormat,118sizei width,119sizei height,120sizei depth,121uint memory,122uint64 offset,123bitfield createFlags,124bitfield usageFlags);125126void TextureStorageMemFlags3DMultisampleANGLE(uint texture,127sizei samples,128enum internalFormat,129sizei width,130sizei height,131sizei depth,132boolean fixedSampleLocations,133uint memory,134uint64 offset,135bitfield createFlags,136bitfield usageFlags);137138[[ The following are available in OpenGL only ]]139140void TexStorageMemFlags1DANGLE(enum target,141sizei levels,142enum internalFormat,143sizei width,144uint memory,145uint64 offset,146bitfield createFlags,147bitfield usageFlags);148149[[ The following are availble in OpenGL only, and only when150direct state access is available ]]151152void TextureStorageMemFlags1DANGLE(uint texture,153sizei levels,154enum internalFormat,155sizei width,156uint memory,157uint64 offset,158bitfield createFlags,159bitfield usageFlags);160161New Tokens162163The following tokens are added:164165Accepted by the <createFlags> parameter of TexStorageMemFlags*ANGLE() and166TextureStorageMemFlags*ANGLE().167168CREATE_SPARSE_BINDING_BIT_ANGLE 0x00000001169CREATE_SPARSE_RESIDENCY_BIT_ANGLE 0x00000002170CREATE_SPARSE_ALIASED_BIT_ANGLE 0x00000004171CREATE_MUTABLE_FORMAT_BIT_ANGLE 0x00000008172CREATE_CUBE_COMPATIBLE_BIT_ANGLE 0x00000010173CREATE_ALIAS_BIT_ANGLE 0x00000400174CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_ANGLE 0x00000040175CREATE_2D_ARRAY_COMPATIBLE_BIT_ANGLE 0x00000020176CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_ANGLE 0x00000080177CREATE_EXTENDED_USAGE_BIT_ANGLE 0x00000100178CREATE_PROTECTED_BIT_ANGLE 0x00000800179CREATE_DISJOINT_BIT_ANGLE 0x00000200180CREATE_CORNER_SAMPLED_BIT_ANGLE 0x00002000181CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_ANGLE 0x00001000182CREATE_SUBSAMPLED_BIT_ANGLE 0x00004000183184Accepted by the <usageFlags> parameter of TexStorageMemFlags*ANGLE() and185TextureStorageMemFlags*ANGLE().186187USAGE_TRANSFER_SRC_BIT_ANGLE 0x00000001188USAGE_TRANSFER_DST_BIT_ANGLE 0x00000002189USAGE_SAMPLED_BIT_ANGLE 0x00000004190USAGE_STORAGE_BIT_ANGLE 0x00000008191USAGE_COLOR_ATTACHMENT_BIT_ANGLE 0x00000010192USAGE_DEPTH_STENCIL_ATTACHMENT_BIT_ANGLE 0x00000020193USAGE_TRANSIENT_ATTACHMENT_BIT_ANGLE 0x00000040194USAGE_INPUT_ATTACHMENT_BIT_ANGLE 0x00000080195USAGE_SHADING_RATE_IMAGE_BIT_ANGLE 0x00000100196USAGE_FRAGMENT_DENSITY_MAP_BIT_ANGLE 0x00000200197198Additions to Chapter 8 of the OpenGL 4.5 Specification (Textures and199Samplers)200201For each list of TexStorage* commands in the 1D, 2D, 3D,2022DMultisample, and 3DMultisample families, add the following203variants:204205void TexStorageMemFlags*ANGLE(<existing parameters>,206uint memory,207uint64 offset,208bitfield createFlags,209bitfield usageFlags);210211void TextureStorageMemFlags*ANGLE(<existing parameters>,212uint memory,213uint64 offset,214bitfield createFlags,215bitfield usageFlags);216217For each of the TexStorageMemFlags*ANGLE commands, move the description from218the corresponding TexStorageMem*EXT from EXT_external_objects under that219command and add the following language:220221"The implementation should apply the same semantics to the internal222storage of the texture based on <createFlags> and <usageFlags> as the223corresonding VK_IMAGE_CREATE_* and VK_IMAGE_USAGE_* flags would have on224a Vulkan image respectively. See tables 8.17 and 8.18 for the mapping225between the GL and Vulkan flags. It is undefined behavior if the226application provides create and usage flags that are not identical to227those used to create the Vulkan image."228229Table 8.17: Create flags and corresponding Vulkan Image Create Flags230231| Create Flag | Equivalent Vulkan Create Flag |232+----------------------------------------------------+-----------------------------------------------------------+233| CREATE_SPARSE_BINDING_BIT_ANGLE | VK_IMAGE_CREATE_SPARSE_BINDING_BIT |234| CREATE_SPARSE_RESIDENCY_BIT_ANGLE | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |235| CREATE_SPARSE_ALIASED_BIT_ANGLE | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |236| CREATE_MUTABLE_FORMAT_BIT_ANGLE | VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |237| CREATE_CUBE_COMPATIBLE_BIT_ANGLE | VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |238| CREATE_ALIAS_BIT_ANGLE | VK_IMAGE_CREATE_ALIAS_BIT |239| CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_ANGLE | VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT |240| CREATE_2D_ARRAY_COMPATIBLE_BIT_ANGLE | VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT |241| CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_ANGLE | VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT |242| CREATE_EXTENDED_USAGE_BIT_ANGLE | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT |243| CREATE_PROTECTED_BIT_ANGLE | VK_IMAGE_CREATE_PROTECTED_BIT |244| CREATE_DISJOINT_BIT_ANGLE | VK_IMAGE_CREATE_DISJOINT_BIT |245| CREATE_CORNER_SAMPLED_BIT_ANGLE | VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV |246| CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_ANGLE | VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT |247| CREATE_SUBSAMPLED_BIT_ANGLE | VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT |248+----------------------------------------------------------------------------------------------------------------+249250Table 8.18: Usage flags and corresponding Vulkan Image Usage Flags251252| Usage Flag | Equivalent Vulkan Usage Flag |253+------------------------------------------+---------------------------------------------+254| USAGE_TRANSFER_SRC_BIT_ANGLE | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |255| USAGE_TRANSFER_DST_BIT_ANGLE | VK_IMAGE_USAGE_TRANSFER_DST_BIT |256| USAGE_SAMPLED_BIT_ANGLE | VK_IMAGE_USAGE_SAMPLED_BIT |257| USAGE_STORAGE_BIT_ANGLE | VK_IMAGE_USAGE_STORAGE_BIT |258| USAGE_COLOR_ATTACHMENT_BIT_ANGLE | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |259| USAGE_DEPTH_STENCIL_ATTACHMENT_BIT_ANGLE | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |260| USAGE_TRANSIENT_ATTACHMENT_BIT_ANGLE | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |261| USAGE_INPUT_ATTACHMENT_BIT_ANGLE | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |262| USAGE_SHADING_RATE_IMAGE_BIT_ANGLE | VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV |263| USAGE_FRAGMENT_DENSITY_MAP_BIT_ANGLE | VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT |264+----------------------------------------------------------------------------------------+265266Add the following errors for each of the TexStorageMemFlags*ANGLE commands:267268"An INVALID_VALUE error is generated if <createFlags> has a bit set269other than those specified in table 8.17."270271"An INVALID_VALUE error is generated if <usageFlags> has a bit set272other than those specified in table 8.18."273274For each of the TexStorageMem*EXT commands, change the description of275TexStorageMem*EXT and TextureStorageMem*EXT as such:276277"Calling TexStorageMem*EXT is equivalent to calling278TexStorageMemFlags*ANGLE with 0 as <createFlags> and all279Vulkan-supported usage flags, even if there are no corresponding GL280flags specified in this extension."281282Issues2832841) Can the GL and Vulkan create and usage flag values diverge?285286RESOLVED: No. It is expected for the application to provide the flags287used to create the Vulkan image verbatim.2882892) What if Vulkan adds new create and usage flags?290291RESOLVED: If the implementation is too old to be aware of those flags,292the functions from GL_EXT_memory_object must be used instead. New flags293can be added through new extensions that build on this extension.2942953) Should the GL implementation apply the same validation as Vulkan based296on the create and usage flags?297298RESOLVED: No. The application has already created an image with these299flags in Vulkan, so the GL implementation can assume they are valid.300Validating this is expensive and unnecessary in almost all applications.301302Revision History303304Revision 1, 2020-08-03 (Shahbaz Youssefi)305- Initial draft based on EXT_external_objects.306307308