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 5, September 30, 2021

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 sentences 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 clear value were provided for each
    component of each pixel, and processed and transferred to the GL
    as described above. The components comprising this clear-value-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. For depth components the clear value is the
    value that is interpreted as 1.0. For all other components the clear value
    is zero.

    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 clear value was written to each
    channel of each sample; otherwise, the contents of the data store
    are undefined. For depth components the clear value is the
    value that is interpreted 1.0. For all other components the clear
    value is zero.

    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.
    Version 5, 2021/09/30 - Specify that depth components are cleared to 1.0.
