ANGLE Supported Extensions

This is a list of all extensions currently supported by ANGLE‘s front-end, and support listed for some of the tested targets for ANGLE’s Vulkan back-end. To produce a list of all supported extensions in the Vulkan back-end, run angle_end2end_tests with --gtest_filter EGLPrintEGLinfoTest.PrintGLInfo/ES*_Vulkan.

Specifications for GLES extensions can be found in the Khronos OpenGL ES API Registry

Specifications for EGL extensions can be found in the Khronos EGL API Registry

Specifications for ANGLE-specific extensions can be found in the ANGLE extension registry

This list is automatically generated by gen_extensions.py using data from registry_xml.py and gl.xml.

GLES 2.0, 3.0, 3.1 and 3.2 extension support

Note: some data is sampled from older drivers, so might not represent the latest driver support.

Extension NameNVIDIA P400 Win10Intel 630 Win10NVIDIA P400 LinuxIntel 630 LinuxSwiftShader Win10Pixel 4 Android 11
GL_KHR_blend_equation_advanced❌❌❌❌❌❌
GL_EXT_blend_func_extended✔✔✔✔❌✔
GL_EXT_blend_minmax✔✔✔✔✔✔
GL_EXT_buffer_storage✔✔✔✔✔✔
GL_EXT_clip_control✔✔✔✔✔✔
GL_EXT_clip_cull_distance✔✔✔✔✔✔
GL_APPLE_clip_distance✔✔✔✔✔✔
GL_EXT_color_buffer_float✔✔✔✔✔✔
GL_EXT_color_buffer_half_float✔✔✔✔✔✔
GL_OES_compressed_EAC_R11_signed_texture✔✔✔✔✔✔
GL_OES_compressed_EAC_R11_unsigned_texture✔✔✔✔✔✔
GL_OES_compressed_EAC_RG11_signed_texture✔✔✔✔✔✔
GL_OES_compressed_EAC_RG11_unsigned_texture✔✔✔✔✔✔
GL_EXT_compressed_ETC1_RGB8_sub_texture✔✔✔✔✔✔
GL_OES_compressed_ETC1_RGB8_texture✔✔✔✔✔✔
GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture✔✔✔✔✔✔
GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture✔✔✔✔✔✔
GL_OES_compressed_ETC2_RGB8_texture✔✔✔✔✔✔
GL_OES_compressed_ETC2_RGBA8_texture✔✔✔✔✔✔
GL_OES_compressed_ETC2_sRGB8_alpha8_texture✔✔✔✔✔✔
GL_OES_compressed_ETC2_sRGB8_texture✔✔✔✔✔✔
GL_EXT_copy_image✔✔✔✔✔✔
GL_OES_copy_image❌❌❌❌❌❌
GL_KHR_debug✔✔✔✔✔✔
GL_EXT_debug_label✔✔✔✔✔✔
GL_EXT_debug_marker✔✔✔✔✔✔
GL_OES_depth24✔✔✔✔✔✔
GL_OES_depth32✔✔✔✔✔✔
GL_NV_depth_buffer_float2✔✔✔✔✔✔
GL_ANGLE_depth_texture✔✔✔✔✔✔
GL_OES_depth_texture✔✔✔✔✔✔
GL_OES_depth_texture_cube_map✔✔✔✔✔✔
GL_EXT_discard_framebuffer✔✔✔✔✔✔
GL_EXT_disjoint_timer_query✔✔✔✔✔✔
GL_EXT_draw_buffers✔✔✔✔✔✔
GL_EXT_draw_buffers_indexed✔✔✔✔✔✔
GL_OES_draw_buffers_indexed✔✔✔✔✔✔
GL_EXT_draw_elements_base_vertex✔✔✔✔✔✔
GL_OES_draw_elements_base_vertex✔✔✔✔✔✔
GL_OES_EGL_image✔✔✔✔✔✔
GL_EXT_EGL_image_array✔✔✔✔✔✔
GL_OES_EGL_image_external✔✔✔✔✔✔
GL_OES_EGL_image_external_essl3✔✔✔✔✔✔
GL_EXT_EGL_image_external_wrap_modes✔✔✔✔✔✔
GL_EXT_EGL_image_storage❌❌❌❌❌❌
GL_NV_EGL_stream_consumer_external❌❌❌❌❌❌
GL_OES_EGL_sync✔✔✔✔✔✔
GL_OES_element_index_uint✔✔✔✔✔✔
GL_EXT_external_buffer❌❌❌❌❌✔
GL_OES_fbo_render_mipmap✔✔✔✔✔✔
GL_NV_fence✔✔✔✔✔✔
GL_EXT_float_blend✔✔✔✔✔✔
GL_EXT_frag_depth✔✔✔✔✔✔
GL_ANGLE_framebuffer_blit✔✔✔✔✔✔
GL_NV_framebuffer_blit✔✔✔✔✔✔
GL_EXT_geometry_shader✔✔❌❌❌❌
GL_OES_geometry_shader✔✔❌❌❌❌
GL_OES_get_program_binary✔✔✔✔✔✔
GL_EXT_gpu_shader5✔✔✔✔❌✔
GL_ANGLE_instanced_arrays✔✔✔✔✔✔
GL_EXT_instanced_arrays✔✔✔✔✔✔
GL_OES_mapbuffer✔✔✔✔✔✔
GL_EXT_map_buffer_range✔✔✔✔✔✔
GL_EXT_memory_object✔✔✔✔✔✔
GL_EXT_memory_object_fd❌❌✔✔❌✔
GL_EXT_multisample_compatibility❌❌❌❌❌❌
GL_EXT_multisampled_render_to_texture✔❌✔✔✔✔
GL_EXT_multisampled_render_to_texture2✔❌✔✔✔✔
GL_OVR_multiview✔✔❌❌✔✔
GL_OVR_multiview2✔✔❌❌✔✔
GL_KHR_no_error❌❌❌❌❌❌
GL_EXT_occlusion_query_boolean✔✔✔✔✔✔
GL_OES_packed_depth_stencil✔✔✔✔✔✔
GL_ANGLE_pack_reverse_row_order❌❌❌❌❌❌
GL_NV_pack_subimage✔✔✔✔✔✔
GL_KHR_parallel_shader_compile✔✔✔✔✔✔
GL_NV_pixel_buffer_object✔✔✔✔✔✔
GL_EXT_primitive_bounding_box✔✔✔✔✔✔
GL_EXT_protected_textures❌❌❌❌❌✔
GL_EXT_pvrtc_sRGB❌❌❌❌❌❌
GL_NV_read_depth✔✔✔✔✔✔
GL_EXT_read_format_bgra✔✔✔✔✔✔
GL_NV_read_stencil✔✔✔✔✔✔
GL_OES_rgb8_rgba8✔✔✔✔✔✔
GL_KHR_robust_buffer_access_behavior❌❌❌❌❌❌
GL_EXT_robustness✔✔✔✔❌✔
GL_NV_robustness_video_memory_purge❌❌❌❌❌❌
GL_OES_sample_shading✔✔✔✔✔✔
GL_OES_sample_variables✔✔✔✔✔✔
GL_EXT_semaphore✔✔✔✔✔✔
GL_EXT_semaphore_fd❌❌✔✔❌✔
GL_EXT_separate_shader_objects✔✔✔✔✔✔
GL_EXT_shader_framebuffer_fetch_non_coherent✔✔✔✔✔❌
GL_OES_shader_image_atomic✔✔✔✔✔✔
GL_EXT_shader_io_blocks✔✔✔✔✔✔
GL_OES_shader_io_blocks✔✔✔✔✔✔
GL_OES_shader_multisample_interpolation✔✔✔✔✔✔
GL_EXT_shader_non_constant_global_initializers✔✔✔✔✔✔
GL_NV_shader_noperspective_interpolation✔✔✔✔✔✔
GL_EXT_shader_texture_lod✔✔✔✔✔✔
GL_EXT_shadow_samplers✔✔✔✔✔✔
GL_EXT_sRGB✔✔✔✔✔✔
GL_EXT_sRGB_write_control✔✔✔✔❌✔
GL_OES_standard_derivatives✔✔✔✔✔✔
GL_OES_surfaceless_context✔✔✔✔✔✔
GL_ARB_sync❌❌❌❌❌❌
GL_EXT_tessellation_shader✔✔❌❌❌❌
GL_OES_texture_3D✔✔✔✔✔✔
GL_EXT_texture_border_clamp✔❌❌❌❌❌
GL_OES_texture_border_clamp✔❌❌❌❌❌
GL_EXT_texture_buffer✔❌✔✔✔✔
GL_OES_texture_buffer✔❌✔✔✔✔
GL_OES_texture_compression_astc❌❌❌❌❌❌
GL_KHR_texture_compression_astc_hdr❌❌❌❌❌❌
GL_KHR_texture_compression_astc_ldr❌✔❌✔✔✔
GL_KHR_texture_compression_astc_sliced_3d❌❌❌❌❌❌
GL_EXT_texture_compression_bptc✔✔✔✔✔❌
GL_EXT_texture_compression_dxt1✔✔✔✔✔❌
GL_IMG_texture_compression_pvrtc❌❌❌❌❌❌
GL_IMG_texture_compression_pvrtc2❌❌❌❌❌❌
GL_EXT_texture_compression_rgtc✔✔✔✔✔❌
GL_EXT_texture_compression_s3tc❌❌❌❌❌❌
GL_EXT_texture_compression_s3tc_srgb✔✔✔✔✔❌
GL_EXT_texture_cube_map_array✔✔✔✔✔✔
GL_OES_texture_cube_map_array✔✔✔✔✔✔
GL_EXT_texture_filter_anisotropic✔✔✔✔✔✔
GL_OES_texture_float✔✔✔✔✔✔
GL_OES_texture_float_linear✔✔✔✔✔❌
GL_EXT_texture_format_BGRA8888✔✔✔✔✔✔
GL_EXT_texture_format_sRGB_override❌✔❌❌❌❌
GL_OES_texture_half_float✔✔✔✔✔✔
GL_OES_texture_half_float_linear✔✔✔✔✔✔
GL_EXT_texture_norm16❌✔❌✔❌❌
GL_OES_texture_npot✔✔✔✔✔✔
GL_EXT_texture_rg✔✔✔✔✔✔
GL_EXT_texture_sRGB_decode✔✔✔✔✔✔
GL_EXT_texture_sRGB_R8✔❌✔✔✔✔
GL_EXT_texture_sRGB_RG8❌❌❌❌✔✔
GL_OES_texture_stencil8✔✔✔✔✔✔
GL_EXT_texture_storage✔✔✔✔✔✔
GL_OES_texture_storage_multisample_2d_array✔✔✔✔✔✔
GL_EXT_texture_type_2_10_10_10_REV✔✔✔✔✔✔
GL_ANGLE_texture_usage❌❌❌❌❌❌
GL_ANGLE_translated_shader_source❌❌❌❌❌❌
GL_EXT_unpack_subimage✔✔✔✔✔✔
GL_OES_vertex_array_object✔✔✔✔✔✔
GL_OES_vertex_half_float✔✔✔✔✔✔
GL_OES_vertex_type_10_10_10_2✔✔✔✔✔✔
GL_WEBGL_video_texture❌❌❌❌❌❌
GL_EXT_YUV_target❌❌❌❌❌❌

ANGLE unofficial extension support

Note: some ANGLE extensions are currently missing specifications.

Extension NameNVIDIA P400 Win10Intel 630 Win10NVIDIA P400 LinuxIntel 630 LinuxSwiftShader Win10Pixel 4 Android 11
GL_ANGLE_base_vertex_base_instance✔✔✔✔✔✔
GL_CHROMIUM_bind_generates_resource✔✔✔✔✔✔
GL_CHROMIUM_bind_uniform_location✔✔✔✔✔✔
GL_ANGLE_client_arrays✔✔✔✔✔✔
GL_CHROMIUM_color_buffer_float_rgb❌❌❌❌❌❌
GL_CHROMIUM_color_buffer_float_rgba❌❌❌❌❌❌
GL_ANGLE_compressed_texture_etc❌✔❌✔✔✔
GL_CHROMIUM_copy_compressed_texture✔✔✔✔✔✔
GL_CHROMIUM_copy_texture✔✔✔✔✔✔
GL_ANGLE_copy_texture_3d✔✔✔✔✔✔
GL_CHROMIUM_framebuffer_mixed_samples❌❌❌❌❌❌
GL_ANGLE_framebuffer_multisample✔✔✔✔✔✔
GL_ANGLE_get_image✔✔✔✔✔✔
GL_ANGLE_get_serialized_context_string✔✔✔✔✔✔
GL_ANGLE_get_tex_level_parameter✔✔✔✔✔✔
GL_CHROMIUM_lose_context✔✔✔✔✔✔
GL_ANGLE_lossy_etc_decode❌❌❌❌❌❌
GL_ANGLE_memory_object_flags✔✔✔✔✔✔
GL_ANGLE_memory_object_fuchsia❌❌❌❌❌❌
GL_ANGLE_memory_size✔✔✔✔✔✔
GL_ANGLE_multi_draw✔✔✔✔✔✔
GL_ANGLE_multiview_multisample❌❌❌❌❌❌
GL_ANGLE_program_binary❌❌❌❌❌❌
GL_ANGLE_program_cache_control✔✔✔✔✔✔
GL_ANGLE_provoking_vertex❌❌❌❌❌❌
GL_ANGLE_relaxed_vertex_attribute_type✔✔✔✔✔✔
GL_ANGLE_request_extension✔✔✔✔✔✔
GL_ANGLE_robust_client_memory✔✔✔✔✔✔
GL_ANGLE_robust_resource_initialization❌❌❌❌❌❌
GL_ANGLE_semaphore_fuchsia❌❌❌❌❌❌
GL_CHROMIUM_sync_query❌❌❌❌❌❌
GL_ANGLE_texture_compression_dxt3✔✔✔✔✔❌
GL_ANGLE_texture_compression_dxt5✔✔✔✔✔❌
GL_ANGLE_texture_external_update❌❌❌❌❌❌
GL_CHROMIUM_texture_filtering_hint❌❌❌❌✔❌
GL_ANGLE_texture_multisample❌❌❌❌❌❌
GL_ANGLE_texture_rectangle❌❌❌❌❌❌
GL_ANGLE_webgl_compatibility❌❌❌❌❌❌
GL_ANGLE_yuv_internal_format✔❌✔✔✔✔

GLES 1.0 and 1.1 extension support

Extension NameSwiftShader Win10
GL_OES_draw_texture✔
GL_OES_framebuffer_object✔
GL_OES_matrix_palette❌
GL_OES_point_size_array✔
GL_OES_point_sprite✔
GL_OES_query_matrix❌
GL_OES_texture_cube_map✔

EGL extension support

Currently EGL extensions are not automatically tracked by our scripting. For a list of supported EGL extensions in ANGLE's front-end see src/libANGLE/Caps.h.

Configuration information

NVIDIA P400 Win10:

  • GL_RENDERER is ANGLE (NVIDIA, Vulkan 1.2.133 (NVIDIA Quadro P400 (0x00001CB3)), NVIDIA-451.48.0.0)
  • GL_VENDOR is Google Inc. (NVIDIA)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.16847 git hash: a097ee2ea7a9)
  • Data updated October 1, 2021

Intel 630 Win10:

  • GL_RENDERER is ANGLE (Intel, Vulkan 1.2.135 (Intel(R) HD Graphics 630 (0x00005912)), Intel Corporation-100.100.)
  • GL_VENDOR is Google Inc. (Intel)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.16846 git hash: 22d8115a208b)
  • Data updated October 1, 2021

NVIDIA P400 Linux:

  • GL_RENDERER is ANGLE (NVIDIA, Vulkan 1.1.95 (NVIDIA Quadro P400 (0x00001CB3)), NVIDIA-418.56.0.0)
  • GL_VENDOR is Google Inc. (NVIDIA)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.16847 git hash: a097ee2ea7a9)
  • Data updated October 1, 2021

Intel 630 Linux:

  • GL_RENDERER is ANGLE (Intel, Vulkan 1.1.96 (Intel(R) HD Graphics 630 (Kaby Lake GT2) (0x00005912)), Intel open-source Mesa driver-19.0.2)
  • GL_VENDOR is Google Inc. (Intel)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.16847 git hash: a097ee2ea7a9)
  • Data updated October 1, 2021

SwiftShader Win10:

  • GL_RENDERER is ANGLE (Google, Vulkan 1.2.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)
  • GL_VENDOR is Google Inc. (Google)
  • GL_VERSION is OpenGL ES 3.1.0 (ANGLE 2.1.16782 git hash: 368c0ce94472)
  • Data updated September 23, 2021

Pixel 4 Android 11:

  • GL_RENDERER is ANGLE (Qualcomm, Vulkan 1.1.128 (Adreno (TM) 640 (0x06040001)), Qualcomm Technologies Inc. Adreno Vulkan Driver-512.490.0)
  • GL_VENDOR is Google Inc. (Qualcomm)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.16847 git hash: a097ee2ea7a9)
  • Data updated October 1, 2021

How to update supported extension data

Supported extension data is stored in the ANGLE repo as JSON files in scripts/extension_data. The JSON data is sourced from public ANGLE test runs. Look for angle_end2end_tests in a bot run: example link. Search for “angle_end2end_tests”, then click on the “cas output” and find GLinfo_ES3_2_Vulkan.json.

The Pixel 4 and GLES 3 NVIDIA and Intel data is automatically updated using the update_extension_data.py script. To use it first authenticate to the bb and luci-go tools by running bb auth-login and ./tools/luci-go/swarming login. Then run the script and re-run code generation.

The GLES 1 and SwiftShader data is currently manually updated. Find the relevant file from the task output (see above) and overwrite the correspoding file. Re-run code generation and create a CL as per our normal process.

To add a new configuration, first retrieve the JSON data, modify gen_extensions.py as necessary, then run scripts/run_code_generation.py to refresh generated files.