Name ANDROID_extension_pack_es31a Name Strings GL_ANDROID_extension_pack_es31a Contact Jesse Hall (jessehall 'at' google.com) Contributors Jesse Hall, Google Status Complete. Version Last Modified Date: July 7, 2014 Revision: 3 Number OpenGL ES Extension #187 Dependencies OpenGL ES 3.1 and GLSL ES 3.10 are required. The following extensions are required: * KHR_debug * KHR_texture_compression_astc_ldr * KHR_blend_equation_advanced * OES_sample_shading * OES_sample_variables * OES_shader_image_atomic * OES_shader_multisample_interpolation * OES_texture_stencil8 * OES_texture_storage_multisample_2d_array * EXT_copy_image * EXT_draw_buffers_indexed * EXT_geometry_shader * EXT_gpu_shader5 * EXT_primitive_bounding_box * EXT_shader_io_blocks * EXT_tessellation_shader * EXT_texture_border_clamp * EXT_texture_buffer * EXT_texture_cube_map_array * EXT_texture_sRGB_decode Overview This extension changes little functionality directly. Instead it serves to roll up the 20 extensions it requires, allowing applications to check for all of them at once, and enable all of their shading language features with a single #extension statement. The Android platform provides special support outside of OpenGL ES to help applications target this set of extensions. In addition, this extension ensures support for images, shader storage buffers, and atomic counters in fragment shaders. In unextended OpenGL ES the minimum value of the relevant implementation-defined limits is zero; this extension raises these minimums to match the minimums for compute shaders. New Procedures and Functions None New Tokens None Modifications to Chapter 20 of the OpenGL ES 3.1 Specification (State Tables) Modify Table 20.44, Implementation Dependent Fragment Shader Limits, p. 395: Get Value Type Get Command Minimum Value Description Sec. ----------------------- ---- ----------- ------------- ------------------------- ----- MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS Z+ GetIntegerv 1 No. of atomic counter 7.7 buffers accessed by a fragment shader MAX_FRAGMENT_ATOMIC_COUNTERS Z+ GetIntegerv 8 No. of atomic counters 7.7 accessed by a fragment shader MAX_FRAGMENT_IMAGE_UNIFORMS Z+ GetIntegerv 4 No. of image variables in 11.1.3 fragment shaders MAX_FRAGMENT_SHADER_STORAGE_BLOCKS Z+ GetIntegerv 4 No. of shader storage 7.8 blocks accessed by a fragment shader [[Change minimum values]] Modifications to The OpenGL ES Shading Language Specification, Version 3.10 (Revision 5) Including the following line in a shader: #extension GL_ANDROID_extension_pack_es31a : has the same effect as including the following lines: #extension GL_KHR_blend_equation_advanced : #extension GL_OES_sample_variables : #extension GL_OES_shader_image_atomic : #extension GL_OES_shader_multisample_interpolation : #extension GL_OES_texture_storage_multisample_2d_array : #extension GL_EXT_geometry_shader : #extension GL_EXT_gpu_shader5 : #extension GL_EXT_primitive_bounding_box : #extension GL_EXT_shader_io_blocks : #extension GL_EXT_tessellation_shader : #extension GL_EXT_texture_buffer : #extension GL_EXT_texture_cube_map_array : where is as specified in section 3.4. A new preprocessor #define is added to the OpenGL ES Shading Language: #define GL_ANDROID_extension_pack_es31a 1 New Implementation Dependent State None Issues (1) Should all the extensions be enabled in all shader stages? What happens if an extension is enabled in a stage that it does not modify? RESOLVED: All extensions are enabled in all stages. Enabling this extension in a shader has exactly the same behavior as enabling each of the required extensions individually. None of the other extensions limit what shader stages they can be enabled in. Generally, if the modifications introduced by an extension do not apply to a shader stage, then enabling it in that stage is a no-op. If an extension does introduce new features to the language in a stage, a shader that doesn't use the new features will behave the same whether it enables the extension or not. Revision History Revision 3, 2014/7/7 (Jesse Hall) - Changed status from "draft" to "complete" - Corrected capitalization of EXT_texture_sRGB_decode Revision 2, 2014/5/2 (Jesse Hall) - Added dependency on EXT_primitive_bounding_box - Added and resolved Issue #1 Revision 1, 2014/4/18 (Jesse Hall) - Initial version