NV_image_formats

Name

NV_image_formats

Name Strings

GL_NV_image_formats

Contact

Mathias Heyer, NVIDIA (mheyer 'at' nvidia.com)

Contributors

Contributors to ARB_shader_image_load_store
Michael Chock, NVIDIA
Daniel Koch, NVIDIA

Notice

Copyright (c) 2011-2014 The Khronos Group Inc. Copyright terms at
    http://www.khronos.org/registry/speccopyright.html

Portions Copyright (c) 2014 NVIDIA Corporation.

Status

Complete

Version

Last Modified Date:         October 24, 2014
Revision:                   4

Number

OpenGL ES Extension #200

Dependencies

This extension is written against the OpenGL ES 3.1 (March 17, 2014)
specification.

This extension is written against version 3.10 of the OpenGL ES
Shading Language specification.

OpenGL ES 3.1 and GLSL ES 3.10 are required.

This extension interacts with EXT_texture_norm16.

This extension interacts with NV_bindless_texture.

Overview

OpenGL ES 3.1 specifies a variety of formats required to be usable
with texture images. This extension introduces the texture image
formats missing for parity with OpenGL 4.4.

New Procedures and Functions

None

New Tokens

None

Additions to Chapter 8 of the OpenGL ES 3.1 Specification (Textures and Samplers)

Section 8.22, Texture Image Loads and Stores

Add to Table 8.27 'Supported image unit formats with equivalent formats
layout qualifiers':

    Image Unit Format       Format Qualifer
    -----------------       ---------------
    RG32F                   rg32f
    RG16F                   rg16f
    R11F_G11F_B10F          r11f_g11f_b10f
    R16F                    r16f

    RGB10_A2UI              rgb10_a2ui
    RG32UI                  rg32ui
    RG16UI                  rg16ui
    RG8UI                   rg8ui
    R16UI                   r16ui
    R8UI                    r8ui

    RG32I                   rg32i
    RG16I                   rg16i
    RG8I                    rg8i
    R16I                    r16i
    R8I                     r8i

    RGBA16_EXT              rgba16
    RGB10_A2                rgb10_a2
    RG16_EXT                rg16
    RG8                     rg8
    R16_EXT                 r16
    R8                      r8

    RGBA16_SNORM_EXT        rgba16_snorm
    RG16_SNORM_EXT          rg16_snorm
    RG8_SNORM               rg8_snorm
    R16_SNORM_EXT           r16_snorm
    R8_SNORM                r8_snorm


Add to Table  8.28 'Texel sizes, compatibility classes, and pixel
format/type combinations for each image format'

    Image Format     Size  Class  Pixel Format/Type
    --------------   ----  -----  -----------------------------------------
    RG32F            64    2x32   RG, FLOAT
    RG16F            32    2x16   RG, HALF_FLOAT
    R11F_G11F_B10F   32    (a)    RGB, UNSIGNED_INT_10F_11F_11F_REV
    R16F             16    1x16   RED, HALF_FLOAT

    RGB10_A2UI       32    (b)    RGBA_INTEGER, UNSIGNED_INT_2_10_10_10_REV
    RG32UI           64    2x32   RG_INTEGER, UNSIGNED_INT
    RG16UI           32    2x16   RG_INTEGER, UNSIGNED_SHORT
    RG8UI            16    2x8    RG_INTEGER, UNSIGNED_BYTE
    R16UI            16    1x16   RED_INTEGER, UNSIGNED_SHORT
    R8UI             8     1x8    RED_INTEGER, UNSIGNED_BYTE

    RG32I            64    2x32   RG_INTEGER, INT
    RG16I            32    2x16   RG_INTEGER, SHORT
    RG8I             16    2x8    RG_INTEGER, BYTE
    R16I             16    1x16   RED_INTEGER, SHORT
    R8I              8     1x8    RED_INTEGER, BYTE

    RGBA16_EXT       64    4x16   RGBA, UNSIGNED_SHORT
    RGB10_A2         32    (b)    RGBA, UNSIGNED_INT_2_10_10_10_REV
    RG16_EXT         32    2x16   RG, UNSIGNED_SHORT
    RG8              16    2x8    RG, UNSIGNED_BYTE
    R16_EXT          16    1x16   RED, UNSIGNED_SHORT
    R8               8     1x8    RED, UNSIGNED_BYTE

    RGBA16_SNORM_EXT 64    4x16   RGBA, SHORT
    RG16_SNORM_EXT   32    2x16   RG, SHORT
    RG8_SNORM        16    2x8    RG, BYTE
    R16_SNORM_EXT    16    1x16   RED, SHORT
    R8_SNORM         8     1x8    RED, BYTE

    Table 2.28, '...  Class (a) is for 11/11/10 packed floating-point
    formats; class (b) is for 10/10/10/2 packed formats.'

New Implementation Dependent State

None

New State

None

Modifications to the OpenGL ES Shading Language Specification, Version 3.10

Including the following line in a shader can be used to control the
language features described in this extension:

  #extension GL_NV_image_formats : <behavior>

where <behavior> is as specified in section 3.3.

New preprocessor #defines are added to the OpenGL ES Shading Language:

  #define GL_NV_image_formats    1


Section 4.4.7 Format Layout Qualifiers

Add to '<float-image-format-qualifier>':
    rg32f
    rg16f
    r11f_g11f_b10f
    r16f
    rgba16
    rgb10_a2
    rg16
    rg8
    r16
    r8
    rgba16_snorm
    rg16_snorm
    rg8_snorm
    r16_snorm
    r8_snorm

Add to '<int-image-format-qualifier>':
    rg32i
    rg16i
    rg8i
    r16i
    r8i

Add to '<uint-image-format-qualifier>':
    rgb10_a2ui
    rg32ui
    rg16ui
    rg8ui
    r16ui
    r8ui

Errors

No new errors.

Dependencies on EXT_texture_norm16

If EXT_texture_norm16 or equivalent functionality is not
supported, remove references to image format R16_EXT, RG16_EXT,
RGBA16_EXT, R16_SNORM_EXT, RG16_SNORM_EXT and RGBA16_SNORM_EXT. Also
remove references to image layout qualifiers rgba16, rg16, r16,
rgba16_snorm, rg16_snorm and r16_snorm.

Dependencies on NV_bindless_texture

If NV_bindless_texture is supported, the additional formats added
by this extension are also supported for the GetImageHandleNV
command.

Issues

None yet!

Revision History

Rev.    Date    Author    Changes
----  --------  --------  -----------------------------------------------
4     10/24/14  dkoch     Mark complete
3     09/30/14  dkoch     Add interactions with NV_bindless_texture
2     07/24/14  dkoch     Add suffixes to tokens add NV_texture_norm16
1     07/09/14  mheyer    Base NV_image_formats on ARB_image_load_store and
                          strip out everything that is already in ES3.1