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 1660 Win10Intel 630 Win10NVIDIA 1660 LinuxIntel 630 LinuxSwiftShader Win10Pixel 4 Android 11Pixel 6 Android 13
GL_EXT_base_instance✔✔✔✔✔✔✔
GL_KHR_blend_equation_advanced✔✔✔✔✔
GL_KHR_blend_equation_advanced_coherent
GL_EXT_blend_func_extended✔✔✔✔✔
GL_EXT_blend_minmax✔✔✔✔✔✔✔
GL_EXT_buffer_storage✔✔✔✔✔✔✔
GL_EXT_clear_texture
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_OES_compressed_paletted_texture
GL_EXT_conservative_depth
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_EXT_depth_clamp
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_EXT_draw_instanced
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_EXT_EGL_image_storage_compression
GL_NV_EGL_stream_consumer_external
GL_OES_EGL_sync✔✔✔✔✔✔✔
GL_OES_element_index_uint✔✔✔✔✔✔✔
GL_ANDROID_extension_pack_es31a✔✔
GL_EXT_external_buffer✔✔
GL_OES_fbo_render_mipmap✔✔✔✔✔✔✔
GL_NV_fence✔✔✔✔✔✔✔
GL_EXT_float_blend✔✔✔✔✔✔
GL_EXT_frag_depth✔✔✔✔✔✔✔
GL_EXT_fragment_shading_rate
GL_EXT_fragment_shading_rate_attachment
GL_EXT_fragment_shading_rate_primitive
GL_ANGLE_framebuffer_blit✔✔✔✔✔✔✔
GL_NV_framebuffer_blit✔✔✔✔✔✔✔
GL_MESA_framebuffer_flip_y
GL_QCOM_framebuffer_foveated
GL_EXT_geometry_shader✔✔✔✔✔
GL_OES_geometry_shader✔✔✔✔✔
GL_OES_get_program_binary✔✔✔✔✔✔✔
GL_EXT_gpu_shader5✔✔✔✔✔✔
GL_OES_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_multi_draw_arrays
GL_EXT_multi_draw_indirect✔✔✔✔✔✔✔
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_AMD_performance_monitor✔✔✔✔✔✔✔
GL_NV_pixel_buffer_object✔✔✔✔✔✔✔
GL_NV_polygon_mode
GL_EXT_polygon_offset_clamp✔✔✔✔✔✔✔
GL_EXT_primitive_bounding_box✔✔✔✔✔✔✔
GL_OES_primitive_bounding_box✔✔✔✔✔✔✔
GL_EXT_protected_textures✔
GL_EXT_pvrtc_sRGB
GL_NV_read_depth✔✔✔✔✔✔✔
GL_NV_read_depth_stencil✔✔✔✔✔✔✔
GL_EXT_read_format_bgra✔✔✔✔✔✔✔
GL_NV_read_stencil✔✔✔✔✔✔✔
GL_QCOM_render_shared_exponent
GL_EXT_render_snorm
GL_OES_required_internalformat
GL_OES_rgb8_rgba8✔✔✔✔✔✔✔
GL_ARM_rgba8
GL_KHR_robust_buffer_access_behavior
GL_EXT_robustness✔✔✔✔✔✔✔
GL_KHR_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_depth_stencil
GL_EXT_separate_shader_objects✔✔✔✔✔✔✔
GL_ARM_shader_framebuffer_fetch✔✔
GL_EXT_shader_framebuffer_fetch✔✔
GL_ARM_shader_framebuffer_fetch_depth_stencil
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_QCOM_shading_rate
GL_EXT_shadow_samplers✔✔✔✔✔✔✔
GL_EXT_sRGB✔✔✔✔✔✔✔
GL_EXT_sRGB_write_control✔✔✔✔✔✔✔
GL_OES_standard_derivatives✔✔✔✔✔✔✔
GL_OES_surfaceless_context✔✔✔✔✔✔✔
GL_EXT_tessellation_shader✔✔✔✔✔
GL_OES_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_EXT_texture_compression_astc_decode_mode
GL_EXT_texture_compression_astc_decode_mode_rgb9e5
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_EXT_texture_filter_minmax
GL_OES_texture_float✔✔✔✔✔✔✔
GL_OES_texture_float_linear✔✔✔✔✔✔
GL_EXT_texture_format_BGRA8888✔✔✔✔✔✔✔
GL_EXT_texture_format_sRGB_override✔
GL_QCOM_texture_foveated
GL_OES_texture_half_float✔✔✔✔✔✔✔
GL_OES_texture_half_float_linear✔✔✔✔✔✔✔
GL_EXT_texture_mirror_clamp_to_edge
GL_EXT_texture_norm16✔✔
GL_OES_texture_npot✔✔✔✔✔✔✔
GL_EXT_texture_query_lod
GL_EXT_texture_rg✔✔✔✔✔✔✔
GL_EXT_texture_shadow_lod
GL_EXT_texture_sRGB_decode✔✔✔✔✔✔✔
GL_EXT_texture_sRGB_R8✔✔✔✔✔✔
GL_EXT_texture_sRGB_RG8✔✔✔
GL_OES_texture_stencil8✔✔✔✔✔✔✔
GL_EXT_texture_storage✔✔✔✔✔✔✔
GL_EXT_texture_storage_compression
GL_OES_texture_storage_multisample_2d_array✔✔✔✔✔✔✔
GL_EXT_texture_type_2_10_10_10_REV✔✔✔✔✔✔✔
GL_ARM_texture_unnormalized_coordinates
GL_ANGLE_texture_usage✔✔✔✔✔✔✔
GL_QCOM_tiled_rendering
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 1660 Win10Intel 630 Win10NVIDIA 1660 LinuxIntel 630 LinuxSwiftShader Win10Pixel 4 Android 11Pixel 6 Android 13
GL_ANGLE_base_vertex_base_instance✔✔✔✔✔✔✔
GL_ANGLE_base_vertex_base_instance_shader_builtin✔✔✔✔✔✔✔
GL_CHROMIUM_bind_generates_resource✔✔✔✔✔✔✔
GL_CHROMIUM_bind_uniform_location✔✔✔✔✔✔✔
GL_ANGLE_blob_cache
GL_ANGLE_client_arrays✔✔✔✔✔✔✔
GL_ANGLE_clip_cull_distance✔✔✔✔✔✔
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_ANGLE_logic_op✔✔✔✔
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_polygon_mode
GL_ANGLE_program_binary
GL_ANGLE_program_binary_readiness_query
GL_ANGLE_program_cache_control✔✔✔✔✔✔✔
GL_ANGLE_provoking_vertex
GL_ANGLE_read_only_depth_stencil_feedback_loops✔✔✔✔✔✔✔
GL_ANGLE_relaxed_vertex_attribute_type✔✔✔✔✔✔✔
GL_ANGLE_renderability_validation
GL_ANGLE_request_extension✔✔✔✔✔✔✔
GL_ANGLE_rgbx_internal_format✔✔✔✔✔✔✔
GL_ANGLE_robust_client_memory✔✔✔✔✔✔✔
GL_ANGLE_robust_fragment_shader_output✔✔✔✔✔✔✔
GL_ANGLE_robust_resource_initialization
GL_ANGLE_semaphore_fuchsia
GL_ANGLE_shader_binary
GL_ANGLE_shader_pixel_local_storage
GL_ANGLE_shader_pixel_local_storage_coherent
GL_ANGLE_stencil_texturing
GL_ANGLE_texture_compression_dxt3✔✔✔✔✔
GL_ANGLE_texture_compression_dxt5✔✔✔✔✔
GL_ANGLE_texture_external_update
GL_ANGLE_texture_multisample✔✔✔✔✔✔✔
GL_ANGLE_texture_rectangle
GL_ANGLE_vulkan_image✔✔✔✔✔✔✔
GL_ANGLE_webgl_compatibility
GL_ANGLE_yuv_internal_format✔✔✔✔✔✔

GLES 1.0 and 1.1 extension support

Extension NameSwiftShader Win10
GL_OES_blend_subtract
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✔
GL_OES_texture_mirrored_repeat

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 1660 Win10:

  • GL_RENDERER is ANGLE (NVIDIA, Vulkan 1.2.142 (NVIDIA GeForce GTX 1660 (0x00002184)), NVIDIA-456.38.0.0)
  • GL_VENDOR is Google Inc. (NVIDIA)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.20572 git hash: 75901296a09f)
  • Data updated February 22, 2023

Intel 630 Win10:

  • GL_RENDERER is ANGLE (Intel, Vulkan 1.3.215 (Intel(R) UHD Graphics 630 (0x00009BC5)), Intel Corporation-101.101.)
  • GL_VENDOR is Google Inc. (Intel)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.20572 git hash: 75901296a09f)
  • Data updated February 22, 2023

NVIDIA 1660 Linux:

  • GL_RENDERER is ANGLE (NVIDIA, Vulkan 1.1.119 (NVIDIA GeForce GTX 1660 (0x00002184)), NVIDIA-440.100.0.0)
  • GL_VENDOR is Google Inc. (NVIDIA)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.20572 git hash: 75901296a09f)
  • Data updated February 22, 2023

Intel 630 Linux:

  • GL_RENDERER is ANGLE (Intel, Vulkan 1.2.131 (Intel(R) UHD Graphics 630 (CML GT2) (0x00009BC5)), Intel open-source Mesa driver-20.0.8)
  • GL_VENDOR is Google Inc. (Intel)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.20572 git hash: 75901296a09f)
  • Data updated February 22, 2023

SwiftShader Win10:

  • GL_RENDERER is ANGLE (Google, Vulkan 1.3.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.20572 git hash: 75901296a09f)
  • Data updated February 22, 2023

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.20572 git hash: 75901296a09f)
  • Data updated February 22, 2023

Pixel 6 Android 13:

  • GL_RENDERER is ANGLE (ARM, Vulkan 1.1.201 (Mali-G78 (0x92020010)), Mali-G78-36.0.0)
  • GL_VENDOR is Google Inc. (ARM)
  • GL_VERSION is OpenGL ES 3.2.0 (ANGLE 2.1.20572 git hash: 75901296a09f)
  • Data updated February 22, 2023

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 or GLinfo_ES3_1_Vulkan_SwiftShader.json for SwiftShader.

All data except for GLES 1 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 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. Also update update_extension_data.py as necessary.