ANGLE RendererGL feature support

Documentation of OpenGL ES and EGL features, caps and formats and required extensions.

OpenGL ES Feature Support

FeatureOpenGL versionOpenGL extensionOpenGL ES versionOpenGL ES extensionNotes
Framebuffer/renderbuffer objects3.0GL_EXT_framebuffer_object2.0--Can potentially be emulated with Pbuffers but realistically this extension is always required.
Blit framebuffer3.0GL_EXT_framebuffer_blit3.0GL_ANGLE_framebuffer_blit or GL_NV_framebuffer_blit
Multisampling3.0GL_EXT_framebuffer_multisample3.0GL_EXT_multisampled_render_to_texture or GL_ANGLE_framebuffer_multisample
Depth textures3.0GL_ARB_depth_texture3.0GL_OES_depth_texture or GL_ANGLE_depth_texture
Draw buffers (MRT)2.0?GL_ARB_draw_buffers or GL_EXT_draw_buffers23.0GL_EXT_draw_buffers
3D textures1.2GL_EXT_texture3D3.0GL_OES_texture_3D
Array textures3.0GL_EXT_texture_array3.0--
Texture storage4.2GL_EXT_texture_storage3.0GL_EXT_texture_storageCan be emulated with TexImage calls.
Uniform buffer object3.1GL_ARB_uniform_buffer_object3.0--
Sync objects3.2GL_ARB_sync3.0--
Fence objects--GL_NV_fence--GL_NV_fence
MapBuffer1.5----GL_OES_mapbuffer
MapBufferRange3.0GL_ARB_map_buffer_range3.0GL_EXT_map_buffer_range
Transform feedback3.0GL_EXT_transform_feedback or GL_EXT_transform_feedback2 or GL_ARB_transform_feedback33.0--
Sampler object3.3GL_ARB_sampler_objects3.0--
Occlusion query1.5GL_ARB_occlusion_query2.0--
Timer query3.3GL_ARB_timer_query--GL_EXT_disjoint_timer_query
Vertex array object3.0GL_ARB_vertex_array_object3.0GL_OES_vertex_array_objectCan be emulated but costsmany extra API calls. Virtualized contexts also require some kind of emulation of the default attribute state.
Anisotropic filtering--GL_EXT_texture_filter_anisotropic--GL_EXT_texture_filter_anisotropicUbiquitous extension.

OpenGL ES Caps

Cap(s)OpenGL versionOpenGL extensionOpenGL ES versionOpenGL ES extensionNotes
GL_MAX_ELEMENT_INDEX4.3GL_ARB_ES3_compatibility3.0--Seems pretty safe to use an arbitrary limit, all implementations tested return 0xFFFFFFFF.
GL_MAX_3D_TEXTURE_SIZE1.2GL_EXT_texture3D3.0GL_OES_texture_3D
GL_MAX_TEXTURE_SIZE1.0--2.0--
GL_MAX_CUBE_MAP_TEXTURE_SIZE1.3--2.0
GL_MAX_ARRAY_TEXTURE_LAYERS3.0GL_EXT_texture_array3.0--
GL_MAX_TEXTURE_LOD_BIAS1.5GL_EXT_texture_lod_bias3.0--
GL_MAX_RENDERBUFFER_SIZE GL_MAX_COLOR_ATTACHMENTS3.0GL_EXT_framebuffer_object2.0--
GL_MAX_DRAW_BUFFERS2.0?GL_ARB_draw_buffers or GL_EXT_draw_buffers23.0GL_EXT_draw_buffers
GL_MAX_VIEWPORT_DIMS1.0--2.0--
GL_ALIASED_POINT_SIZE_RANGE1.0?--2.0--
GL_ALIASED_LINE_WIDTH_RANGE1.2--2.0--
GL_ALIASED_LINE_WIDTH_RANGE1.2--2.0--
GL_MAX_ELEMENTS_INDICES1.2--3.0--
GL_MAX_ELEMENTS_VERTICES1.2--3.0--
Shader format precision (glGetShaderPrecisionFormat)4.1GL_ARB_ES2_compatibility2.0--Can use reasonable default values (IEEE float and twos complement integer).
GL_MAX_VERTEX_ATTRIBS2.0--2.0--
GL_MAX_VERTEX_UNIFORM_COMPONENTS2.0--2.0--
GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS2.0--2.0--
GL_MAX_VERTEX_UNIFORM_VECTORS GL_MAX_FRAGMENT_UNIFORM_VECTORS4.1GL_ARB_ES2_compatibility2.0--Defined as GL_MAX_VERTEX_UNIFORM_COMPONENTS / 4 and GL_MAX_FRAGMENT_UNIFORM_COMPONENTS / 4. Can simply use those values when the cap is not available.
GL_MAX_VERTEX_UNIFORM_BLOCKS GL_MAX_FRAGMENT_UNIFORM_BLOCKS GL_MAX_UNIFORM_BUFFER_BINDINGS GL_MAX_UNIFORM_BLOCK_SIZE GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT GL_MAX_COMBINED_UNIFORM_BLOCKS GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS3.1GL_ARB_uniform_buffer_object3.0--
GL_MAX_VERTEX_OUTPUT_COMPONENTS3.2--3.0--Doesn't seem to be a desktop extension for this cap, it may be possible to use the minimum ES3 value (64) if lower than GL 3.2.
GL_MAX_FRAGMENT_UNIFORM_COMPONENTS2.0--2.0--
GL_MAX_TEXTURE_IMAGE_UNITS2.0--2.0--
GL_MAX_FRAGMENT_INPUT_COMPONENTS3.2--3.0--Doesn't seem to be a desktop extension for this cap either, it may be possible to use the minimum ES3 value (60) if lower than GL 3.2.
GL_MIN_PROGRAM_TEXEL_OFFSET GL_MAX_PROGRAM_TEXEL_OFFSET3.0--3.0--Could potentially be emulated in the shader by adding the offsets in normalized texture coordinates before sampling.
GL_MAX_VARYING_COMPONENTS3.0GL_ARB_ES3_compatibility3.0--Was depricated in the OpenGL core spec but re-added in GL_ARB_ES3_compatibility
GL_MAX_VARYING_VECTORS4.1GL_ARB_ES2_compatibility2.0--Defined as GL_MAX_VARYING_COMPONENTS / 4.
GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS3.0GL_EXT_transform_feedback or GL_EXT_transform_feedback2 or GL_ARB_transform_feedback33.0--
GL_MAX_SAMPLES3.0GL_EXT_framebuffer_multisample3.0GL_EXT_multisampled_render_to_texture or GL_ANGLE_framebuffer_multisample
GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT--GL_EXT_texture_filter_anisotropic--GL_EXT_texture_filter_anisotropicUbiquitous extension.
IMPLEMENTATION_COLOR_READ_FORMAT IMPLEMENTATION_COLOR_READ_TYPE--GL_ARB_ES2_compatibility2.0--Desktop GL doesn't as many limitations as ES for ReadPixels, can either always return GL_RGBA/GL_UNSIGNED_BYTE or return the format and type of the read buffer.

##OpenGL ES Formats (TODO) |Format|OpenGL version|OpenGL extension|OpenGL ES version|OpenGL ES extension|Notes| |---|---|---|---|---|---| |GL_RGBA8
GL_RGB8 |1.0|--|3.0|GL_OES_rgb8_rgba8||

ESSL Features (TODO)

FeatureGLSL versionNotes
Unsigned integers1.30
Pack layout std1401.40

ESSL3 Builtins

Builtins that are added going from ESSL1 to ESSL3.

FunctionGLSL versionExtensionNotes
sinh
cosh
tanh
asinh
acosh
1.30
atanh1.10
abs (genIType)1.30GL_EXT_gpu_shader4
sign (genIType)1.50GL_EXT_gpu_shader4Can be emulated easily.
trunc1.30
round
roundEven
1.30
min (genIType, genUType)
max (genIType, genUType)
clamp (genIType, genUType)
1.30
mix (genBType)4.50GL_EXT_shader_integer_mixShould be possible to emulate with a ternery operation.
modf1.30
isnan1.30
isinf1.10
floatBitsToInt
floatBitsToUint
intBitsToFloat
uintBitsToFloat
3.30GL_ARB_shader_bit_encoding or ARB_gpu_shader5
packSnorm2x16
packHalf2x16
unpackSnorm2x16
unpackHalf2x16
4.20GL_ARB_shading_language_packingCan be emulated using bit casting functions.
packUnorm2x16
unpackUnorm2x16
4.10GL_ARB_shading_language_packingCan be emulated using bit casting functions.
matrixCompMult (NxM matrices)1.10
outerProduct1.20
transpose1.20
determinant1.50Can be emulated.
inverse1.40Can be emulated.
lessThan (uvec)
lessThanEqual (uvec)
greaterThan (uvec)
greaterThanEqual (uvec)
equal (uvec)
notEqual (uvec)
1.30
texture
textureProj
textureLod
textureOffset
textureProjOffset
textureLodOffset
textureProjLod
textureProjLodOffset
texelFetch
texelFetchOffset
textureGrad
textureGradOffset
textureProjGrad
textureProjGradOffset
textureSize
1.30Equivalent to texture2D, textureCube, etc
dFdx
dFdy
fwidth
1.10

EGL Feature Support (TODO)

FeatureEGL versionEGL extensionWGL coreWGL extensionGLX versionGLX extensionsNotes
PbuffersNoWGL_ARB_pbuffer
BindTexImageNoWGL_ARB_render_texturePossibly to emulate with OpenGL textures but not strictly required, it is possible only export EGL configs without EGL_BIND_TO_TEXTURE_RGB and EGL_BIND_TO_TEXTURE_RGBA. Bindable pbuffers may be required by Chrome though.
Pixmaps
Swap controlNoWGL_EXT_swap_controlNoGLX_EXT_swap_control