Edit

kc3-lang/angle/extensions/ANGLE_robust_resource_initialization.txt

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2020-10-15 10:08:51
    Hash : 32f0dd6a
    Message : Add Queries and Setters for resource initialization state. There are cases where we know that the next draw operation will fully initialize a texture/renderbuffer and we can save the robust resource init cost. Default all resource init state to Initialized, any redefinition will set it back to MayNeedInit. After setting an individual texture image to initialized, check if all images are now initialized and update the TextureState::mInitState to match. The cost of this check is only performed after initializing an image and allows future init checks to be faster. Bug: chromium:1132514 Change-Id: Ia23664ae162559d1614f1eb5643e24a491d87f7f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2475456 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

  • extensions/ANGLE_robust_resource_initialization.txt
  • Name
    
        ANGLE_robust_resource_initialization
    
    Name Strings
    
        GL_ANGLE_robust_resource_initialization
    
    Contributors
    
        Geoff Lang, Google
        Ken Russell, Google
    
    Contacts
    
        Shannon Woods, Google (shannonwoods 'at' google.com)
    
    Status
    
        Draft
    
    Version
    
        Version 3, September 19, 2017
    
    Number
    
        OpenGL ES Extension TBD
    
    Dependencies
    
        OpenGL ES 2.0 is required.
    
        This extension is written against the wording of the OpenGL ES
        3.1 specification.
    
        EGL_ANGLE_robust_initialization is required to request a
        context that supports this extension, and resource initialization.
    
    Overview
    
        This extension specifies the behavior for initialization of
        resources such as textures and buffers to default values. This
        initialization ensures that access will not be provided by the
        GL to previously allocated data not owned by the application.
    
    New Types
    
        None
    
    New Procedures and Functions
    
        None
    
    New Tokens
    
        Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
        GetFloatv, GetDoublev, GetInteger64v, and IsEnabled:
    
            ROBUST_RESOURCE_INITIALIZATION_ANGLE    0x93A7
    
        Accepted by the <pname> parameter of GetTexParameteriv,
        GetTexParameterfv, GetTexLevelParameteriv, GetTexLevelParameterfv,
        GetRenderbufferParameteriv, GetBufferParameteriv and
        GetBufferParameteri64v:
    
            RESOURCE_INITIALIZED_ANGLE           0x969F
    
    
    Additions to Chapter 6 of the OpenGL ES 3.1 Specification (Buffer
    Objects)
    
        Replace the last sentence of the first paragraph of section 6.2
        "BufferData":
    
        If <data> is NULL, and robust resource initialization is enabled,
        the contents of the buffer object's data store are set to zero.
        Otherwise, the contents of the buffer object's data store are
        undefined.
    
        Add to Table 6.2: Buffer object parameters and their values:
    
        Name                        Type     Initial Value  Legal Values
        ----                        ----     -------------  ------------
        RESOURCE_INITIALIZED_ANGLE  boolean  TRUE           TRUE, FALSE
    
    Additions to Chapter 8 of the OpenGL ES 3.1 Specification (Textures and
    Samplers)
    
        Replace the first two sentances of the final paragraph in section
        8.5.3 "Texture Image Structure":
    
        If the <data> argument of TexImage2D or TexImage3D is NULL, and the
        pixel unpack buffer object is zero, a two- or three-dimensional
        texel array is created with the specified <target>, <level>,
        <internalformat>, <border>, <width>, <height>, and <depth>. If
        robust resource initialization is enabled, the contents of the image
        are initialized as though a zero value were provided for each
        component of each pixel, and processed and transferred to the GL
        as described above. The components comprising this zero-filled data
        are determined by <internalformat>. If robust resource
        initialization is not enabled, the image contents are undefined, and
        no pixel processing is performed. In either case, no pixel values
        are accessed in client memory.
    
        Replace the first sentence of the fifth paragraph in section 8.8
        "Multisample Textures":
    
        Upon success, TexStorage2DMultisample deletes any existing image
        for target. If robust resource initialization is enabled, the
        contents of each texel are initialized as though a zero value were
        written to each channel of each sample; otherwise the contents of
        texels are undefined.
    
        Add to the final paragraph of section 8.17 "Immutable-Format Texture
        Images":
    
        If robust resource initialization is enabled, the contents of each
        texel is initialized as though a zero value were provided for each
        component of each pixel, and processed and transferred to the GL
        as for a call to the appropriate TexSubImage* call for <target>.
        Otherwise, the contents of texels are undefined.
    
        Add to Table 8.20: Texture parameters and their values:
    
        Name                        Type     Legal Values
        ----                        ----     ------------
        RESOURCE_INITIALIZED_ANGLE  boolean  TRUE, FALSE
    
        Add to the end of section 8.10.3 "Texture Level Parameter Queries":
    
        Queries of pname RESOURCE_INITIALIZED_ANGLE return the initialization
        state of the image.
    
    Additions to Chapter 9 of the OpenGL ES 3.1 Specification (Framebuffers
    and Framebuffer Objects)
    
        Replace the sentence in section 9.2.4 "Renderbuffer Objects"
        beginning "Upon success, RenderbufferStorageMultisample":
    
        Upon success, RenderbufferStorageMultisample deletes any existing
        data store for the renderbuffer image. If robust resource
        initialization is enabled, the contents of each pixel in the data
        store are initialized as though a zero value was written to each
        channel of each sample; otherwise, the contents of the data store
        are undefined.
    
        Add to the end of section 9.2.6 "Renderbuffer Object Queries":
    
        If pname is RESOURCE_INITIALIZED_ANGLE then params will contain the
        initialization state of the renderbuffer currently bound to target.
    
    Interactions with EGL_ANGLE_create_context_robust_resource_initialization
    
        If the EGL window-system binding API is used to create a context,
        the EGL_ANGLE_create_context_robust_initialization extension is
        supported, and the attribute
        EGL_CONTEXT_ROBUST_RESOURCE_INITIALIZATION_ANGLE is set to
        EGL_TRUE when eglCreateContext is called, the resulting context
        will perform robust resource initialization as described above in
        section <section>, and the
        CONTEXT_ROBUST_RESOURCE_INITIALIZATION_ANGLE
        query will return GL_TRUE as described above in section 2.6.1.1.
        Otherwise queries will return GL_FALSE.
    
    New State
    
        (add to Table 20.4: Buffer Object State)
    
                                                                              Initial
        Get Value                            Type   Get Command                Value   Description                  Sec.
        ----------------------               ----   -------------------        ------  ---------------------------  ------
        RESOURCE_INITIALIZED_ANGLE            B     GetBufferParameteriv       TRUE    Buffer data has been         6.6
                                                                                       initialized
    
        (add to Table 20.9: Textures (state per texture object))
    
                                                                              Initial
        Get Value                            Type   Get Command                Value   Description                  Sec.
        ----------------------               ----   -------------------        ------  ---------------------------  ------
        RESOURCE_INITIALIZED_ANGLE            B     GetTexParameteriv          TRUE    All specified images have    8.10.2
                                                                                       been initialized
    
        (add to Table 20.10 Textures (state per texture image))
    
                                                                              Initial
        Get Value                            Type   Get Command                Value   Description                  Sec.
        ----------------------               ----   -------------------        ------  ---------------------------  ------
        RESOURCE_INITIALIZED_ANGLE            B     GetTexLevelParameteriv     TRUE    Image data has been          8.10.3
                                                                                       initialized
    
        (add to Table 20.16: Renderbuffer (state per renderbuffer object))
    
                                                                              Initial
        Get Value                            Type   Get Command                Value   Description                  Sec.
        ----------------------               ----   -------------------        ------  ---------------------------  ------
        RESOURCE_INITIALIZED_ANGLE            B     GetRenderbufferParameteriv TRUE    Renderbuffer data has been   9.2.6
                                                                                       initialized
    
    Issues
    
        None
    
    Revision History
    
        Version 1, 2015/01/07 - first draft.
        Version 2, 2017/03/07 - fixed EGL naming and added IsEnabled.
        Version 3, 2017/09/19 - name cleanup.
        Version 4, 2020/10/12 - Add RESOURCE_INITIALIZED_ANGLE queries.