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