Hash :
a5e391d7
        
        Author :
  
        
        Date :
2021-11-19T17:35:06
        
      
Add GL_ANGLE_vulkan_image extension glAcquireTextures & glReleaseTextures are added for sharing texture ownership with an external API. Bug: chromium:1264439 Change-Id: If46d8d230b4f611768b5ff1187674509e42f01e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3293921 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
Name
    ANGLE_vulkane_image
Name Strings
    GL_ANGLE_vulkane_image
Contributors
    Peng Huang, Google
Contact
    Peng Huang, Google (penghuang 'at' chromium.com)
Status
    Draft
Version
    Last Modified Date: Nov 19, 2021
    Revision: 1
Number
    TBD
Dependencies
    Written against the OpenGL 4.5 and OpenGL ES 3.2 specifications
    GL_ANGLE_vulkane_image requires GL_EXT_external_objects
Overview
    Building upon the OpenGL memory object and semaphore framework
    defined in EXT_external_objects, this extension enables an OpenGL
    application to share textures with an external API.
New Procedures and Functions
    If the GL_ANGLE_vulkane_image string is reported, the following commands
    are added:
    void AcquireTexturesANGLE(uint numTextures,
                              const uint *textures,
                              const GLenum *layouts);
    void ReleaseTexturesANGLE(uint numTextures,
                              const uint *textures,
                              GLenum *layouts);
New Tokens
    None
Additions to Chapter 4 of the OpenGL 4.5 Specification (Event Model)
    The command
        void AcquireTexturesANGLE(uint numTextures,
                                  const uint *textures,
                                  const GLenum *layouts);
    will acquire ownership of textures. Since the texture layout state is
    managed internally by the GL, but may have been modified by an external API,
    the current layout of the textures must be specified to initialize internal
    GL state prior to correspond to those specified by the Vulkan API as
    described in table 4.4. However, the layouts do not necessarily correspond
    to an optimal state for any particular GL operation. The GL will simply
    perform appropriate transitions internally as necessary based on the
    specified current layout of the texture.
    The command
        void ReleaseTexturesANGLE(uint numTextures,
                                  const uint *textures,
                                  GLenum *layouts);
    will release ownership of textures. The current texture layouts will be
    returned, so an external API can perform appropriate transitions as
    necessary based on the returned current layout of the textures.
Revision History
    Revision 1, 2021-11-19 (Peng Huang)
        - Initial draft based closely on EXT_external_objects_fd.