15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    EXT_packed_float
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_EXT_packed_float
85bd8deadSopenharmony_ci    WGL_EXT_pixel_format_packed_float
95bd8deadSopenharmony_ci    GLX_EXT_fbconfig_packed_float
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ciContact
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ci    Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com)
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ciStatus
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ci    Preliminary
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciVersion
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    Date: February 15, 2006
225bd8deadSopenharmony_ci    Revision: 0.3
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ciNumber
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ci    328
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ciDependencies
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ci    OpenGL 1.1 required
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ci    ARB_color_buffer_float affects this extension.
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ci    EXT_texture_shared_exponent trivially affects this extension.
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    EXT_framebuffer_object affects this extension.
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ci    WGL_ARB_pixel_format is required for use with WGL.
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ci    WGL_ARB_pbuffer affects WGL pbuffer support for this extension.
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ci    GLX 1.3 is required for use with GLX.
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci    This extension is written against the OpenGL 2.0 (September 7,
455bd8deadSopenharmony_ci    2004) specification.
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ciOverview
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    This extension adds a new 3-component floating-point texture format
505bd8deadSopenharmony_ci    that fits within a single 32-bit word.  This format stores 5 bits
515bd8deadSopenharmony_ci    of biased exponent per component in the same manner as 16-bit
525bd8deadSopenharmony_ci    floating-point formats, but rather than 10 mantissa bits, the red,
535bd8deadSopenharmony_ci    green, and blue components have 6, 6, and 5 bits respectively.
545bd8deadSopenharmony_ci    Each mantissa is assumed to have an implied leading one except in the
555bd8deadSopenharmony_ci    denorm exponent case.  There is no sign bit so only non-negative
565bd8deadSopenharmony_ci    values can be represented.  Positive infinity, positive denorms,
575bd8deadSopenharmony_ci    and positive NaN values are representable.  The value of the fourth
585bd8deadSopenharmony_ci    component returned by a texture fetch is always 1.0.
595bd8deadSopenharmony_ci
605bd8deadSopenharmony_ci    This extension also provides support for rendering into an unsigned
615bd8deadSopenharmony_ci    floating-point rendering format with the assumption that the texture
625bd8deadSopenharmony_ci    format described above could also be advertised as an unsigned
635bd8deadSopenharmony_ci    floating-point format for rendering.
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ci    The extension also provides a pixel external format for specifying
665bd8deadSopenharmony_ci    packed float values directly.
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ciNew Procedures and Functions
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    None
715bd8deadSopenharmony_ci
725bd8deadSopenharmony_ciNew Tokens
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci    Accepted by the <internalformat> parameter of TexImage1D,
755bd8deadSopenharmony_ci    TexImage2D, TexImage3D, CopyTexImage1D, CopyTexImage2D, and
765bd8deadSopenharmony_ci    RenderbufferStorageEXT:
775bd8deadSopenharmony_ci
785bd8deadSopenharmony_ci        R11F_G11F_B10F_EXT                            0x8C3A
795bd8deadSopenharmony_ci
805bd8deadSopenharmony_ci    Accepted by the <type> parameter of DrawPixels, ReadPixels,
815bd8deadSopenharmony_ci    TexImage1D, TexImage2D, GetTexImage, TexImage3D, TexSubImage1D,
825bd8deadSopenharmony_ci    TexSubImage2D, TexSubImage3D, GetHistogram, GetMinmax,
835bd8deadSopenharmony_ci    ConvolutionFilter1D, ConvolutionFilter2D, ConvolutionFilter3D,
845bd8deadSopenharmony_ci    GetConvolutionFilter, SeparableFilter2D, GetSeparableFilter,
855bd8deadSopenharmony_ci    ColorTable, ColorSubTable, and GetColorTable:
865bd8deadSopenharmony_ci
875bd8deadSopenharmony_ci        UNSIGNED_INT_10F_11F_11F_REV_EXT              0x8C3B
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ci    Accepted by the <pname> parameters of GetIntegerv, GetFloatv, and
905bd8deadSopenharmony_ci    GetDoublev:
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci        RGBA_SIGNED_COMPONENTS_EXT                    0x8C3C
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci    Accepted as a value in the <piAttribIList> and <pfAttribFList>
955bd8deadSopenharmony_ci    parameter arrays of wglChoosePixelFormatARB, and returned in the
965bd8deadSopenharmony_ci    <piValues> parameter array of wglGetPixelFormatAttribivARB, and the
975bd8deadSopenharmony_ci    <pfValues> parameter array of wglGetPixelFormatAttribfvARB:
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci        WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT              0x20A8
1005bd8deadSopenharmony_ci
1015bd8deadSopenharmony_ci    Accepted as values of the <render_type> arguments in the
1025bd8deadSopenharmony_ci    glXCreateNewContext and glXCreateContext functions
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ci        GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT              0x20B1
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci    Returned by glXGetFBConfigAttrib (when <attribute> is set to
1075bd8deadSopenharmony_ci    GLX_RENDER_TYPE) and accepted by the <attrib_list> parameter of
1085bd8deadSopenharmony_ci    glXChooseFBConfig (following the GLX_RENDER_TYPE token):
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci        GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT                0x00000008
1115bd8deadSopenharmony_ci
1125bd8deadSopenharmony_ciAdditions to Chapter 2 of the 2.0 Specification (OpenGL Operation)
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ci -- Add two new sections after Section 2.1.2, (page 6):
1155bd8deadSopenharmony_ci
1165bd8deadSopenharmony_ci    2.1.A  Unsigned 11-Bit Floating-Point Numbers
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci    An unsigned 11-bit floating-point number has no sign bit, a 5-bit
1195bd8deadSopenharmony_ci    exponent (E), and a 6-bit mantissa (M).  The value of an unsigned
1205bd8deadSopenharmony_ci    11-bit floating-point number (represented as an 11-bit unsigned
1215bd8deadSopenharmony_ci    integer N) is determined by the following: 
1225bd8deadSopenharmony_ci
1235bd8deadSopenharmony_ci        0.0,                      if E == 0 and M == 0,
1245bd8deadSopenharmony_ci        2^-14 * (M / 64),         if E == 0 and M != 0,
1255bd8deadSopenharmony_ci        2^(E-15) * (1 + M/64),    if 0 < E < 31,
1265bd8deadSopenharmony_ci        INF,                      if E == 31 and M == 0, or
1275bd8deadSopenharmony_ci        NaN,                      if E == 31 and M != 0,
1285bd8deadSopenharmony_ci
1295bd8deadSopenharmony_ci    where
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ci        E = floor(N / 64), and
1325bd8deadSopenharmony_ci        M = N mod 64.
1335bd8deadSopenharmony_ci
1345bd8deadSopenharmony_ci    Implementations are also allowed to use any of the following
1355bd8deadSopenharmony_ci    alternative encodings:
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci        0.0,                      if E == 0 and M != 0
1385bd8deadSopenharmony_ci        2^(E-15) * (1 + M/64)     if E == 31 and M == 0
1395bd8deadSopenharmony_ci        2^(E-15) * (1 + M/64)     if E == 31 and M != 0
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci    When a floating-point value is converted to an unsigned 11-bit
1425bd8deadSopenharmony_ci    floating-point representation, finite values are rounded to the closet
1435bd8deadSopenharmony_ci    representable finite value.  While less accurate, implementations
1445bd8deadSopenharmony_ci    are allowed to always round in the direction of zero.  This means
1455bd8deadSopenharmony_ci    negative values are converted to zero.  Likewise, finite positive
1465bd8deadSopenharmony_ci    values greater than 65024 (the maximum finite representable unsigned
1475bd8deadSopenharmony_ci    11-bit floating-point value) are converted to 65024.  Additionally:
1485bd8deadSopenharmony_ci    negative infinity is converted to zero; positive infinity is converted
1495bd8deadSopenharmony_ci    to positive infinity; and both positive and negative NaN are converted
1505bd8deadSopenharmony_ci    to positive NaN.
1515bd8deadSopenharmony_ci
1525bd8deadSopenharmony_ci    Any representable unsigned 11-bit floating-point value is legal
1535bd8deadSopenharmony_ci    as input to a GL command that accepts 11-bit floating-point data.
1545bd8deadSopenharmony_ci    The result of providing a value that is not a floating-point number
1555bd8deadSopenharmony_ci    (such as infinity or NaN) to such a command is unspecified, but must
1565bd8deadSopenharmony_ci    not lead to GL interruption or termination.  Providing a denormalized
1575bd8deadSopenharmony_ci    number or negative zero to GL must yield predictable results.
1585bd8deadSopenharmony_ci
1595bd8deadSopenharmony_ci    2.1.B  Unsigned 10-Bit Floating-Point Numbers
1605bd8deadSopenharmony_ci
1615bd8deadSopenharmony_ci    An unsigned 10-bit floating-point number has no sign bit, a 5-bit
1625bd8deadSopenharmony_ci    exponent (E), and a 5-bit mantissa (M).  The value of an unsigned
1635bd8deadSopenharmony_ci    10-bit floating-point number (represented as an 10-bit unsigned
1645bd8deadSopenharmony_ci    integer N) is determined by the following: 
1655bd8deadSopenharmony_ci
1665bd8deadSopenharmony_ci        0.0,                      if E == 0 and M == 0,
1675bd8deadSopenharmony_ci        2^-14 * (M / 32),         if E == 0 and M != 0,
1685bd8deadSopenharmony_ci        2^(E-15) * (1 + M/32),    if 0 < E < 31,
1695bd8deadSopenharmony_ci        INF,                      if E == 31 and M == 0, or
1705bd8deadSopenharmony_ci        NaN,                      if E == 31 and M != 0,
1715bd8deadSopenharmony_ci
1725bd8deadSopenharmony_ci    where
1735bd8deadSopenharmony_ci
1745bd8deadSopenharmony_ci        E = floor(N / 32), and
1755bd8deadSopenharmony_ci        M = N mod 32.
1765bd8deadSopenharmony_ci
1775bd8deadSopenharmony_ci    When a floating-point value is converted to an unsigned 10-bit
1785bd8deadSopenharmony_ci    floating-point representation, finite values are rounded to the closet
1795bd8deadSopenharmony_ci    representable finite value.  While less accurate, implementations
1805bd8deadSopenharmony_ci    are allowed to always round in the direction of zero.  This means
1815bd8deadSopenharmony_ci    negative values are converted to zero.  Likewise, finite positive
1825bd8deadSopenharmony_ci    values greater than 64512 (the maximum finite representable unsigned
1835bd8deadSopenharmony_ci    10-bit floating-point value) are converted to 64512.  Additionally:
1845bd8deadSopenharmony_ci    negative infinity is converted to zero; positive infinity is converted
1855bd8deadSopenharmony_ci    to positive infinity; and both positive and negative NaN are converted
1865bd8deadSopenharmony_ci    to positive NaN.
1875bd8deadSopenharmony_ci
1885bd8deadSopenharmony_ci    Any representable unsigned 10-bit floating-point value is legal
1895bd8deadSopenharmony_ci    as input to a GL command that accepts 10-bit floating-point data.
1905bd8deadSopenharmony_ci    The result of providing a value that is not a floating-point number
1915bd8deadSopenharmony_ci    (such as infinity or NaN) to such a command is unspecified, but must
1925bd8deadSopenharmony_ci    not lead to GL interruption or termination.  Providing a denormalized
1935bd8deadSopenharmony_ci    number or negative zero to GL must yield predictable results.
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ciAdditions to Chapter 3 of the 2.0 Specification (Rasterization)
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci -- Section 3.6.4, Rasterization of Pixel Rectangles
1985bd8deadSopenharmony_ci
1995bd8deadSopenharmony_ci    Add a new row to Table 3.5 (page 128):
2005bd8deadSopenharmony_ci
2015bd8deadSopenharmony_ci        type Parameter                    Corresponding  Special
2025bd8deadSopenharmony_ci        Token Name                        GL Data Type   Interpretation
2035bd8deadSopenharmony_ci        --------------------------------  -------------  --------------
2045bd8deadSopenharmony_ci        UNSIGNED_INT_10F_11F_11F_REV_EXT   uint           yes
2055bd8deadSopenharmony_ci
2065bd8deadSopenharmony_ci    Add a new row to table 3.8: Packed pixel formats (page 132):
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci        type Parameter                    GL Data  Number of   Matching
2095bd8deadSopenharmony_ci        Token Name                        Type     Components  Pixel Formats
2105bd8deadSopenharmony_ci        --------------------------------  -------  ----------  -------------
2115bd8deadSopenharmony_ci        UNSIGNED_INT_10F_11F_11F_REV_EXT   uint     3           RGB
2125bd8deadSopenharmony_ci
2135bd8deadSopenharmony_ci    Add a new entry to table 3.11: UNSIGNED_INT formats (page 134):
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci        UNSIGNED_INT_10F_11F_11F_REV_EXT:
2165bd8deadSopenharmony_ci
2175bd8deadSopenharmony_ci        31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
2185bd8deadSopenharmony_ci        +----------------------------+--------------------------------+---------------------------------+
2195bd8deadSopenharmony_ci        |           3rd              |             2nd                |             1st                 |
2205bd8deadSopenharmony_ci        +----------------------------+--------------------------------+---------------------------------+
2215bd8deadSopenharmony_ci
2225bd8deadSopenharmony_ci    Add to the end of the 2nd paragraph starting "Pixels are draw using":
2235bd8deadSopenharmony_ci
2245bd8deadSopenharmony_ci    "If type is UNSIGNED_INT_10F_11F_11F_REV_EXT and format is not RGB
2255bd8deadSopenharmony_ci    then the error INVALID_ENUM occurs."
2265bd8deadSopenharmony_ci
2275bd8deadSopenharmony_ci    Add UNSIGNED_INT_10F_11F_11F_REV_EXT to the list of packed formats
2285bd8deadSopenharmony_ci    in the 10th paragraph after the "Packing" subsection (page 130).
2295bd8deadSopenharmony_ci
2305bd8deadSopenharmony_ci    Add before the 3rd paragraph (page 135, starting "Calling DrawPixels
2315bd8deadSopenharmony_ci    with a type of BITMAP...") from the end of the "Packing" subsection:
2325bd8deadSopenharmony_ci
2335bd8deadSopenharmony_ci    "Calling DrawPixels with a type of UNSIGNED_INT_10F_11F_11F_REV_EXT
2345bd8deadSopenharmony_ci    and format of RGB is a special case in which the data are a series
2355bd8deadSopenharmony_ci    of GL uint values.  Each uint value specifies 3 packed components
2365bd8deadSopenharmony_ci    as shown in table 3.11.  The 1st, 2nd, and 3rd components are
2375bd8deadSopenharmony_ci    called f_red (11 bits), f_green (11 bits), and f_blue (10 bits)
2385bd8deadSopenharmony_ci    respectively.
2395bd8deadSopenharmony_ci
2405bd8deadSopenharmony_ci    f_red and f_green are treated as unsigned 11-bit floating-point values
2415bd8deadSopenharmony_ci    and converted to floating-point red and green components respectively
2425bd8deadSopenharmony_ci    as described in section 2.1.A.  f_blue is treated as an unsigned
2435bd8deadSopenharmony_ci    10-bit floating-point value and converted to a floating-point blue
2445bd8deadSopenharmony_ci    component as described in section 2.1.B."
2455bd8deadSopenharmony_ci
2465bd8deadSopenharmony_ci -- Section 3.8.1, Texture Image Specification:
2475bd8deadSopenharmony_ci
2485bd8deadSopenharmony_ci    "Alternatively if the internalformat is R11F_G11F_B10F_EXT, the red,
2495bd8deadSopenharmony_ci    green, and blue bits are converted to unsigned 11-bit, unsigned
2505bd8deadSopenharmony_ci    11-bit, and unsigned 10-bit floating-point values as described
2515bd8deadSopenharmony_ci    in sections 2.1.A and 2.1.B.  These encoded values can be later
2525bd8deadSopenharmony_ci    decoded back to floating-point values due to texture image sampling
2535bd8deadSopenharmony_ci    or querying."
2545bd8deadSopenharmony_ci
2555bd8deadSopenharmony_ci    Add a new row to Table 3.16 (page 154).
2565bd8deadSopenharmony_ci
2575bd8deadSopenharmony_ci        Sized                  Base             R     G     B     A     L     I     D
2585bd8deadSopenharmony_ci        Internal Format        Internal Format  bits  bits  bits  bits  bits  bits  bits
2595bd8deadSopenharmony_ci        ---------------------  ---------------  ----  ----  ----  ----  ----  ----  ----
2605bd8deadSopenharmony_ci        R11F_G11F_B10F_EXT     RGB              11    11    10
2615bd8deadSopenharmony_ci
2625bd8deadSopenharmony_ciAdditions to Chapter 4 of the 2.0 Specification (Per-Fragment Operations
2635bd8deadSopenharmony_ciand the Frame Buffer)
2645bd8deadSopenharmony_ci
2655bd8deadSopenharmony_ci -- Modify Chapter 4 Introduction, (page 198)
2665bd8deadSopenharmony_ci
2675bd8deadSopenharmony_ci    Modify first sentence of third paragraph (page 198):
2685bd8deadSopenharmony_ci
2695bd8deadSopenharmony_ci    "Color buffers consist of either signed or unsigned integer color
2705bd8deadSopenharmony_ci    indices, R, G, B and optionally A signed or unsigned integer values,
2715bd8deadSopenharmony_ci    or R, G, B, and optionally A signed or unsigned floating-point
2725bd8deadSopenharmony_ci    values."
2735bd8deadSopenharmony_ci
2745bd8deadSopenharmony_ci -- Section 4.3.2, Reading Pixels
2755bd8deadSopenharmony_ci
2765bd8deadSopenharmony_ci    Add a row to table 4.7 (page 224);
2775bd8deadSopenharmony_ci
2785bd8deadSopenharmony_ci                                                    Component
2795bd8deadSopenharmony_ci    type Parameter                    GL Data Type  Conversion Formula
2805bd8deadSopenharmony_ci    --------------------------------  ------------  ------------------
2815bd8deadSopenharmony_ci    UNSIGNED_INT_10F_11F_11F_REV_EXT   uint          special
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci    Replace second paragraph of "Final Conversion" (page 222) to read:
2845bd8deadSopenharmony_ci
2855bd8deadSopenharmony_ci    For an RGBA color, if <type> is not one of FLOAT,
2865bd8deadSopenharmony_ci    UNSIGNED_INT_5_9_9_9_REV_EXT, or UNSIGNED_INT_10F_11F_11F_REV_EXT,
2875bd8deadSopenharmony_ci    or if the CLAMP_READ_COLOR_ARB is TRUE, or CLAMP_READ_COLOR_ARB
2885bd8deadSopenharmony_ci    is FIXED_ONLY_ARB and the selected color (or texture) buffer is
2895bd8deadSopenharmony_ci    a fixed-point buffer, each component is first clamped to [0,1].
2905bd8deadSopenharmony_ci    Then the appropriate conversion formula from table 4.7 is applied
2915bd8deadSopenharmony_ci    the component."
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci    Add a paragraph after the second paragraph of "Final Conversion"
2945bd8deadSopenharmony_ci    (page 222):
2955bd8deadSopenharmony_ci
2965bd8deadSopenharmony_ci    "In the special case when calling ReadPixels with a type of
2975bd8deadSopenharmony_ci    UNSIGNED_INT_10F_11F_11F_REV_EXT and format of RGB, the conversion
2985bd8deadSopenharmony_ci    is done as follows:  The returned data are packed into a series of
2995bd8deadSopenharmony_ci    GL uint values. The red, green, and blue components are converted
3005bd8deadSopenharmony_ci    to unsigned 11-bit floating-point, unsigned 11-bit floating-point,
3015bd8deadSopenharmony_ci    and unsigned 10-bit floating point as described in section
3025bd8deadSopenharmony_ci    2.1.A and 2.1.B.  The resulting red 11 bits, green 11 bits, and blue
3035bd8deadSopenharmony_ci    10 bits are then packed as the 1st, 2nd, and 3rd components of the
3045bd8deadSopenharmony_ci    UNSIGNED_INT_10F_11F_11F_REV_EXT format as shown in table 3.11."
3055bd8deadSopenharmony_ci
3065bd8deadSopenharmony_ciAdditions to Chapter 5 of the 2.0 Specification (Special Functions)
3075bd8deadSopenharmony_ci
3085bd8deadSopenharmony_ci    None
3095bd8deadSopenharmony_ci
3105bd8deadSopenharmony_ciAdditions to Chapter 6 of the 2.0 Specification (State and State Requests)
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ci    None
3135bd8deadSopenharmony_ci
3145bd8deadSopenharmony_ciAdditions to the OpenGL Shading Language specification
3155bd8deadSopenharmony_ci
3165bd8deadSopenharmony_ci    None
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ciAdditions to Chapter 3 of the GLX 1.3 Specification (Functions and
3195bd8deadSopenharmony_ciErrors)
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci    Replace Section 3.3.3 (p.12) Paragraph 4 to:
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ci    The attribute GLX_RENDER_TYPE has as its value a mask indicating
3245bd8deadSopenharmony_ci    what type of GLXContext a drawable created with the corresponding
3255bd8deadSopenharmony_ci    GLXFBConfig can be bound to. The following bit settings are supported:
3265bd8deadSopenharmony_ci    GLX_RGBA_BIT, GLX_RGBA_FLOAT_BIT, GLX_RGBA_UNSIGNED_FLOAT_BIT,
3275bd8deadSopenharmony_ci    GLX_COLOR_INDEX_BIT.  If combinations of bits are set in the mask
3285bd8deadSopenharmony_ci    then drawables created with the GLXFBConfig can be bound to those
3295bd8deadSopenharmony_ci    corresponding types of rendering contexts.
3305bd8deadSopenharmony_ci
3315bd8deadSopenharmony_ci    Add to Section 3.3.3 (p.15) after first paragraph:
3325bd8deadSopenharmony_ci
3335bd8deadSopenharmony_ci    Note that unsigned floating point rendering is only supported
3345bd8deadSopenharmony_ci    for GLXPbuffer drawables.  The GLX_DRAWABLE_TYPE attribute of
3355bd8deadSopenharmony_ci    the GLXFBConfig must have the GLX_PBUFFER_BIT bit set and the
3365bd8deadSopenharmony_ci    GLX_RENDER_TYPE attribute must have the GLX_RGBA_UNSIGNED_FLOAT_BIT
3375bd8deadSopenharmony_ci    set.  Unsigned floating point rendering assumes the framebuffer
3385bd8deadSopenharmony_ci    format has no sign bits so all component values are non-negative.
3395bd8deadSopenharmony_ci    In contrast, conventional floating point rendering assumes signed
3405bd8deadSopenharmony_ci    components.
3415bd8deadSopenharmony_ci
3425bd8deadSopenharmony_ci    Modify Section 3.3.7 (p.25 Rendering Contexts) remove period
3435bd8deadSopenharmony_ci    at end of second paragraph and replace with:
3445bd8deadSopenharmony_ci
3455bd8deadSopenharmony_ci    ; if render_type is set to GLX_RGBA_UNSIGNED_FLOAT_TYPE then a
3465bd8deadSopenharmony_ci    context that supports unsigned floating point RGBA rendering is
3475bd8deadSopenharmony_ci    created.
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ciGLX Protocol
3505bd8deadSopenharmony_ci
3515bd8deadSopenharmony_ci    None.
3525bd8deadSopenharmony_ci
3535bd8deadSopenharmony_ciAdditions to the WGL Specification
3545bd8deadSopenharmony_ci
3555bd8deadSopenharmony_ci    Modify the values accepted by WGL_PIXEL_TYPE_ARB to:
3565bd8deadSopenharmony_ci
3575bd8deadSopenharmony_ci        WGL_PIXEL_TYPE_ARB
3585bd8deadSopenharmony_ci        The type of pixel data. This can be set to WGL_TYPE_RGBA_ARB,
3595bd8deadSopenharmony_ci        WGL_TYPE_RGBA_FLOAT_ARB, WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT,
3605bd8deadSopenharmony_ci        or WGL_TYPE_COLORINDEX_ARB.
3615bd8deadSopenharmony_ci
3625bd8deadSopenharmony_ci    Add this explanation of unsigned floating point rendering:
3635bd8deadSopenharmony_ci
3645bd8deadSopenharmony_ci    "Unsigned floating point rendering assumes the framebuffer format has
3655bd8deadSopenharmony_ci    no sign bits so all component values are non-negative.  In contrast,
3665bd8deadSopenharmony_ci    conventional floating point rendering assumes signed components."
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ciDependencies on WGL_ARB_pbuffer
3695bd8deadSopenharmony_ci
3705bd8deadSopenharmony_ci    Ignore the "Additions to the WGL Specification" section if
3715bd8deadSopenharmony_ci    WGL_ARB_pbuffer is not supported.
3725bd8deadSopenharmony_ci
3735bd8deadSopenharmony_ciDependencies on WGL_ARB_pixel_format
3745bd8deadSopenharmony_ci
3755bd8deadSopenharmony_ci    The WGL_ARB_pixel_format extension must be used to determine a
3765bd8deadSopenharmony_ci    pixel format with unsigned float components.
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ciDependencies on ARB_color_buffer_float
3795bd8deadSopenharmony_ci
3805bd8deadSopenharmony_ci    If ARB_color_buffer_float is not supported, replace this amended
3815bd8deadSopenharmony_ci    sentence from 4.3.2 above
3825bd8deadSopenharmony_ci
3835bd8deadSopenharmony_ci    For an RGBA color, if <type> is not one of FLOAT,
3845bd8deadSopenharmony_ci    UNSIGNED_INT_5_9_9_9_REV_EXT, or UNSIGNED_INT_10F_11F_11F_REV_EXT,
3855bd8deadSopenharmony_ci    or if the CLAMP_READ_COLOR_ARB is TRUE, or CLAMP_READ_COLOR_ARB
3865bd8deadSopenharmony_ci    is FIXED_ONLY_ARB and the selected color (or texture) buffer is
3875bd8deadSopenharmony_ci    a fixed-point buffer, each component is first clamped to [0,1]."
3885bd8deadSopenharmony_ci
3895bd8deadSopenharmony_ci    with
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ci    "For an RGBA color, if <type> is not one of FLOAT,
3925bd8deadSopenharmony_ci    UNSIGNED_INT_5_9_9_9_REV_EXT, or UNSIGNED_INT_10F_11F_11F_REV_EXT
3935bd8deadSopenharmony_ci    and the selected color buffer (or texture image for GetTexImage)
3945bd8deadSopenharmony_ci    is a fixed-point buffer (or texture image for GetTexImage), each
3955bd8deadSopenharmony_ci    component is first clamped to [0,1]."
3965bd8deadSopenharmony_ci
3975bd8deadSopenharmony_ciDependencies on EXT_texture_shared_exponent
3985bd8deadSopenharmony_ci
3995bd8deadSopenharmony_ci    If EXT_texture_shared_exponent is not supported, delete the reference
4005bd8deadSopenharmony_ci    to UNSIGNED_INT_5_9_9_9_REV_EXT in section 4.3.2.
4015bd8deadSopenharmony_ci
4025bd8deadSopenharmony_ciDependencies on EXT_framebuffer_object
4035bd8deadSopenharmony_ci
4045bd8deadSopenharmony_ci    If EXT_framebuffer_object is not supported, then
4055bd8deadSopenharmony_ci    RenderbufferStorageEXT is not supported and the R11F_G11F_B10F_EXT
4065bd8deadSopenharmony_ci    internalformat is therefore not supported by RenderbufferStorageEXT.
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ci    If EXT_framebuffer_object is supported, glRenderbufferStorageEXT
4095bd8deadSopenharmony_ci    accepts GL_RG11F_B10F_EXT for its internalformat parameter because
4105bd8deadSopenharmony_ci    GL_RG11F_B10F_EXT has a base internal format of GL_RGB that is listed
4115bd8deadSopenharmony_ci    as color-renderable by the EXT_framebuffer_object specification.
4125bd8deadSopenharmony_ci
4135bd8deadSopenharmony_ciErrors
4145bd8deadSopenharmony_ci
4155bd8deadSopenharmony_ci    Relaxation of INVALID_ENUM errors
4165bd8deadSopenharmony_ci    ---------------------------------
4175bd8deadSopenharmony_ci
4185bd8deadSopenharmony_ci    TexImage1D, TexImage2D, TexImage3D, CopyTexImage1D, CopyTexImage2D,
4195bd8deadSopenharmony_ci    and RenderbufferStorageEXT accept the new R11F_G11F_B10F_EXT token
4205bd8deadSopenharmony_ci    for internalformat.
4215bd8deadSopenharmony_ci
4225bd8deadSopenharmony_ci    DrawPixels, ReadPixels, TexImage1D, TexImage2D, GetTexImage,
4235bd8deadSopenharmony_ci    TexImage3D, TexSubImage1D, TexSubImage2D, TexSubImage3D,
4245bd8deadSopenharmony_ci    GetHistogram, GetMinmax, ConvolutionFilter1D, ConvolutionFilter2D,
4255bd8deadSopenharmony_ci    ConvolutionFilter3D, GetConvolutionFilter, SeparableFilter2D,
4265bd8deadSopenharmony_ci    GetSeparableFilter, ColorTable, ColorSubTable, and GetColorTable
4275bd8deadSopenharmony_ci    accept the new UNSIGNED_INT_10F_11F_11F_REV_EXT token for type.
4285bd8deadSopenharmony_ci
4295bd8deadSopenharmony_ci    New errors
4305bd8deadSopenharmony_ci    ----------
4315bd8deadSopenharmony_ci
4325bd8deadSopenharmony_ci    INVALID_OPERATION is generated by DrawPixels, ReadPixels, TexImage1D,
4335bd8deadSopenharmony_ci    TexImage2D, GetTexImage, TexImage3D, TexSubImage1D, TexSubImage2D,
4345bd8deadSopenharmony_ci    TexSubImage3D, GetHistogram, GetMinmax, ConvolutionFilter1D,
4355bd8deadSopenharmony_ci    ConvolutionFilter2D, ConvolutionFilter3D, GetConvolutionFilter,
4365bd8deadSopenharmony_ci    SeparableFilter2D, GetSeparableFilter, ColorTable, ColorSubTable,
4375bd8deadSopenharmony_ci    and GetColorTable if <type> is UNSIGNED_INT_10F_11F_11F_REV_EXT and
4385bd8deadSopenharmony_ci    <format> is not RGB.
4395bd8deadSopenharmony_ci
4405bd8deadSopenharmony_ciNew State
4415bd8deadSopenharmony_ci
4425bd8deadSopenharmony_ci    In table 6.17, Textures (page 278), increment the 42 in "n x Z42*"
4435bd8deadSopenharmony_ci    by 1 for the R11F_G11F_B10F_EXT format.
4445bd8deadSopenharmony_ci
4455bd8deadSopenharmony_ci    [NOTE: The OpenGL 2.0 specification actually should read "n x Z48*"
4465bd8deadSopenharmony_ci    because of the 6 generic compressed internal formats in table 3.18.]
4475bd8deadSopenharmony_ci
4485bd8deadSopenharmony_ci    (modify table 6.33, p. 294)
4495bd8deadSopenharmony_ci
4505bd8deadSopenharmony_ci                                                      Initial
4515bd8deadSopenharmony_ci    Get Value                    Type   Get Command   Value    Description         Sec.   Attribute
4525bd8deadSopenharmony_ci    --------------------------   ----   -----------   -------  ------------------  ----   ----------
4535bd8deadSopenharmony_ci    RGBA_SIGNED_COMPONENTS_EXT   4xB    GetIntegerv   -        True if respective  4      -
4545bd8deadSopenharmony_ci                                                               R, G, B, and A
4555bd8deadSopenharmony_ci                                                               components are
4565bd8deadSopenharmony_ci                                                               signed
4575bd8deadSopenharmony_ci    
4585bd8deadSopenharmony_ciNew Implementation Dependent State
4595bd8deadSopenharmony_ci
4605bd8deadSopenharmony_ci    None
4615bd8deadSopenharmony_ci
4625bd8deadSopenharmony_ciIssues
4635bd8deadSopenharmony_ci
4645bd8deadSopenharmony_ci    1)  What should this extension be called?
4655bd8deadSopenharmony_ci
4665bd8deadSopenharmony_ci        RESOLVED: EXT_packed_float
4675bd8deadSopenharmony_ci
4685bd8deadSopenharmony_ci        This extension provides a new 3-component packed float format
4695bd8deadSopenharmony_ci        for use as a texture internal format, pixel external format,
4705bd8deadSopenharmony_ci        and framebuffer color format.
4715bd8deadSopenharmony_ci
4725bd8deadSopenharmony_ci        "packed" indicates the extension is packing components
4735bd8deadSopenharmony_ci        at reduced precisions (similar to EXT_packed_pixels or
4745bd8deadSopenharmony_ci        NV_packed_depth_stencil).
4755bd8deadSopenharmony_ci
4765bd8deadSopenharmony_ci        EXT_r11f_g11f_b10f_float was considered but there's no precedent
4775bd8deadSopenharmony_ci        for extension names to be so explicit (or cryptic?) about format
4785bd8deadSopenharmony_ci        specifics in the extension name.
4795bd8deadSopenharmony_ci
4805bd8deadSopenharmony_ci    2)  Should there be an rgb11f_b10f framebuffer format?
4815bd8deadSopenharmony_ci
4825bd8deadSopenharmony_ci        RESOLVED:  Yes.  Unsigned floating-point rendering formats for GLX
4835bd8deadSopenharmony_ci        and WGL are provided.  The assumption is that this functionality
4845bd8deadSopenharmony_ci        could be used to advertise a pixel format with 11 bits of unsigned
4855bd8deadSopenharmony_ci        floating-point red, 11 bits of unsigned floating-point green,
4865bd8deadSopenharmony_ci        and 10 bits of floating-point blue.
4875bd8deadSopenharmony_ci
4885bd8deadSopenharmony_ci        In theory, an implementation could advertise other component sizes
4895bd8deadSopenharmony_ci        other than 11/11/10 for an unsigned floating-point framebuffer
4905bd8deadSopenharmony_ci        format but that is not expected.
4915bd8deadSopenharmony_ci
4925bd8deadSopenharmony_ci    3)  Should there be GLX and WGL extension strings?
4935bd8deadSopenharmony_ci
4945bd8deadSopenharmony_ci        RESOLVED:  Yes, there are WGL and GLX tokens added to
4955bd8deadSopenharmony_ci        support querying unsigned floating-point color buffer
4965bd8deadSopenharmony_ci        formats named WGL_EXT_pixel_format_packed_float and
4975bd8deadSopenharmony_ci        GLX_EXT_fbconfig_packed_float respectively.
4985bd8deadSopenharmony_ci
4995bd8deadSopenharmony_ci    4)  Should there be an unequal distribution of red, green, and blue
5005bd8deadSopenharmony_ci        mantissa bits?
5015bd8deadSopenharmony_ci
5025bd8deadSopenharmony_ci        RESOLVED:  Yes.  A 6-bit mantissa for red and green is unbalanced
5035bd8deadSopenharmony_ci        with the 5-bit mantissa for blue, but this allows all the bits of
5045bd8deadSopenharmony_ci        a 32 bit word (6+6+5+3*5=32) to be used.  The blue component is
5055bd8deadSopenharmony_ci        chosen to have fewer bits because 1) it is the third component,
5065bd8deadSopenharmony_ci        and 2) there's a belief that the human eye is less sensitive
5075bd8deadSopenharmony_ci        to blue variations..
5085bd8deadSopenharmony_ci
5095bd8deadSopenharmony_ci        Developers should be aware that subtle yellowing or bluing
5105bd8deadSopenharmony_ci        of gray-scale values is possible because of the extra bit of
5115bd8deadSopenharmony_ci        mantissa in the red and green components.
5125bd8deadSopenharmony_ci
5135bd8deadSopenharmony_ci    5)  Should there be an external format for r11f_g11f_b10f?
5145bd8deadSopenharmony_ci
5155bd8deadSopenharmony_ci        RESOLVED:  Yes.  This makes it fast to load GL_R11F_G11F_B10F_EXT
5165bd8deadSopenharmony_ci        textures without any translation by the driver.
5175bd8deadSopenharmony_ci
5185bd8deadSopenharmony_ci    6)  What is the exponent bias?
5195bd8deadSopenharmony_ci
5205bd8deadSopenharmony_ci        RESOLVED:  15, just like 16-bit half-precision floating-point
5215bd8deadSopenharmony_ci        values.  
5225bd8deadSopenharmony_ci
5235bd8deadSopenharmony_ci    7)  Can s10e5 floating-point filtering be used to filter
5245bd8deadSopenharmony_ci        r11f_g11f_b10f values?  If so, how?
5255bd8deadSopenharmony_ci
5265bd8deadSopenharmony_ci        RESOLVED:  Yes.  It is easy to promote r11f_g11f_b10f values to
5275bd8deadSopenharmony_ci        s10e5 components.
5285bd8deadSopenharmony_ci
5295bd8deadSopenharmony_ci    8)  Should automatic mipmap generation be supported for r11f_g11f_b10f
5305bd8deadSopenharmony_ci        textures?
5315bd8deadSopenharmony_ci
5325bd8deadSopenharmony_ci        RESOLVED:  Yes.
5335bd8deadSopenharmony_ci
5345bd8deadSopenharmony_ci    9)  Should non-texture and non-framebuffer commands for loading
5355bd8deadSopenharmony_ci        pixel data accept the GL_UNSIGNED_INT_10F_11F_11F_REV_EXT type?
5365bd8deadSopenharmony_ci
5375bd8deadSopenharmony_ci        RESOLVED:  Yes.
5385bd8deadSopenharmony_ci
5395bd8deadSopenharmony_ci        Once the pixel path has to support the new type/format combination
5405bd8deadSopenharmony_ci        of GL_UNSIGNED_INT_5_9_9_9_REV_EXT / GL_RGB for specifying and
5415bd8deadSopenharmony_ci        querying texture images, it might as well be supported for all
5425bd8deadSopenharmony_ci        commands that pack and unpack RGB pixel data.
5435bd8deadSopenharmony_ci
5445bd8deadSopenharmony_ci        The specification is written such that the glDrawPixels
5455bd8deadSopenharmony_ci        type/format parameters are accepted by glReadPixels,
5465bd8deadSopenharmony_ci        glTexGetImage, glTexImage2D, and other commands that are specified
5475bd8deadSopenharmony_ci        in terms of glDrawPixels.
5485bd8deadSopenharmony_ci
5495bd8deadSopenharmony_ci    10) Should non-texture internal formats (such as for color tables,
5505bd8deadSopenharmony_ci        convolution kernels, histogram bins, and min/max tables) accept
5515bd8deadSopenharmony_ci        GL_R11F_G11F_B10F_EXT format?
5525bd8deadSopenharmony_ci
5535bd8deadSopenharmony_ci        RESOLVED:  No.
5545bd8deadSopenharmony_ci
5555bd8deadSopenharmony_ci        That's pointless.  No hardware is ever likely to support
5565bd8deadSopenharmony_ci        GL_R11F_G11F_B10F_EXT internal formats for anything other than
5575bd8deadSopenharmony_ci        textures and maybe color buffers in the future.  This format is
5585bd8deadSopenharmony_ci        not interesting for color tables, convolution kernels, etc.
5595bd8deadSopenharmony_ci
5605bd8deadSopenharmony_ci    11) Should a format be supported with sign bits for each component?
5615bd8deadSopenharmony_ci
5625bd8deadSopenharmony_ci        RESOLVED:  No.  A sign bit for each of the three components would
5635bd8deadSopenharmony_ci        steal too many bits from the mantissa.  This format is intended
5645bd8deadSopenharmony_ci        for storing radiance and irradiance values that are physically
5655bd8deadSopenharmony_ci        non-negative.
5665bd8deadSopenharmony_ci
5675bd8deadSopenharmony_ci    12) Should we support a non-REV version of the
5685bd8deadSopenharmony_ci        GL_UNSIGNED_INT_10F_11F_11F_REV_EXT token?
5695bd8deadSopenharmony_ci
5705bd8deadSopenharmony_ci        RESOLVED:  No.  We don't want to promote different arrangements
5715bd8deadSopenharmony_ci        of the bitfields for r11f_g11f_b10f values.
5725bd8deadSopenharmony_ci
5735bd8deadSopenharmony_ci    13) Can you use the GL_UNSIGNED_INT_10F_11F_11F_REV_EXT format with
5745bd8deadSopenharmony_ci        just any format?
5755bd8deadSopenharmony_ci
5765bd8deadSopenharmony_ci        RESOLVED:  You can only use the
5775bd8deadSopenharmony_ci        GL_UNSIGNED_INT_10F_11F_11F_REV_EXT format with GL_RGB.
5785bd8deadSopenharmony_ci        Otherwise, the GL generates a GL_INVALID_OPERATION error.
5795bd8deadSopenharmony_ci        Just as the GL_UNSIGNED_BYTE_3_3_2 format just works with GL_RGB
5805bd8deadSopenharmony_ci        (or else the GL generates a GL_INVALID_OPERATION error), so
5815bd8deadSopenharmony_ci        should GL_UNSIGNED_INT_10F_11F_11F_REV_EXT.
5825bd8deadSopenharmony_ci
5835bd8deadSopenharmony_ci    14) Should blending be supported for a packed float framebuffer
5845bd8deadSopenharmony_ci        format?
5855bd8deadSopenharmony_ci
5865bd8deadSopenharmony_ci        RESOLVED:  Yes.  Blending is required for other floating-point
5875bd8deadSopenharmony_ci        framebuffer formats introduced by ARB_color_buffer_float.
5885bd8deadSopenharmony_ci        The equations for blending should be evaluated with signed
5895bd8deadSopenharmony_ci        floating-point math but the result will have to be clamped to
5905bd8deadSopenharmony_ci        non-negative values to be stored back into the packed float
5915bd8deadSopenharmony_ci        format of the color buffer.
5925bd8deadSopenharmony_ci
5935bd8deadSopenharmony_ci    15) Should unsigned floating-point framebuffers be queried
5945bd8deadSopenharmony_ci        differently from conventional (signed) floating-point
5955bd8deadSopenharmony_ci        framebuffers?
5965bd8deadSopenharmony_ci
5975bd8deadSopenharmony_ci        RESOLVED:  Yes.  An existing application using
5985bd8deadSopenharmony_ci        ARB_color_buffer_float can rightfully expect a floating-point
5995bd8deadSopenharmony_ci        color buffer format to provide signed components.  The packed
6005bd8deadSopenharmony_ci        float format does not provide a sign bit.  Simply treating packed
6015bd8deadSopenharmony_ci        float color buffer formats as floating-point might break some
6025bd8deadSopenharmony_ci        existing applications that depend on a float color buffer to be
6035bd8deadSopenharmony_ci        signed.
6045bd8deadSopenharmony_ci
6055bd8deadSopenharmony_ci        For this reason, there are new WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT
6065bd8deadSopenharmony_ci        (for WGL) and GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT (for GLX)
6075bd8deadSopenharmony_ci        framebuffer format parameters.
6085bd8deadSopenharmony_ci
6095bd8deadSopenharmony_ci    16) What should glGet of GL_RGBA_FLOAT_MODE_ARB return for unsigned
6105bd8deadSopenharmony_ci        float color buffer formats?
6115bd8deadSopenharmony_ci
6125bd8deadSopenharmony_ci        RESOLVED.  GL_RGBA_FLOAT_MODE_ARB should return true.  The packed
6135bd8deadSopenharmony_ci        float components are unsigned but still floating-point.
6145bd8deadSopenharmony_ci
6155bd8deadSopenharmony_ci    17) Can you query with glGet to determine if the color buffer has
6165bd8deadSopenharmony_ci        unsigned float components?
6175bd8deadSopenharmony_ci
6185bd8deadSopenharmony_ci        RESOLVED:  Yes.  Call glGetIntegerv
6195bd8deadSopenharmony_ci        on GL_RGBA_SIGNED_COMPONENTS_EXT.  The value returned is
6205bd8deadSopenharmony_ci        a 4-element array.  Element 0 corresponds to red, element 1
6215bd8deadSopenharmony_ci        corresponds to green, element 2 corresponds to blue, and element
6225bd8deadSopenharmony_ci        3 corresponds to alpha.  If a color component is signed, its
6235bd8deadSopenharmony_ci        corresponding element is true (GL_TRUE).  This is the same way
6245bd8deadSopenharmony_ci        the GL_COLOR_WRITEMASK bits are formatted.
6255bd8deadSopenharmony_ci
6265bd8deadSopenharmony_ci        For the packed float format, all the elements are zeroed since
6275bd8deadSopenharmony_ci        the red, green, and blue components are unsigned and the alpha
6285bd8deadSopenharmony_ci        component is non-existent.  All elements are also zeroed for
6295bd8deadSopenharmony_ci        conventional fixed-point color buffer formats.  Elements are
6305bd8deadSopenharmony_ci        set for signed floating-point formats such as those introduced
6315bd8deadSopenharmony_ci        by ARB_color_buffer_float.  If a component (such as alpha) has
6325bd8deadSopenharmony_ci        zero bits, the component should not be considered signed and so
6335bd8deadSopenharmony_ci        the bit for the respective component should be zeroed.
6345bd8deadSopenharmony_ci
6355bd8deadSopenharmony_ci        This generality allows a future extension to specify float
6365bd8deadSopenharmony_ci        color buffer formats that had a mixture of signed and unsigned
6375bd8deadSopenharmony_ci        floating-point components.  However, this extension only provides
6385bd8deadSopenharmony_ci        a packed float color format with all unsigned components.
6395bd8deadSopenharmony_ci
6405bd8deadSopenharmony_ci    18) How many bits of alpha should GL_ALPHA_BITS return for the packed
6415bd8deadSopenharmony_ci        float color buffer format?
6425bd8deadSopenharmony_ci
6435bd8deadSopenharmony_ci        RESOLVED:  Zero.
6445bd8deadSopenharmony_ci
6455bd8deadSopenharmony_ci    19) Can you render to a packed float texture with the
6465bd8deadSopenharmony_ci        EXT_framebuffer_object functionality?
6475bd8deadSopenharmony_ci
6485bd8deadSopenharmony_ci        RESOLVED:  Yes.
6495bd8deadSopenharmony_ci
6505bd8deadSopenharmony_ci        Potentially an implementation could return
6515bd8deadSopenharmony_ci        GL_FRAMEBUFFER_UNSUPPORTED_EXT when glCheckFramebufferStatusEXT
6525bd8deadSopenharmony_ci        for a framebuffer object including a packed float color buffer,
6535bd8deadSopenharmony_ci        but implementations are likely to support (and strongly encouraged
6545bd8deadSopenharmony_ci        to support) the packed float format for use with a framebuffer
6555bd8deadSopenharmony_ci        object because the packed float format is expected to be a
6565bd8deadSopenharmony_ci        memory-efficient floating-point color format well-suited for
6575bd8deadSopenharmony_ci        rendering, particularly rendering involving high-dynamic range.
6585bd8deadSopenharmony_ci
6595bd8deadSopenharmony_ci    20) This extension is for a particular packed float format.  What if
6605bd8deadSopenharmony_ci        new packed float formats come along?
6615bd8deadSopenharmony_ci
6625bd8deadSopenharmony_ci        RESOLVED:  A new extension could be introduced with a name like
6635bd8deadSopenharmony_ci        EXT_packed_float2, but at this time, no other such extensions
6645bd8deadSopenharmony_ci        are expected except for the EXT_texture_shared_exponent
6655bd8deadSopenharmony_ci        extension.  It simply hard to justify packing three or more
6665bd8deadSopenharmony_ci        components into a single 32-bit word in lots of different ways
6675bd8deadSopenharmony_ci        since any approach is going to be a compromise of some sort.
6685bd8deadSopenharmony_ci        For two-component or one-component floating-point formats, the
6695bd8deadSopenharmony_ci        existing ARB_texture_float formats fit nicely into 16 or 32 bits
6705bd8deadSopenharmony_ci        by simply using half precision floating-point.  If 64 bits are
6715bd8deadSopenharmony_ci        allowed for a pixel, the GL_RGBA16F_ARB is a good choice.
6725bd8deadSopenharmony_ci
6735bd8deadSopenharmony_ci        The packed float format is similar to the format introduced by
6745bd8deadSopenharmony_ci        the EXT_texture_shared_exponent extension, but that extension
6755bd8deadSopenharmony_ci        is not a pure packed float format.  Unlike the packed float
6765bd8deadSopenharmony_ci        format, the EXT_texture_shared_exponent format shares a single
6775bd8deadSopenharmony_ci        exponent between the RGB components rather than providing
6785bd8deadSopenharmony_ci        an independent exponent for each component.  Because the
6795bd8deadSopenharmony_ci        EXT_texture_shared_exponent uses fewer bits to store exponent
6805bd8deadSopenharmony_ci        values, more mantissa precision is provided.
6815bd8deadSopenharmony_ci
6825bd8deadSopenharmony_ci    21) Should this extension provide pbuffer support?
6835bd8deadSopenharmony_ci
6845bd8deadSopenharmony_ci        RESOLVED:  Yes.  Pbuffers are core GLX 1.3 functionality.
6855bd8deadSopenharmony_ci        While using FBO is probably the preferred way to render to
6865bd8deadSopenharmony_ci        r11f_g11f_b10f framebuffers but pbuffer support is natural
6875bd8deadSopenharmony_ci        to provide.  WGL should have r11f_g11f_b10f pbuffer support too.
6885bd8deadSopenharmony_ci
6895bd8deadSopenharmony_ci    22) Must an implementation support NaN, Infinity, and/or denorms?
6905bd8deadSopenharmony_ci
6915bd8deadSopenharmony_ci        RESOLVED:  The preferred implementation is to support NaN,
6925bd8deadSopenharmony_ci        Infinity, and denorms.  Implementations are allowed to flush
6935bd8deadSopenharmony_ci        denorms to zero, and treat NaN and Infinity values as large
6945bd8deadSopenharmony_ci        finite values.
6955bd8deadSopenharmony_ci
6965bd8deadSopenharmony_ci        This allowance flushes denorms to zero:
6975bd8deadSopenharmony_ci
6985bd8deadSopenharmony_ci            0.0,                      if E == 0 and M != 0
6995bd8deadSopenharmony_ci
7005bd8deadSopenharmony_ci        This allowance treats Infinity as a finite value:
7015bd8deadSopenharmony_ci
7025bd8deadSopenharmony_ci            2^16                      if E == 31 and M == 0
7035bd8deadSopenharmony_ci
7045bd8deadSopenharmony_ci        This allowance treats NaN encodings as finite values:
7055bd8deadSopenharmony_ci
7065bd8deadSopenharmony_ci            2^16 * (1 + M/64)         if E == 31 and M != 0
7075bd8deadSopenharmony_ci
7085bd8deadSopenharmony_ci        The expectation is that mainstream GPUs will support NaN,
7095bd8deadSopenharmony_ci        Infinity, and denorms while low-end implementations such as for
7105bd8deadSopenharmony_ci        OpenGL ES 2.0 will likely support denorms but neither NaN nor
7115bd8deadSopenharmony_ci        Infinity.
7125bd8deadSopenharmony_ci
7135bd8deadSopenharmony_ci        There is not an indication of how these floating-point special
7145bd8deadSopenharmony_ci        values are treated (though an application could test an
7155bd8deadSopenharmony_ci        implementation if necessary).
7165bd8deadSopenharmony_ci
7175bd8deadSopenharmony_ci    23) Should this extension interoperate with framebuffer objects?
7185bd8deadSopenharmony_ci
7195bd8deadSopenharmony_ci        RESOLVED:  Definitely.  No particular specification language is
7205bd8deadSopenharmony_ci        required.
7215bd8deadSopenharmony_ci
7225bd8deadSopenharmony_ci        In particular, glRenderbufferStorageEXT should accept
7235bd8deadSopenharmony_ci        GL_R11F_G11F_B10F_EXT for its internalformat parameter (true
7245bd8deadSopenharmony_ci        because this extension adds a new format to Table 3.16).
7255bd8deadSopenharmony_ci
7265bd8deadSopenharmony_ci    24) Are negative color components clamped to zero when written into
7275bd8deadSopenharmony_ci        an unsigned floating-point color buffer?  If so, do we need to
7285bd8deadSopenharmony_ci        say in the Blending or Dithering language that negative color
7295bd8deadSopenharmony_ci        components are clamped to zero?
7305bd8deadSopenharmony_ci
7315bd8deadSopenharmony_ci        RESOLVED:  Yes, negative color components are clamped to zero when
7325bd8deadSopenharmony_ci        written to an unsigned floating-point color buffer.  No specification
7335bd8deadSopenharmony_ci        language is required for this behavior because the ARB_color_buffer_float
7345bd8deadSopenharmony_ci        extension says
7355bd8deadSopenharmony_ci
7365bd8deadSopenharmony_ci        "In RGBA mode dithering selects, for each color component, either
7375bd8deadSopenharmony_ci        the most positive representable color value (for that particular
7385bd8deadSopenharmony_ci        color component) that is less than or equal to the incoming
7395bd8deadSopenharmony_ci        color component value, c, or the most negative representable
7405bd8deadSopenharmony_ci        color value that is greater than or equal to c.
7415bd8deadSopenharmony_ci
7425bd8deadSopenharmony_ci        If dithering is disabled, then each incoming color component
7435bd8deadSopenharmony_ci        c is replaced with the most positive representable color value
7445bd8deadSopenharmony_ci        (for that particular component) that is less than or equal to c,
7455bd8deadSopenharmony_ci        or by the most negative representable value, if no representable
7465bd8deadSopenharmony_ci        value is less than or equal to c;"
7475bd8deadSopenharmony_ci
7485bd8deadSopenharmony_ci        The most negative representable value for unsigned
7495bd8deadSopenharmony_ci        floating-point values is zero.  So the existing language from
7505bd8deadSopenharmony_ci        ARB_color_buffer_float already indicates that negative values
7515bd8deadSopenharmony_ci        are clamped to zero for unsigned floating-point color buffers.
7525bd8deadSopenharmony_ci        No additional specification language is required.
7535bd8deadSopenharmony_ci
7545bd8deadSopenharmony_ci    25) Prior texture internal formats have generic formats (example:
7555bd8deadSopenharmony_ci        GL_RGB) and corresponding sized formats (GL_RGB8, GL_RGB10,
7565bd8deadSopenharmony_ci        etc.).  Should we add a generic format corresponding to
7575bd8deadSopenharmony_ci        GL_R11F_G11F_B10F_EXT?
7585bd8deadSopenharmony_ci
7595bd8deadSopenharmony_ci        RESOLVED:  No.  It's unlikely there will be any other unsigned
7605bd8deadSopenharmony_ci        floating-point texture formats.
7615bd8deadSopenharmony_ci
7625bd8deadSopenharmony_ciRevision History
7635bd8deadSopenharmony_ci
7645bd8deadSopenharmony_ci    None
765