Edit

kc3-lang/angle/extensions/ANGLE_texture_multisample_array.txt

Branch :

  • Show log

    Commit

  • Author : Olli Etuaho
    Date : 2018-08-23 11:16:15
    Hash : 4285647b
    Message : Draft ANGLE_texture_multisample_array spec This is needed for antialiased multiview rendering. The extension is written against OpenGL ES 3.1. To add support for it in OpenGL ES 3.0, an extension for exposing non-array multisample textures will also be required (ANGLE_texture_multisample). This has been previously proposed though not yet submitted to ANGLE. The extension spec provides robustness guarantees for sampling multisample textures. It still needs to be tested whether native implementations follow these guarantees or if the spec needs to be adjusted to allow for clamping coordinates. The native KHR_robust_buffer_access_behavior is not very explicit about whether the texel fetch robustness applies also to multisample textures. BUG=angleproject:2775 Change-Id: I1bd721008a10bee29f8e2e06edca19370a9932a7 Reviewed-on: https://chromium-review.googlesource.com/1186336 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>

  • extensions/ANGLE_texture_multisample_array.txt
  • Name
    
        ANGLE_texture_multisample_array
    
    Name Strings
    
        GL_ANGLE_texture_multisample_array
    
    Contributors
    
        Olli Etuaho, NVIDIA Corporation
        Contributors to OpenGL ES 3.2, on which this extension is based
    
    Contact
    
        Olli Etuaho (oetuaho 'at' nvidia.com)
    
    Status
    
        Incomplete
    
    Version
    
        Last Modified Date: August 23, 2018
        Author Revision: 1
    
    Number
    
        OpenGL ES Extension XX
    
    Dependencies
    
        OpenGL ES 3.0 and the ANGLE_texture_multisample extension, or OpenGL ES
        3.1 is required.
    
        Written against the OpenGL ES 3.1 specification.
    
    Overview
    
        This extension provides support for a new type of texture -
        two-dimensional multisample array texture - as well as mechanisms to
        allocate storage and attach such textures to FBOs for rendering,
        to support such a texture in a shader, to fetch a specific sample
        from such a texture in a shader, and to query the dimensions of
        such a texture in a shader.
    
        This extension is based on functionality in the OpenGL ES 3.2
        specification.
    
    IP Status
    
        No known IP claims.
    
    New Tokens
    
        Accepted by the <target> parameter of BindTexture,
        TexStorage3DMultisampleANGLE, GetInternalformativ, TexParameter{if}*,
        GetTexParameter{if}v, GetTexLevelParameter{if}vANGLE and
        by the <textarget> parameter of FramebufferTexture2D:
    
            TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE                0x9102
    
        Accepted by the <pname> parameter of GetIntegerv:
    
            TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_ANGLE        0x9105
    
        Returned by the <type> parameter of GetActiveUniform:
    
            SAMPLER_2D_MULTISAMPLE_ARRAY_ANGLE                0x910B
            INT_SAMPLER_2D_MULTISAMPLE_ARRAY_ANGLE            0x910C
            UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_ANGLE   0x910D
    
    New Procedures and Functions
    
        void TexStorage3DMultisampleANGLE(enum target,
                                          sizei samples,
                                          enum sizedinternalformat,
                                          sizei width,
                                          sizei height,
                                          sizei depth,
                                          boolean fixedsamplelocations);
    
    Additions to Chapter 8 of the OpenGL ES 3.1 Specification (Textures and Samplers)
    
        Modify Section 8.8, "Multisample Textures".
    
        (first paragraph of section 8.8)
    
        In addition to the texture types described in previous sections, two
        additional types of textures are supported. A multisample texture is
        similar to a two-dimensional or two-dimensional array texture,
        except it contains multiple samples per texel. Multisample textures do
        not have multiple image levels, and are immutable.
    
        (insert after description of TexStorage2DMultisampleANGLE)
    
        The command
    
            void TexStorage3DMultisampleANGLE(enum target, sizei samples,
                                              int sizedinternalformat,
                                              sizei width, sizei height, sizei depth,
                                              boolean fixedsamplelocations);
    
        establishes the data storage, format, dimensions, and number of
        samples of a multisample texture array's image. <target> must be
        TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE. <width>, <height> and <depth> are the
        dimensions in texels of the texture.
    
        Upon success, TexStorage3DMultisampleANGLE deletes any existing image
        for <target> and the contents of texels are undefined. The values of
        TEXTURE_WIDTH, TEXTURE_HEIGHT, TEXTURE_DEPTH, TEXTURE_SAMPLES_ANGLE,
        TEXTURE_INTERNAL_FORMAT and TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE are
        set to <width>, <height>, the actual number of samples allocated,
        <sizedinternalformat>, and <fixedsamplelocations> respectively.
    
        (modify errors in Section 8.8)
    
        An INVALID_ENUM error is generated if target is not
        TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE in case of TexStorage3DMultisampleANGLE,
        or TEXTURE_2D_MULTISAMPLE_ANGLE in case of TexStorage2DMultisampleANGLE.
        An INVALID_VALUE is generated if <width>, <height> or <depth> is less than 1.
    
        (insert into errors is Section 8.8)
    
        An INVALID_VALUE error is generated by TexStorage3DMultisample if depth is
        greater than the value of MAX_ARRAY_TEXTURE_LAYERS.
    
        Modify Section 8.9, "Texture Parameters":
    
        Add TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE to the texture targets accepted by
        TexParameter*.
    
        (add to the end of Section 8.9)
    
        An INVALID_ENUM is generated if <target> is
        TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE and <pname> is any sampler state from
        table 20.11. An INVALID_OPERATION error is generated if <target> is
        TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE, and <pname> TEXTURE_BASE_LEVEL is set
        to any value other than zero.
    
        Modify Section 8.10.2, "Texture Parameter Queries":
    
        (modify the paragraph describing the <target> parameter of
        GetTexParameter*)
    
        <target> may be one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY,
        TEXTURE_CUBE_MAP, TEXTURE_2D_MULTISAMPLE_ANGLE, or
        TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE, indicating the currently bound
        two-dimensional, three-dimensional, two-dimensional array, cube map,
        two-dimensional multisample, or two-dimensional multisample array
        texture object, respectively.
    
        Modify Section 8.10.3, "Texture Level Parameter Queries"
    
        (modify the paragraph describing the <target> parameter of
        GetTexLevelParameter*)
    
        <target> may be one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, one of
        the cube map face targets from table 8.21, TEXTURE_2D_MULTISAMPLE_ANGLE,
        or TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE indicating the two- or
        three-dimensional texture, two-dimensional array texture, one of the six
        distinct 2D images making up the cube map texture object, two-dimensional
        multisample texture or two-dimensional multisample array texture. Otherwise
        an INVALID_ENUM is generated.
    
    Additions to Chapter 9 of the OpenGL ES 3.1 Specification (Framebuffers and
    Framebuffer Objects)
    
        Modify section 9.2.8 "Attaching Texture Images to a Framebuffer".
    
        (modify description of FrameBufferTextureLayer p. 223)
    
        The command
    
            void FramebufferTextureLayer(enum target, enum attachment,
                                         uint texture, int level, int layer);
    
        operates similarly to FramebufferTexture2D, except that it attaches a
        single layer of a three-dimensional texture, two-dimensional array
        texture or two-dimensional multisample array texture level.
    
        The error INVALID_OPERATION is generated if texture is non-zero
        and is not the name of a three-dimensional texture, two-dimensional
        array texture or or two-dimensional multisample array texture.
    
        (insert into description of FrameBufferTextureLayer p. 224)
    
        If <texture> identifies a two-dimensional multisample array texture,
        then <level> must be zero. Otherwise, an INVALID_VALUE error is
        generated.
    
    Additions to Chapter 11 of the OpenGL ES 3.1 Specification (Programmable Vertex Processing)
    
        Modify Section 11.1.3.3 "Multisample Texel Fetches":
    
        (modify the paragraph before the list of conditions for undefined results)
    
        If the context was created with robust buffer access enabled, the result
        of the texel fetch in the following cases is zero. If robust buffer
        access is not enabled, the result of the texel fetch is undefined in
        each case:
    
    Additions to Chapter 19 of the OpenGL ES 3.1 Specification (Context State Queries)
    
        Modify Section 19.3, "Internal Format Queries":
    
        Add target TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE to table 19.1.
    
    Additions to the AGL/EGL/GLX/WGL Specifications
    
        None
    
    Additions to the OpenGL ES Shading Language Specification, Version 3.10.
    
        Including the following line in a shader can be used to control the
        language featured described in this extension:
    
          #extension GL_ANGLE_texture_multisample_array : <behavior>
    
        where <behavior> is as specified in section 3.5.
    
        A new preprocessor #define is added to the OpenGL ES Shading Language:
    
          #define GL_ANGLE_texture_multisample_array 1
    
        Add to section 3.8 "Keywords":
    
        The following new sampler types are added:
    
          sampler2DMSArray, isampler2DMSArray, usampler2DMSArray,
    
        Add to section 4.1 "Basic Types":
    
        Add the following sampler type to the "Floating Point Sampler
        Types (opaque)" table:
    
          sampler2DMSArray    handle for accessing a 2D multisample array texture
    
        Add the following sampler type to the "Unsigned Integer Sampler
        Types (opaque)" table:
    
          usampler2DMSArray    handle for accessing an unsigned integer 2D
                               multisample array texture
    
        Add the following sampler type to the "Integer Sampler Types" table:
    
          isampler2DMSArray    handle for accessing an integer 2D
                               multisample array texture
    
        Add to section 8.8 "Texture Lookup Functions":
    
        Add new functions to the set of allowed texture lookup functions:
    
        Syntax:
    
          gvec4 texelFetch(gsampler2DMSArray sampler, ivec3 P, int sample)
    
        Description:
    
          Use integer texture coordinate <P> to lookup a single sample
          <sample> on the texture bound to <sampler> as described in the OpenGL
          ES specification section 11.1.3.3 "Multisample Texel Fetches".
    
        Syntax:
    
          ivec3 textureSize(gsampler2DMSArray sampler)
    
        Description:
    
          Returns the dimensions, width, height and depth of level 0 for the
          texture bound to <sampler>, as described in  the OpenGL ES
          specification section 11.1.3.4 "Texture Queries".
    
    Errors
    
        The error INVALID_ENUM is generated by TexStorage3DMultisampleANGLE if
        <target> is not TEXTURE_2D_MULTISAMPLE_ARRAY_ANGLE.
    
        The error INVALID_OPERATION is generated by TexStorage3DMultisampleANGLE
        if zero is bound to <target>.
    
        The error INVALID_VALUE is generated by TexStorage3DMultisampleANGLE if
        <width> or <height> is less than 1 or greater than the value of
        MAX_TEXTURE_SIZE.
    
        The error INVALID_VALUE is generated by TexStorage3DMultisampleANGLE if
        <depth> is less than 1 or greater than the value of
        MAX_ARRAY_TEXTURE_LAYERS.
    
        The error INVALID_VALUE is generated by TexStorage3DMultisampleANGLE if
        <samples> is zero.
    
        The error INVALID_ENUM is generated by TexStorage3DMultisampleANGLE if
        <sizedinternalformat> is not color-renderable, depth-renderable, or
        stencil-renderable.
    
        The error INVALID_ENUM is generated by TexStorage3DMultisampleANGLE if
        <internalformat> is one of the unsized base internal formats listed in
        table 8.11.
    
        The error INVALID_OPERATION is generated by TexStorage3DMultisampleANGLE
        if <samples> is greater than the maximum number of samples supported for
        this <target> and <sizedinternalformat>, The maximum number of samples
        supported can be determined by calling GetInternalformativ with a <pname>
        of SAMPLES.
    
        The error INVALID_OPERATION is generated by TexStorage3DMultisampleANGLE
        if the value of TEXTURE_IMMUTABLE_FORMAT for the texture currently bound
        to <target> on the active texture unit is TRUE.
    
        The error OUT_OF_MEMORY is generated by TexStorage3DMultisampleANGLE
        if the GL is unable to create a texture image of the requested size.
    
        The error INVALID_VALUE is generated by FramebufferTextureLayer if
        <texture> identifies a two-dimensional multisample array texture, and
        <level> is not zero.
    
    Issues
    
        None