| Name |
| |
| EXT_YUV_target |
| |
| Name Strings |
| |
| GL_EXT_YUV_target |
| |
| Contributors |
| |
| Amit Bansal |
| Arshad Bebal |
| Jeff Leger |
| Jing Zhou |
| Maurice Ribble |
| Prabindh Sundareson |
| Jan-Harald Fredriksen |
| Daniel Koch |
| Jamie Gennis |
| Mark Callow |
| Pat Brown |
| Andrew Garrard |
| Etay Meiri |
| Weifeng Zhang |
| |
| Contacts |
| |
| Jeff Leger <jleger@qti.qualcomm.com> |
| |
| Status |
| |
| Complete. |
| |
| Version |
| |
| April 6, 2018 (version 17) |
| |
| Number |
| |
| OpenGL ES Extension #222 |
| |
| Dependencies |
| |
| Requires OpenGL ES 3.0 and ESSL 3.0. |
| Requires EGL 1.4 and following EGL extension: |
| |
| EGL_KHR_image_base |
| OES_EGL_image_external |
| |
| This extension is written based on the wording of the OpenGL ES 3.0 |
| Specification and OpenGL ES Shading Language 3.0. |
| |
| This extension interacts with OpenGL ES 3.1. See issue 1 and 13 for |
| more details. |
| |
| This extension interacts with OES_tessellation_shader & |
| OES_geometry shader see first issue for more details. |
| |
| This extension borrows texture function names from the |
| OES_EGL_image_external_essl3. This extension is compatible with |
| OES_EGL_image_external_essl3 and can coexist but does not require it. |
| |
| This extension interacts with EXT_shader_framebuffer_fetch. see |
| issue 7 for more details. |
| |
| Overview |
| |
| This extension adds support for three new YUV related items: first |
| rendering to YUV images, second sampling from YUV images while keeping the |
| data in YUV space, third it defines a new built in function that does |
| conversion from RGB to YUV with controls to choose ITU-R BT.601-7, |
| ITU-R BT.601-7 Full range (JFIF images), or ITU-R BT.709-5 standard. |
| |
| This new functionality is layered on top of the OES_EGL_image_external |
| extension. |
| |
| To perform the YUV rendering capability in this extension an application |
| will attach a texture to the framebuffer object as the color attachment. |
| If the texture has a target type of TEXTURE_EXTERNAL_OES with YUV color |
| format then the GL driver can use this framebuffer object as the render |
| target, TEXTURE_EXTERNAL_OES target with RGB color format are not allowed |
| with this extension. |
| |
| New Types & Keywords |
| |
| A new OpenGL GLSL extension flag is added: |
| |
| #extension GL_EXT_YUV_target |
| |
| When the above GLSL extension is specified, one new sampler type |
| will be available for sampling the 2D texture: |
| |
| __samplerExternal2DY2YEXT |
| |
| The "__samplerExternal2DY2YEXT" is used to sample a YUV texture image and |
| output color value without any color conversion. |
| |
| Whenever a YUV sample is output from the sampler, the format of the YUV |
| will be as if YUV 4:4:4 format is output. This also means that the Y |
| sample maps to component R, the U sample maps to component G, the V sample |
| maps to component B, and the component A will be 1.0f. |
| |
| The RGB sample output will be the same as in OpenGL ES specification. |
| |
| Here is one example: |
| |
| uniform __samplerExternal2DY2YEXT u_sTexture; |
| |
| When the above GLSL extension is specified, one new additional type will be |
| available to specify color space standard formula for yuv to rgb transformation. |
| |
| yuvCscStandardEXT |
| |
| The value of new type can be specified using one of three new keywords |
| itu_601, itu_601_full_range and itu_709. |
| |
| For example: |
| |
| yuvCscStandardEXT conv_standard = itu_601; |
| yuvCscStandardEXT conv_standard = itu_601_full_range; |
| yuvCscStandardEXT conv_standard = itu_709; |
| |
| Keyword itu_601 means color conversion is required using the formula |
| specified in the ITU-R BT.601. Similarly keyword itu_601_full_range |
| means conversion is done using ITU BT.601 full range formula as specified |
| in JFIF standard while keyword itu_709 specify ITU-R BT.709 standard. Note |
| that new yuvCscStandardEXT type can't be use for any other purpose apart |
| from specifying color standard value to newly introduced color conversion |
| built in functions mentioned below. |
| |
| New Built-in function |
| |
| When the new GLSL extension is specified, two new built in functions |
| will be available for rgb to yuv or yuv to rgb color space conversion. |
| |
| vec3 rgb_2_yuv(vec3 color, yuvCscStandardEXT conv_standard); |
| |
| The function rgb_2_yuv will apply rgb to yuv color conversion |
| transformation on "color" value using the formula specified as per new type |
| yuvCscStandardEXT variable. The first input parameter supposed to specify |
| rgb value using x, y & z channels of a vec3 variable, correspondingly |
| return value of this function will have transformed y, u and v value in its |
| x, y and z channel. Precision of the input color will define the precision |
| used for color space conversion and for output yuv color value. |
| |
| vec3 yuv_2_rgb (vec3 color, yuvCscStandardEXT conv_standard); |
| |
| The function yuv_2_rgb will apply yuv to rgb color conversion |
| transformation on "color" value using the formula specified as per new type |
| yuvCscStandardEXT variable. The first input parameter supposed to specify |
| yuv value using x, y & z channels of a vec3 variable, correspondingly |
| return value of this function will have transformed r, g and b value in its |
| x, y and z channel. Precision of the input color will define the precision |
| used for color space conversion and for output yuv color value. |
| |
| New layout qualifier |
| |
| A shader which produces yuv format color output must qualify the fragment |
| shader output variable with new yuv layout qualifier as described below. |
| |
| layout (yuv) out vec4 color; |
| |
| The new yuv layout qualifier can't be combined with any other layout qualifier, |
| can only be used with fragment shader outputs and would be available only when |
| the new GLSL extension is specified. Additionally if the shader qualifies |
| fragment shader output with the new yuv qualifier and write depth or multiple |
| color output, it would cause compilation failure. |
| |
| New Tokens |
| |
| Returned in the <type> parameter of GetActiveUniform: |
| |
| SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 |
| |
| Reuse tokens as in extension "OES_EGL_image_external." |
| |
| Accepted as a target in the <target> parameter of BindTexture, |
| EGLImageTargetTexture2DOES, and FramebufferTexture2D: |
| |
| TEXTURE_EXTERNAL_OES 0x8D65 |
| |
| Accepted as <value> in GetIntegerv() and GetFloatv() queries: |
| |
| TEXTURE_BINDING_EXTERNAL_OES 0x8D67 |
| |
| Accepted as <value> in GetTexParameter*() queries: |
| |
| REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 |
| |
| Addition to Chapter 3 of the OpenGL ES 3.0 specification |
| |
| Add a new section: "3.8.18 External Textures," which follows section |
| "3.8.17 Shader Exponent Texture Color Conversion." The wording will |
| be the same as in extension "OES_EGL_image_external." |
| |
| Changes to Section 4.4.2 "Attaching Images to Framebuffer Objects" |
| |
| At the end of subsection "Attaching Texture Images to a Framebuffer," add |
| the following paragraphs: |
| |
| from |
| "If texture is not zero, then texture must either name an existing |
| two dimensional texture object and textarget must be TEXTURE_2D or |
| texture must name an existing cube map...." |
| |
| to |
| "If texture is not zero, then texture must either name an existing |
| two dimensional texture object and textarget must be TEXTURE_2D or |
| TEXTURE_EXTERNAL_OES or texture must name an existing cube map...." |
| |
| from |
| "If textarget is TEXTURE_2D, level must be greater than or equal to |
| zero and no larger than log2 of the value of MAX_TEXTURE_SIZE. |
| Otherwise, an INVALID_VALUE error is generated. |
| The command..." |
| to |
| "If textarget is TEXTURE_2D, level must be greater than or equal to |
| zero and no larger than log2 of the value of MAX_TEXTURE_SIZE. |
| Otherwise, an INVALID_VALUE error is generated. If textarget is |
| TEXTURE_EXTERNAL_OES and attachment is other than COLOR_ATTACHMENT0, |
| an INVALID_OPERATION error is generated. |
| The command..." |
| |
| Add an additional sentence at the end of above paragraph: |
| |
| "Since TEXTURE_EXTERNAL_OES texture target can only be specified |
| using an EGLImage, yuv formats can be rendered by attaching |
| TEXTURE_EXTERNAL_OES textarget via EGLImage." |
| |
| Changes to Section 4.2.3 "Clearing the Buffers" |
| from |
| "Unsigned normalized fixed-point RGBA color buffers are cleared to color |
| values derived by clamping each component of the clear color to the range |
| [0; 1], then converting the (possibly sRGB converted and/or dithered) color |
| to fixed-point using equations 2.3 or 2.4, respectively. The result of |
| clearing integer color buffers with Clear is undefined." |
| |
| to |
| "Unsigned normalized fixed-point RGBA color buffers are cleared to color |
| values derived by clamping each component of the clear color to the range |
| [0; 1], then converting the (possibly sRGB converted and/or dithered) color |
| to fixed-point using equations 2.3 or 2.4, respectively. When clearing YUV |
| Color Buffers, clear color should be defined in yuv color space and so |
| floating point r, g, and b value will be mapped to corresponding y, u and v |
| value and alpha channel will be ignored. The result of clearing integer |
| color buffers with Clear is undefined." |
| |
| Changes to Section 4.4.3 "Fine Control of Buffer Updates" |
| |
| from |
| "ColorMask is used to mask the writing of R, G, B and A values to all active |
| draw buffers. r, g, b, and a indicate whether R, G, B, or A values, respectively, |
| are written or not (a value of TRUE means that the corresponding value is written). |
| In the initial state, all color values are enabled for writing for all draw |
| buffers..." |
| |
| to |
| "ColorMask is used to mask the writing of R, G, B and A values to all active |
| draw buffers. r, g, b, and a indicate whether R, G, B, or A values, respectively, |
| are written or not (a value of TRUE means that the corresponding value is written) |
| except when the color buffer is in YUV color space, in that case setting any one |
| of the r, g, b, and a values as false would generate draw time INVALID_OPERATION error. |
| In the initial state, all color values are enabled for writing for all draw |
| buffers..." |
| |
| Changes to Section 4.1.7 "Blending" |
| |
| from |
| "Blending applies only if the color buffer has a fixed-point format. If the color |
| buffer has an integer format, proceed to the next operation." |
| |
| to |
| "Blending applies only if the color buffer has a fixed-point format and non YUV space |
| format color buffer. If the color buffer has an integer, proceed to the next |
| operation. If color buffer format is YUV color space, it will generate |
| draw time INVALID_OPERATION error." |
| |
| Changes to 4.2.1 "Selecting Buffers for Writing" |
| from |
| "If some, but not all user-defined output variables are written, the values of |
| fragment colors corresponding to unwritten variables are similarly undefined. |
| The order of writes..." |
| |
| to |
| "If some, but not all user-defined output variables are written, the values of |
| fragment colors corresponding to unwritten variables are similarly undefined unless |
| any of the fragment output is qualified with yuv format qualifier. In later case |
| compiler would restrict usage of yuv format qualifier up to a single color output. |
| The order of writes..." |
| |
| Changes to section 4.4.4 ("Framebuffer Completeness") |
| from |
| "An internal format is color-renderable if it is one of the formats from table |
| 3.12 noted as color-renderable or if it is unsized format RGBA or RGB. No |
| other formats," |
| |
| to |
| "An internal format is color-renderable if it is one of the formats from table |
| 3.12 noted as color-renderable or if it is unsized format RGBA or RGB or if it is |
| YUV color space format supported by implementation. No other formats," |
| |
| Changes to section 3.7 ("Keywords") of the OpenGL ES Shading Language |
| specification |
| |
| - Add to the list of keywords: |
| |
| __samplerExternal2DY2YEXT |
| yuvCscStandardExt |
| itu_601 |
| itu_601_full_range |
| itu_709 |
| |
| |
| |
| Changes to section 4.1 ("Basic Types") of the OpenGL ES Shading Language |
| specification |
| - Add to the list of Transparent types: |
| "yuvCscStandardExt a value type to specify color space standard formula for |
| transformation between yuv and rgb, taking values of itu_601, itu_601_full_range, |
| itu_709" |
| |
| - Add to the list of Floating Point Sampler Types (opaque): |
| |
| "__samplerExternal2DY2YEXT a handle for accessing an external 2D texture |
| whose underneath format is YUV" |
| |
| - Add a paragraph at the end of the section: |
| |
| "The __samplerExternal2DY2YEXT and yuvCscStandardExt types are optional and must |
| be enabled by |
| |
| #extension GL_EXT_YUV_target : enable |
| |
| No type constructor or type conversion is allowed on yuvCscStandardExt. A value |
| of itu_601, itu_601_full_range, itu_709, or a variable typed as yuvCscStandardExt |
| can be used as an argument to user-defined functions and the built-in functions yuv_2_rgb and |
| rgb_2_yuv. Other than the assignment operator, any other operations on this type |
| of values or variables will be treated as a compilation error." |
| |
| Changes to section 4.5.4 ("Default Precision Qualifiers") of the OpenGL ES |
| Shading Language specification |
| |
| - Add to the list of "vertex language has the following predeclared |
| globally scoped default precision statements:" |
| |
| "precision lowp __samplerExternal2DY2YEXT;" |
| |
| - Add to the list of "fragment language has the following predeclared |
| globally scoped default precision statements:" |
| |
| "precision lowp __samplerExternal2DY2YEXT;" |
| |
| Changes to section 8.8 ("Texture Lookup Functions") of the OpenGL ES Shading |
| Language specification |
| |
| - Add to the table the following sampler functions: |
| |
| "highp ivec2 textureSize(__samplerExternal2DY2YEXT sampler, int lod) |
| vec4 texture(__samplerExternal2DY2YEXT sampler, vec2 P [, float bias] ) |
| vec4 textureProj(__samplerExternal2DY2YEXT sampler, vec3 P [, float bias] ) |
| vec4 textureProj(__samplerExternal2DY2YEXT sampler, vec4 P [, float bias]) |
| vec4 texelFetch(__samplerExternal2DY2YEXT sampler, ivec2 P, int lod)" |
| |
| Add a new section 8.10 "Conversion Functions between YUV and RGB" |
| |
| - Add a new table containing 2 entries: |
| |
| vec3 rgb_2_yuv(vec3 color, yuvCscStandardEXT conv_standard); |
| apply rgb to yuv color conversion transformation on "color" value |
| using the formula specified by conv_standard. |
| |
| vec3 yuv_2_rgb(vec3 color, yuvCscStandardEXT conv_standard); |
| apply yuv to rgb color conversion transformation on "color" value |
| using the formula specified by conv_standard. |
| |
| Compatibility with OpenGL ES 3.1 and ESSL 3.10 |
| |
| This extension is expected to work without modification with OpenGL ES 3.1 |
| and ESSL 3.10. Some further clarification in issue 1, 9 and 13. |
| |
| Issues |
| |
| 1. Do we want to explicitly disallow "__samplerExternal2DY2YEXT" from use in other |
| shader apart from fragment shader e.g. vertex, compute, geometry and tessellation |
| shaders? |
| |
| RESOLVED: No, modern unified shader hardware supports YUV texture sampling in all |
| of the shader stages, we should keep this enable irrespective of shader stage. |
| |
| 2. What happens if the input source isn't in the expected color space for built in |
| functions or lets say there is cross conversion between different color space |
| conversion standards e.g. 601 RGB to 709 YUV etc or yuv layout qualified color |
| output is actually written with in rgb color space? |
| |
| RESOLVED: Implementation can't determine how the input pixel has been |
| manipulated before producing the shader outputs, so results would be |
| undefined in this case. |
| |
| 3. What happens if the source formats aren't the expected format for sampler? |
| |
| RESOLVED: Non-YUV format will generate a draw time INVALID_OPERATION error. |
| |
| 4. Is the depth or stencil behaviour changed when rendering to yuv surfaces. |
| |
| RESOLVED: The depth and stencil buffers will work the same when rendering |
| to RGB or YUV surfaces, however when shader output is qualified with yuv |
| layout qualifier, writing out gl_FragDepth would cause compilation failure. |
| |
| 5. Should this extension include support for renderbuffers or just |
| renderable textures? |
| |
| RESOLVED: Renderbuffers doesn't add any functionality so it will not be |
| included. |
| |
| 6. Is BlitFramebuffer or CopyTex[Sub]Image supported with YUV renderable |
| surfaces? |
| |
| RESOLVED: No. There is a lot of driver complexity in supporting and |
| testing case. Using these calls with a YUV source or destination |
| will cause an INVALID_OPERATION error. |
| |
| 7. Does EXT_shader_framebuffer_fetch work with YUV renderable surfaces? |
| |
| RESOLVED: Yes. The next question is the result before or after |
| sub-sampling? To give maximum flexibility to hardware either of these |
| options is acceptable. |
| |
| 8. Should we add support for BT.2020? |
| |
| RESOLVED: Currently No, If require BT.2020 functionality can be achieved |
| using __samplerExternal2DY2YEXT and user defined matrix. To keep the spec |
| simple, we just want to have only three currently. |
| |
| 9. Should sampling return samples converted in to linear space or raw |
| samples? |
| |
| RESOLVED: This extension will return raw samples. If the YUV data is |
| encoded in a non-linear space, as is common, the returned samples will be |
| in the non-linear space. If the data is encoded linearly, the returned |
| samples will be linear. |
| |
| 10. Are there specific requirements on how a lower resolution UV plane must |
| be sampled during rendering? |
| |
| RESOLVED: To allow maximum flexibility in hardware at this time this |
| extension does not define how this sampling must be performed. Even if we |
| decide to define this behaviour in future, it would be more appropriate to |
| do it via a separate EGL extension. |
| |
| 11. How goes gl_FragCoord work with a lower resolution UV plane? |
| |
| RESOLVED: It is expected to work as if that plane was rendered at full |
| resolution. The exception to this is talked about in issue #11 where |
| there is some flexibility in subpixel sampling. |
| |
| 12. Should we add YUV format support for image load store in this extension or |
| is it valid to use new yuv format layout qualifier with image load store ? |
| |
| RESOLVED: No, Since that would require major changes, we should do this with |
| a separate extension, currently using new yuv format qualifier with image load |
| store would cause compilation failure. |
| |
| 13. How can we defines color standard matrix other than provided via built-in |
| functions e.g. full range BT.709 or adding compensation for the different colour |
| primaries of the different standards ? |
| |
| RESOLVED: This extension defines built in utility functions for some of the |
| common color conversion standard, however its no way limit an app to certain |
| standard of output data. App can define own color matrix for such purpose |
| and use with either __samplerExternal2DY2YEXT or sampler2D. |
| |
| 14. What happens if shader produce a color output qualified with yuv layout |
| qualifier and current draw FBO format isn't YUV or draw FBO format is in |
| YUV color space but shader output isn't qualified with yuv layout qualifier. |
| |
| RESOLVED: In order to write YUV color output, shader color output must be |
| qualified with yuv layout qualifier and draw FBO format needs to be in YUV |
| color space otherwise lack of any of these would cause INVALID_OPERATION |
| error. |
| |
| 15. What happens if shader produce yuv color output which is out of range |
| as per definition of color space format of rendering surface e.g. full range |
| output when the output color space is limited or similarly input to one of |
| built in color conversion functions or to the new __samplerExternal2DY2YEXT |
| is out of range. |
| |
| RESOLVED: If shader yuv color output or input values to one of the built in |
| color conversion functions or to the new __samplerExternal2DY2YEXT are not |
| within the specified range of the format, results would be undefined values. |
| |
| 16. How ReadPixels operate for YUV render target? |
| |
| RESOLVED: ReadPixels will convert YUV to RGBA under the current spec |
| requirement to support format RGBA and type UNSIGNED_BYTE combination for |
| the normalized fixed point surfaces depending upon format and color space |
| standard of currently bound rendering surface. |
| |
| Known Quality Issues |
| |
| Since YUV is a lossy compressed format and UV values represent sampling at |
| even locations, there may be minor quality issues along the primitive edges |
| or for scissor when its X or Y set to an odd value. In case of YUV |
| primitive rendering if geometry is animated, there may be more artifacts as |
| edges might flicker and sparkle frame to frame. Another way to explain |
| this corruption is that sometimes the different planes are stored at |
| different resolutions so the different interpolation for different planes |
| causes these artifacts. |
| |
| Due to nature of CbCr subsampling, there might be artifacts along the primitive |
| edges if there are partially covered pixels. Since commonly used 4:2:0 YUV |
| formats writes out 1 pixel for a block of 2x2 pixels, depending upon how |
| subsampled pixel output is calculated, there may always be artifacts around the |
| primitive edges for partially covered pixels e.g. implementation might always |
| decide to choose CbCr subsample cosited with top left pixel 2x2 Y plane block |
| based on this single pixel coverage. This could help to avoid artifacts in more |
| key cases e.g. along the diagonal of quad when its drawn using triangle strip |
| but it may cause artifacts in other cases when we have partially covered |
| pixels around the primitive edges visible after using very high zoom factor. |
| |
| Dependencies on EGL_KHR_image, EGL_KHR_image_base, and EGL 1.4 |
| |
| If EGL 1.2 is not supported, or if neither the EGL_OES_image nor |
| EGL_OES_image_base extensions is supported, all discussion of |
| EGLImages should be ignored, and any calls to either |
| EGLImageTargetTexture2DOES or FramebufferTexture2D with |
| TEXTURE_EXTERNAL_OES textarget should generate the error |
| INVALID_OPERATION. |
| |
| Dependencies on OES_EGL_image_external |
| |
| This extension is built on top of the OES_EGL_image_external extension. |
| It can coexist with the OES_EGL_image_external extension. |
| |
| Revision History |
| #17 (April 6, 2018, H1Gdev) |
| - Fix typo. |
| #16 (June 8, 2016, Jeff Leger) |
| - Add yuvCscStandardExt itu_* to the list of keywords |
| - Add yuvCscStandardExt as a basic type and clarify that this type |
| can only be used in assignments or as a function argument. |
| - Add rgb_2_yuv and yuv_2_rgb as built-in functions |
| (Bug 15704). |
| |
| #15 (April 23, 2015, Jon Leech) |
| - Fix typo EGLImageTargetTexImage2DOES -> EGLImageTargetTexture2DOES |
| (Bug 8114). |
| |
| #14 (February 10, 2015, Amit Bansal) |
| - Removed YUV_EXT and Y_EXT tokens hard requirement for ReadPixels, |
| current plan is to propose it later as separate extension once we |
| have more corresponding compelling use cases. |
| - Adding interaction wording with EXT_shader_framebuffer_fetch |
| - Removed duplicated image load store issue. |
| - Further clarification about usage of yuv layout qualifier |
| |
| #13 (January 23, 2015, Amit Bansal) |
| - added texture built in functions from OES_EGL_image_external_essl3 |
| - Added explicit clarification in overview section about RGB external images |
| - Interaction with geometry & tessellation shaders w.r.t. issue 1 |
| |
| #12 (December 12, 2014, Amit Bansal) |
| - Added new yuv qualifiers and corresponding draw time checks |
| requirement issues |
| - Clarification regarding yuvCscStandardEXT type usage |
| - Output clamping requirement issue |
| - New YUV_EXT and Y_EXT tokens for ReadPixels |
| - Changed blending & color mask behaviour to draw time error. |
| - Some language clean up |
| |
| #11 (September 30, 2014, Amit Bansal) |
| - Changed couple of issues to spec language |
| - Reworded some issues after recent spec updates |
| |
| #10 (August 12, 2013, Maurice Ribble) |
| - Changed from QCOM to EXT extension |
| - Reworded issue 16 based on Mark Callow's suggestion |
| - Updated names of SAMPLER_EXTERNAL_2D_Y2Y_EXT, |
| __samplerExternal2DY2YEXT, and yuvCscStandardEXT |
| |
| #9 (August 6, 2013, Maurice Ribble) |
| - Added issues 15-18 |
| |
| #8 (July 12, 2013, Maurice Ribble) |
| - Some language cleanup |
| - Changed some edge case errors to be more consistent |
| - Updates based on feedback from other khronos members |
| - Added issues 10-14 |
| |
| #7 (June 27, 2013, Maurice Ribble) |
| - Some language cleanup |
| |
| #6 (May 16, 2013, Amit Bansal) |
| - Correcting spacing |
| - Modified overview to keep only one sampler and add new built-in |
| - Defined new types for built in and removed previous layouts |
| - Removed the separate GL functions for external attachment |
| - Modified description of sections meant for spec |
| - Modified issues to reflect layout and built in function update |
| - Changed proposed to resolved for finalized issues |
| - Move precision issue to the description of built in function |
| |
| #5 (March 14, 2013, Jing zhou) |
| - Minor rewording on same of proposals for the Issues |
| - Assign new token IDs from reserved QCOM ID block |
| |
| #4 (March 4, 2013, Maurice Ribble) |
| - First round of cleanup and todos |
| |
| #3 (February 19, 2013, Amit Bansal) |
| - Modified glReadPixels()issue section |
| |
| #2 (January 9, 2013, Amit Bansal) |
| - Changed the OES suffix to QCOM as extension is still pending to be |
| approved. |
| - Removed EGLImageTargetTexture2DOES from New Procedures and Functions |
| category |
| - Corrected error in FramebufferRenderbuffer2DExternalQCOM name at line |
| 167. |
| - Modified description of FramebufferTexture2DExternalQCOM to reflect |
| argument changes correctly |
| - Corrected typo extension to extension |
| - Finished the documentation of final proposal for issue 2 & 3. |
| - Added a new Known Quality Issue section and text corresponding to it |
| |
| #1 - (Oct 1, 2012) Original Draft |