Write GL info to test artifact in end2end_tests.

These will show up as glinfo.json in the "cas outputs" of the shard
that runs these tests.

We currently have information for Pixel 4, NVIDIA and Intel Win/Linux,
and SwiftShader Windows. GLES 1.x extensions are treated separately.
Some WebGL/Mac-only/D3D-only extensions show as unsupported anywhere.

In order to capture artifacts on Android, we use a render test output
parameter.

Bug: angleproject:6379
Change-Id: I560b219b5a586cdbb68d272090f38eedc76aba20
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3176780
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
This commit is contained in:
Jamie Madill
2021-09-22 13:39:55 -04:00
committed by Angle LUCI CQ
parent 3d429f597f
commit 0004ecc2a4
22 changed files with 1599 additions and 262 deletions

View File

@@ -1007,7 +1007,7 @@ if (angle_has_rapidjson) {
}
angle_source_set("angle_json_serializer") {
public_deps = [
":libANGLE_base",
":angle_common",
"$angle_root/third_party/rapidjson",
]
sources = [

View File

@@ -1,206 +1,282 @@
# ANGLE Supported Extensions
This is a list of all extensions currently supported by ANGLE's front-end. Back-end support is not
yet documented. To produce a list of all supported extensions in the Vulkan back-end, run
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`.
This list is automatically generated by gen_extensions.py using data from registry_xml.py and gl.xml.
This list is automatically generated by [`gen_extensions.py`](../src/libANGLE/gen_extensions.py)
using data from registry_xml.py and gl.xml.
| Extension Name |
| -------------- |
| `GL_ANGLE_base_vertex_base_instance` |
| `GL_ANGLE_client_arrays` |
| `GL_ANGLE_compressed_texture_etc` |
| `GL_ANGLE_copy_texture_3d` |
| `GL_ANGLE_depth_texture` |
| `GL_ANGLE_framebuffer_blit` |
| `GL_ANGLE_framebuffer_multisample` |
| `GL_ANGLE_get_image` |
| `GL_ANGLE_get_serialized_context_string` |
| `GL_ANGLE_get_tex_level_parameter` |
| `GL_ANGLE_instanced_arrays` |
| `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_pack_reverse_row_order` |
| `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_ANGLE_texture_compression_dxt3` |
| `GL_ANGLE_texture_compression_dxt5` |
| `GL_ANGLE_texture_external_update` |
| `GL_ANGLE_texture_multisample` |
| `GL_ANGLE_texture_rectangle` |
| `GL_ANGLE_texture_usage` |
| `GL_ANGLE_translated_shader_source` |
| `GL_ANGLE_webgl_compatibility` |
| `GL_ANGLE_yuv_internal_format` |
| `GL_APPLE_clip_distance` |
| `GL_ARB_sync` |
| `GL_CHROMIUM_bind_generates_resource` |
| `GL_CHROMIUM_bind_uniform_location` |
| `GL_CHROMIUM_color_buffer_float_rgb` |
| `GL_CHROMIUM_color_buffer_float_rgba` |
| `GL_CHROMIUM_copy_compressed_texture` |
| `GL_CHROMIUM_copy_texture` |
| `GL_CHROMIUM_framebuffer_mixed_samples` |
| `GL_CHROMIUM_lose_context` |
| `GL_CHROMIUM_sync_query` |
| `GL_CHROMIUM_texture_filtering_hint` |
| `GL_EXT_EGL_image_array` |
| `GL_EXT_EGL_image_external_wrap_modes` |
| `GL_EXT_EGL_image_storage` |
| `GL_EXT_YUV_target` |
| `GL_EXT_blend_func_extended` |
| `GL_EXT_blend_minmax` |
| `GL_EXT_buffer_storage` |
| `GL_EXT_clip_control` |
| `GL_EXT_clip_cull_distance` |
| `GL_EXT_color_buffer_float` |
| `GL_EXT_color_buffer_half_float` |
| `GL_EXT_compressed_ETC1_RGB8_sub_texture` |
| `GL_EXT_copy_image` |
| `GL_EXT_debug_label` |
| `GL_EXT_debug_marker` |
| `GL_EXT_discard_framebuffer` |
| `GL_EXT_disjoint_timer_query` |
| `GL_EXT_draw_buffers` |
| `GL_EXT_draw_buffers_indexed` |
| `GL_EXT_draw_elements_base_vertex` |
| `GL_EXT_external_buffer` |
| `GL_EXT_float_blend` |
| `GL_EXT_frag_depth` |
| `GL_EXT_geometry_shader` |
| `GL_EXT_gpu_shader5` |
| `GL_EXT_instanced_arrays` |
| `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_EXT_occlusion_query_boolean` |
| `GL_EXT_primitive_bounding_box` |
| `GL_EXT_protected_textures` |
| `GL_EXT_pvrtc_sRGB` |
| `GL_EXT_read_format_bgra` |
| `GL_EXT_robustness` |
| `GL_EXT_sRGB` |
| `GL_EXT_sRGB_write_control` |
| `GL_EXT_semaphore` |
| `GL_EXT_semaphore_fd` |
| `GL_EXT_separate_shader_objects` |
| `GL_EXT_shader_framebuffer_fetch_non_coherent` |
| `GL_EXT_shader_io_blocks` |
| `GL_EXT_shader_non_constant_global_initializers` |
| `GL_EXT_shader_texture_lod` |
| `GL_EXT_shadow_samplers` |
| `GL_EXT_tessellation_shader` |
| `GL_EXT_texture_border_clamp` |
| `GL_EXT_texture_buffer` |
| `GL_EXT_texture_compression_bptc` |
| `GL_EXT_texture_compression_dxt1` |
| `GL_EXT_texture_compression_rgtc` |
| `GL_EXT_texture_compression_s3tc` |
| `GL_EXT_texture_compression_s3tc_srgb` |
| `GL_EXT_texture_cube_map_array` |
| `GL_EXT_texture_filter_anisotropic` |
| `GL_EXT_texture_format_BGRA8888` |
| `GL_EXT_texture_format_sRGB_override` |
| `GL_EXT_texture_norm16` |
| `GL_EXT_texture_rg` |
| `GL_EXT_texture_sRGB_R8` |
| `GL_EXT_texture_sRGB_RG8` |
| `GL_EXT_texture_sRGB_decode` |
| `GL_EXT_texture_storage` |
| `GL_EXT_texture_type_2_10_10_10_REV` |
| `GL_EXT_unpack_subimage` |
| `GL_IMG_texture_compression_pvrtc` |
| `GL_IMG_texture_compression_pvrtc2` |
| `GL_KHR_blend_equation_advanced` |
| `GL_KHR_debug` |
| `GL_KHR_no_error` |
| `GL_KHR_parallel_shader_compile` |
| `GL_KHR_robust_buffer_access_behavior` |
| `GL_KHR_texture_compression_astc_hdr` |
| `GL_KHR_texture_compression_astc_ldr` |
| `GL_KHR_texture_compression_astc_sliced_3d` |
| `GL_NV_EGL_stream_consumer_external` |
| `GL_NV_depth_buffer_float2` |
| `GL_NV_fence` |
| `GL_NV_framebuffer_blit` |
| `GL_NV_pack_subimage` |
| `GL_NV_pixel_buffer_object` |
| `GL_NV_read_depth` |
| `GL_NV_read_stencil` |
| `GL_NV_robustness_video_memory_purge` |
| `GL_NV_shader_noperspective_interpolation` |
| `GL_OES_EGL_image` |
| `GL_OES_EGL_image_external` |
| `GL_OES_EGL_image_external_essl3` |
| `GL_OES_EGL_sync` |
| `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_OES_compressed_ETC1_RGB8_texture` |
| `GL_OES_compressed_ETC2_RGB8_texture` |
| `GL_OES_compressed_ETC2_RGBA8_texture` |
| `GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture` |
| `GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture` |
| `GL_OES_compressed_ETC2_sRGB8_alpha8_texture` |
| `GL_OES_compressed_ETC2_sRGB8_texture` |
| `GL_OES_copy_image` |
| `GL_OES_depth24` |
| `GL_OES_depth32` |
| `GL_OES_depth_texture` |
| `GL_OES_depth_texture_cube_map` |
| `GL_OES_draw_buffers_indexed` |
| `GL_OES_draw_elements_base_vertex` |
| `GL_OES_draw_texture` |
| `GL_OES_element_index_uint` |
| `GL_OES_fbo_render_mipmap` |
| `GL_OES_framebuffer_object` |
| `GL_OES_geometry_shader` |
| `GL_OES_get_program_binary` |
| `GL_OES_mapbuffer` |
| `GL_OES_matrix_palette` |
| `GL_OES_packed_depth_stencil` |
| `GL_OES_point_size_array` |
| `GL_OES_point_sprite` |
| `GL_OES_query_matrix` |
| `GL_OES_rgb8_rgba8` |
| `GL_OES_sample_shading` |
| `GL_OES_sample_variables` |
| `GL_OES_shader_image_atomic` |
| `GL_OES_shader_io_blocks` |
| `GL_OES_shader_multisample_interpolation` |
| `GL_OES_standard_derivatives` |
| `GL_OES_surfaceless_context` |
| `GL_OES_texture_3D` |
| `GL_OES_texture_border_clamp` |
| `GL_OES_texture_buffer` |
| `GL_OES_texture_compression_astc` |
| `GL_OES_texture_cube_map` |
| `GL_OES_texture_cube_map_array` |
| `GL_OES_texture_float` |
| `GL_OES_texture_float_linear` |
| `GL_OES_texture_half_float` |
| `GL_OES_texture_half_float_linear` |
| `GL_OES_texture_npot` |
| `GL_OES_texture_stencil8` |
| `GL_OES_texture_storage_multisample_2d_array` |
| `GL_OES_vertex_array_object` |
| `GL_OES_vertex_half_float` |
| `GL_OES_vertex_type_10_10_10_2` |
| `GL_OVR_multiview` |
| `GL_OVR_multiview2` |
| `GL_WEBGL_video_texture` |
## 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 Name | NVIDIA P400 Win10 | Intel 630 Win10 | NVIDIA P400 Linux | Intel 630 Linux | SwiftShader Win10 | Pixel 4 Android 11 |
| -------------- | :---------------: | :-------------: | :---------------: | :-------------: | :---------------: | :----------------: |
| [GL_KHR_blend_equation_advanced](https://khronos.org/registry/OpenGL/extensions/KHR/KHR_blend_equation_advanced.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_blend_func_extended](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_blend_func_extended.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; | &#10004; |
| [GL_EXT_blend_minmax](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_blend_minmax.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_buffer_storage](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_buffer_storage.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_clip_control](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_clip_control.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_clip_cull_distance](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_clip_cull_distance.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_APPLE_clip_distance](https://khronos.org/registry/OpenGL/extensions/APPLE/APPLE_clip_distance.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_color_buffer_float](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_color_buffer_float.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_color_buffer_half_float](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_color_buffer_half_float.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_EAC_R11_signed_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_EAC_R11_signed_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_EAC_R11_unsigned_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_EAC_R11_unsigned_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_EAC_RG11_signed_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_EAC_RG11_signed_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_EAC_RG11_unsigned_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_EAC_RG11_unsigned_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_compressed_ETC1_RGB8_sub_texture](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_compressed_ETC1_RGB8_sub_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_ETC1_RGB8_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_ETC2_punchthroughA_RGBA8_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_ETC2_RGB8_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_ETC2_RGB8_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_ETC2_RGBA8_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_ETC2_RGBA8_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_ETC2_sRGB8_alpha8_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_ETC2_sRGB8_alpha8_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_compressed_ETC2_sRGB8_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_compressed_ETC2_sRGB8_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_copy_image](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_copy_image.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_copy_image](https://khronos.org/registry/OpenGL/extensions/OES/OES_copy_image.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_KHR_debug](https://khronos.org/registry/OpenGL/extensions/KHR/KHR_debug.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_debug_label](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_debug_label.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_debug_marker](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_debug_marker.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_depth24](https://khronos.org/registry/OpenGL/extensions/OES/OES_depth24.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_depth32](https://khronos.org/registry/OpenGL/extensions/OES/OES_depth32.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_NV_depth_buffer_float2](https://khronos.org/registry/OpenGL/extensions/NV/NV_depth_buffer_float2.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_depth_texture](https://khronos.org/registry/OpenGL/extensions/ANGLE/ANGLE_depth_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_depth_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_depth_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_depth_texture_cube_map](https://khronos.org/registry/OpenGL/extensions/OES/OES_depth_texture_cube_map.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_discard_framebuffer](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_discard_framebuffer.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_disjoint_timer_query](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_disjoint_timer_query.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_draw_buffers](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_draw_buffers.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_draw_buffers_indexed](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_draw_buffers_indexed.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_draw_buffers_indexed](https://khronos.org/registry/OpenGL/extensions/OES/OES_draw_buffers_indexed.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_draw_elements_base_vertex](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_draw_elements_base_vertex.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_draw_elements_base_vertex](https://khronos.org/registry/OpenGL/extensions/OES/OES_draw_elements_base_vertex.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_EGL_image](https://khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_EGL_image_array](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_EGL_image_array.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_EGL_image_external](https://khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_EGL_image_external_essl3](https://khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external_essl3.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_EGL_image_external_wrap_modes](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_EGL_image_external_wrap_modes.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_EGL_image_storage](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_EGL_image_storage.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_NV_EGL_stream_consumer_external](https://khronos.org/registry/OpenGL/extensions/NV/NV_EGL_stream_consumer_external.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_OES_EGL_sync](https://khronos.org/registry/OpenGL/extensions/OES/OES_EGL_sync.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_element_index_uint](https://khronos.org/registry/OpenGL/extensions/OES/OES_element_index_uint.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_external_buffer](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_external_buffer.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10004; |
| [GL_OES_fbo_render_mipmap](https://khronos.org/registry/OpenGL/extensions/OES/OES_fbo_render_mipmap.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_NV_fence](https://khronos.org/registry/OpenGL/extensions/NV/NV_fence.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_float_blend](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_float_blend.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_frag_depth](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_frag_depth.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_framebuffer_blit](https://khronos.org/registry/OpenGL/extensions/ANGLE/ANGLE_framebuffer_blit.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_NV_framebuffer_blit](https://khronos.org/registry/OpenGL/extensions/NV/NV_framebuffer_blit.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_geometry_shader](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_geometry_shader.txt) | &#10004; | &#10004; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_OES_geometry_shader](https://khronos.org/registry/OpenGL/extensions/OES/OES_geometry_shader.txt) | &#10004; | &#10004; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_OES_get_program_binary](https://khronos.org/registry/OpenGL/extensions/OES/OES_get_program_binary.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_gpu_shader5](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_gpu_shader5.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; | &#10004; |
| [GL_ANGLE_instanced_arrays](https://khronos.org/registry/OpenGL/extensions/ANGLE/ANGLE_instanced_arrays.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_instanced_arrays](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_instanced_arrays.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_mapbuffer](https://khronos.org/registry/OpenGL/extensions/OES/OES_mapbuffer.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_map_buffer_range](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_map_buffer_range.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_memory_object](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_memory_object.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_memory_object_fd](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_external_objects_fd.txt) | &#10060; | &#10060; | &#10004; | &#10004; | &#10060; | &#10004; |
| [GL_EXT_multisample_compatibility](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_multisample_compatibility.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_multisampled_render_to_texture](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_multisampled_render_to_texture.txt) | &#10004; | &#10060; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_multisampled_render_to_texture2](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_multisampled_render_to_texture2.txt) | &#10004; | &#10060; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OVR_multiview](https://khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview.txt) | &#10004; | &#10004; | &#10060; | &#10060; | &#10004; | &#10004; |
| [GL_OVR_multiview2](https://khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview2.txt) | &#10004; | &#10004; | &#10060; | &#10060; | &#10004; | &#10004; |
| [GL_KHR_no_error](https://khronos.org/registry/OpenGL/extensions/KHR/KHR_no_error.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_occlusion_query_boolean](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_occlusion_query_boolean.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_packed_depth_stencil](https://khronos.org/registry/OpenGL/extensions/OES/OES_packed_depth_stencil.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_pack_reverse_row_order](https://khronos.org/registry/OpenGL/extensions/ANGLE/ANGLE_pack_reverse_row_order.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_NV_pack_subimage](https://khronos.org/registry/OpenGL/extensions/NV/NV_pack_subimage.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_KHR_parallel_shader_compile](https://khronos.org/registry/OpenGL/extensions/KHR/KHR_parallel_shader_compile.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_NV_pixel_buffer_object](https://khronos.org/registry/OpenGL/extensions/NV/NV_pixel_buffer_object.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_primitive_bounding_box](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_primitive_bounding_box.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_protected_textures](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_protected_textures.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10004; |
| [GL_EXT_pvrtc_sRGB](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_pvrtc_sRGB.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_NV_read_depth](https://khronos.org/registry/OpenGL/extensions/NV/NV_read_depth.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_read_format_bgra](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_read_format_bgra.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_NV_read_stencil](https://khronos.org/registry/OpenGL/extensions/NV/NV_read_stencil.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_rgb8_rgba8](https://khronos.org/registry/OpenGL/extensions/OES/OES_rgb8_rgba8.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_KHR_robust_buffer_access_behavior](https://khronos.org/registry/OpenGL/extensions/KHR/KHR_robust_buffer_access_behavior.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_robustness](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_robustness.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; | &#10004; |
| [GL_NV_robustness_video_memory_purge](https://khronos.org/registry/OpenGL/extensions/NV/NV_robustness_video_memory_purge.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_OES_sample_shading](https://khronos.org/registry/OpenGL/extensions/OES/OES_sample_shading.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_sample_variables](https://khronos.org/registry/OpenGL/extensions/OES/OES_sample_variables.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_semaphore](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_semaphore.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_semaphore_fd](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_external_objects_fd.txt) | &#10060; | &#10060; | &#10004; | &#10004; | &#10060; | &#10004; |
| [GL_EXT_separate_shader_objects](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_separate_shader_objects.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_shader_framebuffer_fetch_non_coherent](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_shader_framebuffer_fetch_non_coherent.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; |
| [GL_OES_shader_image_atomic](https://khronos.org/registry/OpenGL/extensions/OES/OES_shader_image_atomic.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_shader_io_blocks](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_shader_io_blocks.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_shader_io_blocks](https://khronos.org/registry/OpenGL/extensions/OES/OES_shader_io_blocks.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_shader_multisample_interpolation](https://khronos.org/registry/OpenGL/extensions/OES/OES_shader_multisample_interpolation.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_shader_non_constant_global_initializers](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_shader_non_constant_global_initializers.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_NV_shader_noperspective_interpolation](https://khronos.org/registry/OpenGL/extensions/NV/NV_shader_noperspective_interpolation.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_shader_texture_lod](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_shader_texture_lod.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_shadow_samplers](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_shadow_samplers.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_sRGB](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_sRGB.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_sRGB_write_control](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_sRGB_write_control.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; | &#10004; |
| [GL_OES_standard_derivatives](https://khronos.org/registry/OpenGL/extensions/OES/OES_standard_derivatives.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_surfaceless_context](https://khronos.org/registry/OpenGL/extensions/OES/OES_surfaceless_context.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ARB_sync](https://khronos.org/registry/OpenGL/extensions/ARB/ARB_sync.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_tessellation_shader](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_tessellation_shader.txt) | &#10004; | &#10004; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_OES_texture_3D](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_3D.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_border_clamp](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_border_clamp.txt) | &#10004; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_OES_texture_border_clamp](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_border_clamp.txt) | &#10004; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_texture_buffer](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_buffer.txt) | &#10004; | &#10060; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_texture_buffer](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_buffer.txt) | &#10004; | &#10060; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_texture_compression_astc](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_compression_astc.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_KHR_texture_compression_astc_hdr](https://khronos.org/registry/OpenGL/extensions/KHR/KHR_texture_compression_astc_hdr.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_KHR_texture_compression_astc_ldr](https://khronos.org/registry/OpenGL/extensions/KHR/KHR_texture_compression_astc_ldr.txt) | &#10060; | &#10004; | &#10060; | &#10004; | &#10004; | &#10004; |
| [GL_KHR_texture_compression_astc_sliced_3d](https://khronos.org/registry/OpenGL/extensions/KHR/KHR_texture_compression_astc_sliced_3d.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_texture_compression_bptc](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_compression_bptc.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; |
| [GL_EXT_texture_compression_dxt1](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_compression_dxt1.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; |
| [GL_IMG_texture_compression_pvrtc](https://khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_IMG_texture_compression_pvrtc2](https://khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc2.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_texture_compression_rgtc](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_compression_rgtc.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; |
| [GL_EXT_texture_compression_s3tc](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_compression_s3tc.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_texture_compression_s3tc_srgb](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_compression_s3tc_srgb.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; |
| [GL_EXT_texture_cube_map_array](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_cube_map_array.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_texture_cube_map_array](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_cube_map_array.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_filter_anisotropic](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_filter_anisotropic.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_texture_float](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_float.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_texture_float_linear](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_float_linear.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; |
| [GL_EXT_texture_format_BGRA8888](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_format_BGRA8888.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_format_sRGB_override](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_format_sRGB_override.txt) | &#10060; | &#10004; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_OES_texture_half_float](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_half_float.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_texture_half_float_linear](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_half_float_linear.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_norm16](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_norm16.txt) | &#10060; | &#10004; | &#10060; | &#10004; | &#10060; | &#10060; |
| [GL_OES_texture_npot](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_npot.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_rg](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_rg.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_sRGB_decode](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_sRGB_decode.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_sRGB_R8](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_sRGB_R8.txt) | &#10004; | &#10060; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_sRGB_RG8](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_sRGB_RG8.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10004; | &#10004; |
| [GL_OES_texture_stencil8](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_stencil8.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_storage](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_storage.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_texture_storage_multisample_2d_array](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_storage_multisample_2d_array.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_EXT_texture_type_2_10_10_10_REV](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_type_2_10_10_10_REV.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_texture_usage](https://khronos.org/registry/OpenGL/extensions/ANGLE/ANGLE_texture_usage.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_translated_shader_source](https://khronos.org/registry/OpenGL/extensions/ANGLE/ANGLE_translated_shader_source.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_unpack_subimage](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_unpack_subimage.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_vertex_array_object](https://khronos.org/registry/OpenGL/extensions/OES/OES_vertex_array_object.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_vertex_half_float](https://khronos.org/registry/OpenGL/extensions/OES/OES_vertex_half_float.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_OES_vertex_type_10_10_10_2](https://khronos.org/registry/OpenGL/extensions/OES/OES_vertex_type_10_10_10_2.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_WEBGL_video_texture](https://khronos.org/registry/OpenGL/extensions/WEBGL/WEBGL_video_texture.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_EXT_YUV_target](https://khronos.org/registry/OpenGL/extensions/EXT/EXT_YUV_target.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
## ANGLE unofficial extension support
*Note: some ANGLE extensions are currently missing specifications.*
| Extension Name | NVIDIA P400 Win10 | Intel 630 Win10 | NVIDIA P400 Linux | Intel 630 Linux | SwiftShader Win10 | Pixel 4 Android 11 |
| -------------- | :---------------: | :-------------: | :---------------: | :-------------: | :---------------: | :----------------: |
| [GL_ANGLE_base_vertex_base_instance](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_base_vertex_base_instance.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_CHROMIUM_bind_generates_resource](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_bind_generates_resource.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_CHROMIUM_bind_uniform_location](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_bind_uniform_location.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_client_arrays](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_client_arrays.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_CHROMIUM_color_buffer_float_rgb](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_color_buffer_float_rgb.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_CHROMIUM_color_buffer_float_rgba](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_color_buffer_float_rgba.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_compressed_texture_etc](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_compressed_texture_etc.txt) | &#10060; | &#10004; | &#10060; | &#10004; | &#10004; | &#10004; |
| [GL_CHROMIUM_copy_compressed_texture](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_copy_compressed_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_CHROMIUM_copy_texture](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_copy_texture.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_copy_texture_3d](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_copy_texture_3d.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_CHROMIUM_framebuffer_mixed_samples](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_framebuffer_mixed_samples.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_framebuffer_multisample](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_framebuffer_multisample.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_get_image](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_get_image.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_get_serialized_context_string](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_get_serialized_context_string.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_get_tex_level_parameter](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_get_tex_level_parameter.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_CHROMIUM_lose_context](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_lose_context.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_lossy_etc_decode](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_lossy_etc_decode.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_memory_object_flags](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_memory_object_flags.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_memory_object_fuchsia](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_memory_object_fuchsia.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_memory_size](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_memory_size.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_multi_draw](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_multi_draw.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_multiview_multisample](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_multiview_multisample.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_program_binary](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_program_binary.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_program_cache_control](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_program_cache_control.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_provoking_vertex](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_provoking_vertex.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_relaxed_vertex_attribute_type](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_relaxed_vertex_attribute_type.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_request_extension](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_request_extension.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_robust_client_memory](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_robust_client_memory.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; |
| [GL_ANGLE_robust_resource_initialization](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_robust_resource_initialization.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_semaphore_fuchsia](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_semaphore_fuchsia.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_CHROMIUM_sync_query](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_sync_query.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_texture_compression_dxt3](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_texture_compression_dxt3.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; |
| [GL_ANGLE_texture_compression_dxt5](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_texture_compression_dxt5.txt) | &#10004; | &#10004; | &#10004; | &#10004; | &#10004; | &#10060; |
| [GL_ANGLE_texture_external_update](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_texture_external_update.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_CHROMIUM_texture_filtering_hint](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/CHROMIUM_texture_filtering_hint.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10004; | &#10060; |
| [GL_ANGLE_texture_multisample](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_texture_multisample.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_texture_rectangle](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_texture_rectangle.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_webgl_compatibility](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_webgl_compatibility.txt) | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; | &#10060; |
| [GL_ANGLE_yuv_internal_format](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/ANGLE_yuv_internal_format.txt) | &#10004; | &#10060; | &#10004; | &#10004; | &#10004; | &#10004; |
## GLES 1.0 and 1.1 extension support
| Extension Name | SwiftShader Win10 |
| -------------- | :---------------: |
| [GL_OES_draw_texture](https://khronos.org/registry/OpenGL/extensions/OES/OES_draw_texture.txt) | &#10004; |
| [GL_OES_framebuffer_object](https://khronos.org/registry/OpenGL/extensions/OES/OES_framebuffer_object.txt) | &#10004; |
| [GL_OES_matrix_palette](https://khronos.org/registry/OpenGL/extensions/OES/OES_matrix_palette.txt) | &#10060; |
| [GL_OES_point_size_array](https://khronos.org/registry/OpenGL/extensions/OES/OES_point_size_array.txt) | &#10004; |
| [GL_OES_point_sprite](https://khronos.org/registry/OpenGL/extensions/OES/OES_point_sprite.txt) | &#10004; |
| [GL_OES_query_matrix](https://khronos.org/registry/OpenGL/extensions/OES/OES_query_matrix.txt) | &#10060; |
| [GL_OES_texture_cube_map](https://khronos.org/registry/OpenGL/extensions/OES/OES_texture_cube_map.txt) | &#10004; |
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.16778 git hash: c3e0eafaf38d)`
* Data updated September 22, 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.16778 git hash: c3e0eafaf38d)`
* Data updated September 22, 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.16778 git hash: c3e0eafaf38d)`
* Data updated September 22, 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.16778 git hash: c3e0eafaf38d)`
* Data updated September 22, 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.16782 git hash: 368c0ce94472)`
* Data updated September 23, 2021
## How to update supported extension data
Supported extension data is stored in the ANGLE repo as JSON files in
[`scripts/extension_data`](../scripts/extension_data). The JSON data is
sourced from public ANGLE test runs. Look for `angle_end2end_tests` in a bot
run: [example link]
(https://ci.chromium.org/ui/p/angle/builders/ci/win-clang-x64-rel/8183/overview).
Search for "`angle_end2end_tests`", then click on the "cas output" and find
`GLinfo_ES3_2_Vulkan.json`. Copy and paste the file contents into a file in
the folder above.
To update or add a new configuration, first retrieve the JSON data, modify
[`gen_extensions.py`](../src/libANGLE/gen_extensions.py) if necessary, then
run [`scripts/run_code_generation.py`](../scripts/run_code_generation.py) to
refresh generated files.

View File

@@ -529,7 +529,8 @@
"angle_end2end_tests",
"--gtest_filter=-*Vulkan_SwiftShader*",
"--shard-timeout=180",
"-v"
"-v",
"--render-test-output-dir=${ISOLATED_OUTDIR}"
],
"merge": {
"args": [],

View File

@@ -742,6 +742,8 @@
'android_args': [
'--shard-timeout=180',
'-v',
# We use this argument to save test artifacts.
'--render-test-output-dir=${ISOLATED_OUTDIR}',
],
'android_swarming': {
'shards': 4,

View File

@@ -1,12 +1,26 @@
{
"doc/SupportedExtensions.md":
"4e06f9a617d379fe869ac6fa515b1bb2",
"3a831d3b72baf1089e0e78a19b3e3374",
"scripts/cl.xml":
"f923201d4ea3e1130763b19fa7faa7a2",
"scripts/egl.xml":
"013c552e6c523abdcf268268ea47e9fe",
"scripts/egl_angle_ext.xml":
"5bcc01462b355d933cf3ada15198fb68",
"scripts/extension_data/intel_630_linux.json":
"ce0daa93e617ce36bffbcace2a56160e",
"scripts/extension_data/intel_630_win10.json":
"34cf383e82e7ee8f5df22e57a6a3d9e8",
"scripts/extension_data/nvidia_p400_linux.json":
"664ee9c342f0ff9c2e1f883e79946307",
"scripts/extension_data/nvidia_p400_win10.json":
"0623157acbc7ba7e8614ef60e399d3be",
"scripts/extension_data/pixel_4_android_11.json":
"3e57bd9a2368657007719c3cfe18ea7e",
"scripts/extension_data/swiftshader_win10.json":
"396fde2ceb0c833fe2ce405c9f1bd901",
"scripts/extension_data/swiftshader_win10_gles1.json":
"368aa3eef8fcfc01ba322ea34ca505e9",
"scripts/gl.xml":
"a442a7aeff3a2f0a1fba52ee08089500",
"scripts/gl_angle_ext.xml":
@@ -16,7 +30,7 @@
"scripts/wgl.xml":
"c36001431919e1c435f1215a85f7e1db",
"src/libANGLE/gen_extensions.py":
"09abdc7e386601ea3b259cd30ec08ea0",
"50b566e2d23bb28448a33c485d388327",
"src/libANGLE/gles_extensions_autogen.cpp":
"039e36b4e6f02839e380b07fc9cb2855",
"src/libANGLE/gles_extensions_autogen.h":

View File

@@ -1,6 +1,6 @@
{
"infra/specs/angle.json":
"6e6154bf4e17d1de6a6b4a5216a56152",
"aa74dac3999debc1d7d509ab223e171d",
"infra/specs/generate_test_spec_json.py":
"348921bf70270ec6ee51fbb7e97d6925",
"infra/specs/mixins.pyl":
@@ -8,7 +8,7 @@
"infra/specs/test_suite_exceptions.pyl":
"723460da84a90884a9668c07a0893390",
"infra/specs/test_suites.pyl":
"f82c7a1b34ee773912d51018de703467",
"2b1cf89b1ecd6fcb1ee4b01f6105c077",
"infra/specs/variants.pyl":
"8cfcaa99fa07ad2a2d5d14f220fd5037",
"infra/specs/waterfalls.pyl":

View File

@@ -0,0 +1,150 @@
{
"Vendor": "Google Inc. (Intel)",
"Version": "OpenGL ES 3.2.0 (ANGLE 2.1.16778 git hash: c3e0eafaf38d)",
"Renderer": "ANGLE (Intel, Vulkan 1.1.96 (Intel(R) HD Graphics 630 (Kaby Lake GT2) (0x00005912)), Intel open-source Mesa driver-19.0.2)",
"ShaderLanguageVersion": "OpenGL ES GLSL ES 3.20 (ANGLE 2.1.16778 git hash: c3e0eafaf38d)",
"Extensions": [
"GL_ANGLE_base_vertex_base_instance",
"GL_ANGLE_client_arrays",
"GL_ANGLE_compressed_texture_etc",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_depth_texture",
"GL_ANGLE_framebuffer_blit",
"GL_ANGLE_framebuffer_multisample",
"GL_ANGLE_get_image",
"GL_ANGLE_get_serialized_context_string",
"GL_ANGLE_get_tex_level_parameter",
"GL_ANGLE_instanced_arrays",
"GL_ANGLE_memory_object_flags",
"GL_ANGLE_memory_size",
"GL_ANGLE_multi_draw",
"GL_ANGLE_program_cache_control",
"GL_ANGLE_relaxed_vertex_attribute_type",
"GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory",
"GL_ANGLE_texture_compression_dxt3",
"GL_ANGLE_texture_compression_dxt5",
"GL_ANGLE_yuv_internal_format",
"GL_APPLE_clip_distance",
"GL_CHROMIUM_bind_generates_resource",
"GL_CHROMIUM_bind_uniform_location",
"GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_lose_context",
"GL_EXT_EGL_image_array",
"GL_EXT_EGL_image_external_wrap_modes",
"GL_EXT_blend_func_extended",
"GL_EXT_blend_minmax",
"GL_EXT_buffer_storage",
"GL_EXT_clip_control",
"GL_EXT_clip_cull_distance",
"GL_EXT_color_buffer_float",
"GL_EXT_color_buffer_half_float",
"GL_EXT_compressed_ETC1_RGB8_sub_texture",
"GL_EXT_copy_image",
"GL_EXT_debug_label",
"GL_EXT_debug_marker",
"GL_EXT_discard_framebuffer",
"GL_EXT_disjoint_timer_query",
"GL_EXT_draw_buffers",
"GL_EXT_draw_buffers_indexed",
"GL_EXT_draw_elements_base_vertex",
"GL_EXT_float_blend",
"GL_EXT_frag_depth",
"GL_EXT_gpu_shader5",
"GL_EXT_instanced_arrays",
"GL_EXT_map_buffer_range",
"GL_EXT_memory_object",
"GL_EXT_memory_object_fd",
"GL_EXT_multisampled_render_to_texture",
"GL_EXT_multisampled_render_to_texture2",
"GL_EXT_occlusion_query_boolean",
"GL_EXT_primitive_bounding_box",
"GL_EXT_read_format_bgra",
"GL_EXT_robustness",
"GL_EXT_sRGB",
"GL_EXT_sRGB_write_control",
"GL_EXT_semaphore",
"GL_EXT_semaphore_fd",
"GL_EXT_separate_shader_objects",
"GL_EXT_shader_framebuffer_fetch_non_coherent",
"GL_EXT_shader_io_blocks",
"GL_EXT_shader_non_constant_global_initializers",
"GL_EXT_shader_texture_lod",
"GL_EXT_shadow_samplers",
"GL_EXT_texture_buffer",
"GL_EXT_texture_compression_bptc",
"GL_EXT_texture_compression_dxt1",
"GL_EXT_texture_compression_rgtc",
"GL_EXT_texture_compression_s3tc_srgb",
"GL_EXT_texture_cube_map_array",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_format_BGRA8888",
"GL_EXT_texture_norm16",
"GL_EXT_texture_rg",
"GL_EXT_texture_sRGB_R8",
"GL_EXT_texture_sRGB_decode",
"GL_EXT_texture_storage",
"GL_EXT_texture_type_2_10_10_10_REV",
"GL_EXT_unpack_subimage",
"GL_KHR_debug",
"GL_KHR_parallel_shader_compile",
"GL_KHR_texture_compression_astc_ldr",
"GL_NV_depth_buffer_float2",
"GL_NV_fence",
"GL_NV_framebuffer_blit",
"GL_NV_pack_subimage",
"GL_NV_pixel_buffer_object",
"GL_NV_read_depth",
"GL_NV_read_stencil",
"GL_NV_shader_noperspective_interpolation",
"GL_OES_EGL_image",
"GL_OES_EGL_image_external",
"GL_OES_EGL_image_external_essl3",
"GL_OES_EGL_sync",
"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_OES_compressed_ETC1_RGB8_texture",
"GL_OES_compressed_ETC2_RGB8_texture",
"GL_OES_compressed_ETC2_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture",
"GL_OES_compressed_ETC2_sRGB8_alpha8_texture",
"GL_OES_compressed_ETC2_sRGB8_texture",
"GL_OES_depth24",
"GL_OES_depth32",
"GL_OES_depth_texture",
"GL_OES_depth_texture_cube_map",
"GL_OES_draw_buffers_indexed",
"GL_OES_draw_elements_base_vertex",
"GL_OES_element_index_uint",
"GL_OES_fbo_render_mipmap",
"GL_OES_get_program_binary",
"GL_OES_mapbuffer",
"GL_OES_packed_depth_stencil",
"GL_OES_rgb8_rgba8",
"GL_OES_sample_shading",
"GL_OES_sample_variables",
"GL_OES_shader_image_atomic",
"GL_OES_shader_io_blocks",
"GL_OES_shader_multisample_interpolation",
"GL_OES_standard_derivatives",
"GL_OES_surfaceless_context",
"GL_OES_texture_3D",
"GL_OES_texture_buffer",
"GL_OES_texture_cube_map_array",
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_OES_texture_half_float",
"GL_OES_texture_half_float_linear",
"GL_OES_texture_npot",
"GL_OES_texture_stencil8",
"GL_OES_texture_storage_multisample_2d_array",
"GL_OES_vertex_array_object",
"GL_OES_vertex_half_float",
"GL_OES_vertex_type_10_10_10_2"
],
"DateRecorded": "September 22, 2021"
}

View File

@@ -0,0 +1,148 @@
{
"Vendor": "Google Inc. (Intel)",
"Version": "OpenGL ES 3.2.0 (ANGLE 2.1.16778 git hash: c3e0eafaf38d)",
"Renderer": "ANGLE (Intel, Vulkan 1.2.135 (Intel(R) HD Graphics 630 (0x00005912)), Intel Corporation-100.100.)",
"ShaderLanguageVersion": "OpenGL ES GLSL ES 3.20 (ANGLE 2.1.16778 git hash: c3e0eafaf38d)",
"Extensions": [
"GL_ANGLE_base_vertex_base_instance",
"GL_ANGLE_client_arrays",
"GL_ANGLE_compressed_texture_etc",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_depth_texture",
"GL_ANGLE_framebuffer_blit",
"GL_ANGLE_framebuffer_multisample",
"GL_ANGLE_get_image",
"GL_ANGLE_get_serialized_context_string",
"GL_ANGLE_get_tex_level_parameter",
"GL_ANGLE_instanced_arrays",
"GL_ANGLE_memory_object_flags",
"GL_ANGLE_memory_size",
"GL_ANGLE_multi_draw",
"GL_ANGLE_program_cache_control",
"GL_ANGLE_relaxed_vertex_attribute_type",
"GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory",
"GL_ANGLE_texture_compression_dxt3",
"GL_ANGLE_texture_compression_dxt5",
"GL_APPLE_clip_distance",
"GL_CHROMIUM_bind_generates_resource",
"GL_CHROMIUM_bind_uniform_location",
"GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_lose_context",
"GL_EXT_EGL_image_array",
"GL_EXT_EGL_image_external_wrap_modes",
"GL_EXT_blend_func_extended",
"GL_EXT_blend_minmax",
"GL_EXT_buffer_storage",
"GL_EXT_clip_control",
"GL_EXT_clip_cull_distance",
"GL_EXT_color_buffer_float",
"GL_EXT_color_buffer_half_float",
"GL_EXT_compressed_ETC1_RGB8_sub_texture",
"GL_EXT_copy_image",
"GL_EXT_debug_label",
"GL_EXT_debug_marker",
"GL_EXT_discard_framebuffer",
"GL_EXT_disjoint_timer_query",
"GL_EXT_draw_buffers",
"GL_EXT_draw_buffers_indexed",
"GL_EXT_draw_elements_base_vertex",
"GL_EXT_float_blend",
"GL_EXT_frag_depth",
"GL_EXT_geometry_shader",
"GL_EXT_gpu_shader5",
"GL_EXT_instanced_arrays",
"GL_EXT_map_buffer_range",
"GL_EXT_memory_object",
"GL_EXT_occlusion_query_boolean",
"GL_EXT_primitive_bounding_box",
"GL_EXT_read_format_bgra",
"GL_EXT_robustness",
"GL_EXT_sRGB",
"GL_EXT_sRGB_write_control",
"GL_EXT_semaphore",
"GL_EXT_separate_shader_objects",
"GL_EXT_shader_framebuffer_fetch_non_coherent",
"GL_EXT_shader_io_blocks",
"GL_EXT_shader_non_constant_global_initializers",
"GL_EXT_shader_texture_lod",
"GL_EXT_shadow_samplers",
"GL_EXT_tessellation_shader",
"GL_EXT_texture_compression_bptc",
"GL_EXT_texture_compression_dxt1",
"GL_EXT_texture_compression_rgtc",
"GL_EXT_texture_compression_s3tc_srgb",
"GL_EXT_texture_cube_map_array",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_format_BGRA8888",
"GL_EXT_texture_format_sRGB_override",
"GL_EXT_texture_norm16",
"GL_EXT_texture_rg",
"GL_EXT_texture_sRGB_decode",
"GL_EXT_texture_storage",
"GL_EXT_texture_type_2_10_10_10_REV",
"GL_EXT_unpack_subimage",
"GL_KHR_debug",
"GL_KHR_parallel_shader_compile",
"GL_KHR_texture_compression_astc_ldr",
"GL_NV_depth_buffer_float2",
"GL_NV_fence",
"GL_NV_framebuffer_blit",
"GL_NV_pack_subimage",
"GL_NV_pixel_buffer_object",
"GL_NV_read_depth",
"GL_NV_read_stencil",
"GL_NV_shader_noperspective_interpolation",
"GL_OES_EGL_image",
"GL_OES_EGL_image_external",
"GL_OES_EGL_image_external_essl3",
"GL_OES_EGL_sync",
"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_OES_compressed_ETC1_RGB8_texture",
"GL_OES_compressed_ETC2_RGB8_texture",
"GL_OES_compressed_ETC2_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture",
"GL_OES_compressed_ETC2_sRGB8_alpha8_texture",
"GL_OES_compressed_ETC2_sRGB8_texture",
"GL_OES_depth24",
"GL_OES_depth32",
"GL_OES_depth_texture",
"GL_OES_depth_texture_cube_map",
"GL_OES_draw_buffers_indexed",
"GL_OES_draw_elements_base_vertex",
"GL_OES_element_index_uint",
"GL_OES_fbo_render_mipmap",
"GL_OES_geometry_shader",
"GL_OES_get_program_binary",
"GL_OES_mapbuffer",
"GL_OES_packed_depth_stencil",
"GL_OES_rgb8_rgba8",
"GL_OES_sample_shading",
"GL_OES_sample_variables",
"GL_OES_shader_image_atomic",
"GL_OES_shader_io_blocks",
"GL_OES_shader_multisample_interpolation",
"GL_OES_standard_derivatives",
"GL_OES_surfaceless_context",
"GL_OES_texture_3D",
"GL_OES_texture_cube_map_array",
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_OES_texture_half_float",
"GL_OES_texture_half_float_linear",
"GL_OES_texture_npot",
"GL_OES_texture_stencil8",
"GL_OES_texture_storage_multisample_2d_array",
"GL_OES_vertex_array_object",
"GL_OES_vertex_half_float",
"GL_OES_vertex_type_10_10_10_2",
"GL_OVR_multiview",
"GL_OVR_multiview2"
],
"DateRecorded": "September 22, 2021"
}

View File

@@ -0,0 +1,147 @@
{
"Vendor": "Google Inc. (NVIDIA)",
"Version": "OpenGL ES 3.2.0 (ANGLE 2.1.16778 git hash: c3e0eafaf38d)",
"Renderer": "ANGLE (NVIDIA, Vulkan 1.1.95 (NVIDIA Quadro P400 (0x00001CB3)), NVIDIA-418.56.0.0)",
"ShaderLanguageVersion": "OpenGL ES GLSL ES 3.20 (ANGLE 2.1.16778 git hash: c3e0eafaf38d)",
"Extensions": [
"GL_ANGLE_base_vertex_base_instance",
"GL_ANGLE_client_arrays",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_depth_texture",
"GL_ANGLE_framebuffer_blit",
"GL_ANGLE_framebuffer_multisample",
"GL_ANGLE_get_image",
"GL_ANGLE_get_serialized_context_string",
"GL_ANGLE_get_tex_level_parameter",
"GL_ANGLE_instanced_arrays",
"GL_ANGLE_memory_object_flags",
"GL_ANGLE_memory_size",
"GL_ANGLE_multi_draw",
"GL_ANGLE_program_cache_control",
"GL_ANGLE_relaxed_vertex_attribute_type",
"GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory",
"GL_ANGLE_texture_compression_dxt3",
"GL_ANGLE_texture_compression_dxt5",
"GL_ANGLE_yuv_internal_format",
"GL_APPLE_clip_distance",
"GL_CHROMIUM_bind_generates_resource",
"GL_CHROMIUM_bind_uniform_location",
"GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_lose_context",
"GL_EXT_EGL_image_array",
"GL_EXT_EGL_image_external_wrap_modes",
"GL_EXT_blend_func_extended",
"GL_EXT_blend_minmax",
"GL_EXT_buffer_storage",
"GL_EXT_clip_control",
"GL_EXT_clip_cull_distance",
"GL_EXT_color_buffer_float",
"GL_EXT_color_buffer_half_float",
"GL_EXT_compressed_ETC1_RGB8_sub_texture",
"GL_EXT_copy_image",
"GL_EXT_debug_label",
"GL_EXT_debug_marker",
"GL_EXT_discard_framebuffer",
"GL_EXT_disjoint_timer_query",
"GL_EXT_draw_buffers",
"GL_EXT_draw_buffers_indexed",
"GL_EXT_draw_elements_base_vertex",
"GL_EXT_float_blend",
"GL_EXT_frag_depth",
"GL_EXT_gpu_shader5",
"GL_EXT_instanced_arrays",
"GL_EXT_map_buffer_range",
"GL_EXT_memory_object",
"GL_EXT_memory_object_fd",
"GL_EXT_multisampled_render_to_texture",
"GL_EXT_multisampled_render_to_texture2",
"GL_EXT_occlusion_query_boolean",
"GL_EXT_primitive_bounding_box",
"GL_EXT_read_format_bgra",
"GL_EXT_robustness",
"GL_EXT_sRGB",
"GL_EXT_sRGB_write_control",
"GL_EXT_semaphore",
"GL_EXT_semaphore_fd",
"GL_EXT_separate_shader_objects",
"GL_EXT_shader_framebuffer_fetch_non_coherent",
"GL_EXT_shader_io_blocks",
"GL_EXT_shader_non_constant_global_initializers",
"GL_EXT_shader_texture_lod",
"GL_EXT_shadow_samplers",
"GL_EXT_texture_buffer",
"GL_EXT_texture_compression_bptc",
"GL_EXT_texture_compression_dxt1",
"GL_EXT_texture_compression_rgtc",
"GL_EXT_texture_compression_s3tc_srgb",
"GL_EXT_texture_cube_map_array",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_format_BGRA8888",
"GL_EXT_texture_rg",
"GL_EXT_texture_sRGB_R8",
"GL_EXT_texture_sRGB_decode",
"GL_EXT_texture_storage",
"GL_EXT_texture_type_2_10_10_10_REV",
"GL_EXT_unpack_subimage",
"GL_KHR_debug",
"GL_KHR_parallel_shader_compile",
"GL_NV_depth_buffer_float2",
"GL_NV_fence",
"GL_NV_framebuffer_blit",
"GL_NV_pack_subimage",
"GL_NV_pixel_buffer_object",
"GL_NV_read_depth",
"GL_NV_read_stencil",
"GL_NV_shader_noperspective_interpolation",
"GL_OES_EGL_image",
"GL_OES_EGL_image_external",
"GL_OES_EGL_image_external_essl3",
"GL_OES_EGL_sync",
"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_OES_compressed_ETC1_RGB8_texture",
"GL_OES_compressed_ETC2_RGB8_texture",
"GL_OES_compressed_ETC2_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture",
"GL_OES_compressed_ETC2_sRGB8_alpha8_texture",
"GL_OES_compressed_ETC2_sRGB8_texture",
"GL_OES_depth24",
"GL_OES_depth32",
"GL_OES_depth_texture",
"GL_OES_depth_texture_cube_map",
"GL_OES_draw_buffers_indexed",
"GL_OES_draw_elements_base_vertex",
"GL_OES_element_index_uint",
"GL_OES_fbo_render_mipmap",
"GL_OES_get_program_binary",
"GL_OES_mapbuffer",
"GL_OES_packed_depth_stencil",
"GL_OES_rgb8_rgba8",
"GL_OES_sample_shading",
"GL_OES_sample_variables",
"GL_OES_shader_image_atomic",
"GL_OES_shader_io_blocks",
"GL_OES_shader_multisample_interpolation",
"GL_OES_standard_derivatives",
"GL_OES_surfaceless_context",
"GL_OES_texture_3D",
"GL_OES_texture_buffer",
"GL_OES_texture_cube_map_array",
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_OES_texture_half_float",
"GL_OES_texture_half_float_linear",
"GL_OES_texture_npot",
"GL_OES_texture_stencil8",
"GL_OES_texture_storage_multisample_2d_array",
"GL_OES_vertex_array_object",
"GL_OES_vertex_half_float",
"GL_OES_vertex_type_10_10_10_2"
],
"DateRecorded": "September 22, 2021"
}

View File

@@ -0,0 +1,152 @@
{
"Vendor": "Google Inc. (NVIDIA)",
"Version": "OpenGL ES 3.2.0 (ANGLE 2.1.16778 git hash: c3e0eafaf38d)",
"Renderer": "ANGLE (NVIDIA, Vulkan 1.2.133 (NVIDIA Quadro P400 (0x00001CB3)), NVIDIA-451.48.0.0)",
"ShaderLanguageVersion": "OpenGL ES GLSL ES 3.20 (ANGLE 2.1.16778 git hash: c3e0eafaf38d)",
"Extensions": [
"GL_ANGLE_base_vertex_base_instance",
"GL_ANGLE_client_arrays",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_depth_texture",
"GL_ANGLE_framebuffer_blit",
"GL_ANGLE_framebuffer_multisample",
"GL_ANGLE_get_image",
"GL_ANGLE_get_serialized_context_string",
"GL_ANGLE_get_tex_level_parameter",
"GL_ANGLE_instanced_arrays",
"GL_ANGLE_memory_object_flags",
"GL_ANGLE_memory_size",
"GL_ANGLE_multi_draw",
"GL_ANGLE_program_cache_control",
"GL_ANGLE_relaxed_vertex_attribute_type",
"GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory",
"GL_ANGLE_texture_compression_dxt3",
"GL_ANGLE_texture_compression_dxt5",
"GL_ANGLE_yuv_internal_format",
"GL_APPLE_clip_distance",
"GL_CHROMIUM_bind_generates_resource",
"GL_CHROMIUM_bind_uniform_location",
"GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_lose_context",
"GL_EXT_EGL_image_array",
"GL_EXT_EGL_image_external_wrap_modes",
"GL_EXT_blend_func_extended",
"GL_EXT_blend_minmax",
"GL_EXT_buffer_storage",
"GL_EXT_clip_control",
"GL_EXT_clip_cull_distance",
"GL_EXT_color_buffer_float",
"GL_EXT_color_buffer_half_float",
"GL_EXT_compressed_ETC1_RGB8_sub_texture",
"GL_EXT_copy_image",
"GL_EXT_debug_label",
"GL_EXT_debug_marker",
"GL_EXT_discard_framebuffer",
"GL_EXT_disjoint_timer_query",
"GL_EXT_draw_buffers",
"GL_EXT_draw_buffers_indexed",
"GL_EXT_draw_elements_base_vertex",
"GL_EXT_float_blend",
"GL_EXT_frag_depth",
"GL_EXT_geometry_shader",
"GL_EXT_gpu_shader5",
"GL_EXT_instanced_arrays",
"GL_EXT_map_buffer_range",
"GL_EXT_memory_object",
"GL_EXT_multisampled_render_to_texture",
"GL_EXT_multisampled_render_to_texture2",
"GL_EXT_occlusion_query_boolean",
"GL_EXT_primitive_bounding_box",
"GL_EXT_read_format_bgra",
"GL_EXT_robustness",
"GL_EXT_sRGB",
"GL_EXT_sRGB_write_control",
"GL_EXT_semaphore",
"GL_EXT_separate_shader_objects",
"GL_EXT_shader_framebuffer_fetch_non_coherent",
"GL_EXT_shader_io_blocks",
"GL_EXT_shader_non_constant_global_initializers",
"GL_EXT_shader_texture_lod",
"GL_EXT_shadow_samplers",
"GL_EXT_tessellation_shader",
"GL_EXT_texture_border_clamp",
"GL_EXT_texture_buffer",
"GL_EXT_texture_compression_bptc",
"GL_EXT_texture_compression_dxt1",
"GL_EXT_texture_compression_rgtc",
"GL_EXT_texture_compression_s3tc_srgb",
"GL_EXT_texture_cube_map_array",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_format_BGRA8888",
"GL_EXT_texture_rg",
"GL_EXT_texture_sRGB_R8",
"GL_EXT_texture_sRGB_decode",
"GL_EXT_texture_storage",
"GL_EXT_texture_type_2_10_10_10_REV",
"GL_EXT_unpack_subimage",
"GL_KHR_debug",
"GL_KHR_parallel_shader_compile",
"GL_NV_depth_buffer_float2",
"GL_NV_fence",
"GL_NV_framebuffer_blit",
"GL_NV_pack_subimage",
"GL_NV_pixel_buffer_object",
"GL_NV_read_depth",
"GL_NV_read_stencil",
"GL_NV_shader_noperspective_interpolation",
"GL_OES_EGL_image",
"GL_OES_EGL_image_external",
"GL_OES_EGL_image_external_essl3",
"GL_OES_EGL_sync",
"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_OES_compressed_ETC1_RGB8_texture",
"GL_OES_compressed_ETC2_RGB8_texture",
"GL_OES_compressed_ETC2_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture",
"GL_OES_compressed_ETC2_sRGB8_alpha8_texture",
"GL_OES_compressed_ETC2_sRGB8_texture",
"GL_OES_depth24",
"GL_OES_depth32",
"GL_OES_depth_texture",
"GL_OES_depth_texture_cube_map",
"GL_OES_draw_buffers_indexed",
"GL_OES_draw_elements_base_vertex",
"GL_OES_element_index_uint",
"GL_OES_fbo_render_mipmap",
"GL_OES_geometry_shader",
"GL_OES_get_program_binary",
"GL_OES_mapbuffer",
"GL_OES_packed_depth_stencil",
"GL_OES_rgb8_rgba8",
"GL_OES_sample_shading",
"GL_OES_sample_variables",
"GL_OES_shader_image_atomic",
"GL_OES_shader_io_blocks",
"GL_OES_shader_multisample_interpolation",
"GL_OES_standard_derivatives",
"GL_OES_surfaceless_context",
"GL_OES_texture_3D",
"GL_OES_texture_border_clamp",
"GL_OES_texture_buffer",
"GL_OES_texture_cube_map_array",
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_OES_texture_half_float",
"GL_OES_texture_half_float_linear",
"GL_OES_texture_npot",
"GL_OES_texture_stencil8",
"GL_OES_texture_storage_multisample_2d_array",
"GL_OES_vertex_array_object",
"GL_OES_vertex_half_float",
"GL_OES_vertex_type_10_10_10_2",
"GL_OVR_multiview",
"GL_OVR_multiview2"
],
"DateRecorded": "September 22, 2021"
}

View File

@@ -0,0 +1,146 @@
{
"Vendor": "Google Inc. (Qualcomm)",
"Version": "OpenGL ES 3.2.0 (ANGLE 2.1.16782 git hash: 368c0ce94472)",
"Renderer": "ANGLE (Qualcomm, Vulkan 1.1.128 (Adreno (TM) 640 (0x06040001)), Qualcomm Technologies Inc. Adreno Vulkan Driver-512.490.0)",
"ShaderLanguageVersion": "OpenGL ES GLSL ES 3.20 (ANGLE 2.1.16782 git hash: 368c0ce94472)",
"Extensions": [
"GL_ANGLE_base_vertex_base_instance",
"GL_ANGLE_client_arrays",
"GL_ANGLE_compressed_texture_etc",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_depth_texture",
"GL_ANGLE_framebuffer_blit",
"GL_ANGLE_framebuffer_multisample",
"GL_ANGLE_get_image",
"GL_ANGLE_get_serialized_context_string",
"GL_ANGLE_get_tex_level_parameter",
"GL_ANGLE_instanced_arrays",
"GL_ANGLE_memory_object_flags",
"GL_ANGLE_memory_size",
"GL_ANGLE_multi_draw",
"GL_ANGLE_program_cache_control",
"GL_ANGLE_relaxed_vertex_attribute_type",
"GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory",
"GL_ANGLE_yuv_internal_format",
"GL_APPLE_clip_distance",
"GL_CHROMIUM_bind_generates_resource",
"GL_CHROMIUM_bind_uniform_location",
"GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_lose_context",
"GL_EXT_EGL_image_array",
"GL_EXT_EGL_image_external_wrap_modes",
"GL_EXT_blend_func_extended",
"GL_EXT_blend_minmax",
"GL_EXT_buffer_storage",
"GL_EXT_clip_control",
"GL_EXT_clip_cull_distance",
"GL_EXT_color_buffer_float",
"GL_EXT_color_buffer_half_float",
"GL_EXT_compressed_ETC1_RGB8_sub_texture",
"GL_EXT_copy_image",
"GL_EXT_debug_label",
"GL_EXT_debug_marker",
"GL_EXT_discard_framebuffer",
"GL_EXT_disjoint_timer_query",
"GL_EXT_draw_buffers",
"GL_EXT_draw_buffers_indexed",
"GL_EXT_draw_elements_base_vertex",
"GL_EXT_external_buffer",
"GL_EXT_float_blend",
"GL_EXT_frag_depth",
"GL_EXT_gpu_shader5",
"GL_EXT_instanced_arrays",
"GL_EXT_map_buffer_range",
"GL_EXT_memory_object",
"GL_EXT_memory_object_fd",
"GL_EXT_multisampled_render_to_texture",
"GL_EXT_multisampled_render_to_texture2",
"GL_EXT_occlusion_query_boolean",
"GL_EXT_primitive_bounding_box",
"GL_EXT_protected_textures",
"GL_EXT_read_format_bgra",
"GL_EXT_robustness",
"GL_EXT_sRGB",
"GL_EXT_sRGB_write_control",
"GL_EXT_semaphore",
"GL_EXT_semaphore_fd",
"GL_EXT_separate_shader_objects",
"GL_EXT_shader_io_blocks",
"GL_EXT_shader_non_constant_global_initializers",
"GL_EXT_shader_texture_lod",
"GL_EXT_shadow_samplers",
"GL_EXT_texture_buffer",
"GL_EXT_texture_cube_map_array",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_format_BGRA8888",
"GL_EXT_texture_rg",
"GL_EXT_texture_sRGB_R8",
"GL_EXT_texture_sRGB_RG8",
"GL_EXT_texture_sRGB_decode",
"GL_EXT_texture_storage",
"GL_EXT_texture_type_2_10_10_10_REV",
"GL_EXT_unpack_subimage",
"GL_KHR_debug",
"GL_KHR_parallel_shader_compile",
"GL_KHR_texture_compression_astc_ldr",
"GL_NV_depth_buffer_float2",
"GL_NV_fence",
"GL_NV_framebuffer_blit",
"GL_NV_pack_subimage",
"GL_NV_pixel_buffer_object",
"GL_NV_read_depth",
"GL_NV_read_stencil",
"GL_NV_shader_noperspective_interpolation",
"GL_OES_EGL_image",
"GL_OES_EGL_image_external",
"GL_OES_EGL_image_external_essl3",
"GL_OES_EGL_sync",
"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_OES_compressed_ETC1_RGB8_texture",
"GL_OES_compressed_ETC2_RGB8_texture",
"GL_OES_compressed_ETC2_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture",
"GL_OES_compressed_ETC2_sRGB8_alpha8_texture",
"GL_OES_compressed_ETC2_sRGB8_texture",
"GL_OES_depth24",
"GL_OES_depth32",
"GL_OES_depth_texture",
"GL_OES_depth_texture_cube_map",
"GL_OES_draw_buffers_indexed",
"GL_OES_draw_elements_base_vertex",
"GL_OES_element_index_uint",
"GL_OES_fbo_render_mipmap",
"GL_OES_get_program_binary",
"GL_OES_mapbuffer",
"GL_OES_packed_depth_stencil",
"GL_OES_rgb8_rgba8",
"GL_OES_sample_shading",
"GL_OES_sample_variables",
"GL_OES_shader_image_atomic",
"GL_OES_shader_io_blocks",
"GL_OES_shader_multisample_interpolation",
"GL_OES_standard_derivatives",
"GL_OES_surfaceless_context",
"GL_OES_texture_3D",
"GL_OES_texture_buffer",
"GL_OES_texture_cube_map_array",
"GL_OES_texture_float",
"GL_OES_texture_half_float",
"GL_OES_texture_half_float_linear",
"GL_OES_texture_npot",
"GL_OES_texture_stencil8",
"GL_OES_texture_storage_multisample_2d_array",
"GL_OES_vertex_array_object",
"GL_OES_vertex_half_float",
"GL_OES_vertex_type_10_10_10_2",
"GL_OVR_multiview",
"GL_OVR_multiview2"
],
"DateRecorded": "September 23, 2021"
}

View File

@@ -0,0 +1,147 @@
{
"Vendor": "Google Inc. (Google)",
"Version": "OpenGL ES 3.1.0 (ANGLE 2.1.16782 git hash: 368c0ce94472)",
"Renderer": "ANGLE (Google, Vulkan 1.2.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)",
"ShaderLanguageVersion": "OpenGL ES GLSL ES 3.10 (ANGLE 2.1.16782 git hash: 368c0ce94472)",
"Extensions": [
"GL_ANGLE_base_vertex_base_instance",
"GL_ANGLE_client_arrays",
"GL_ANGLE_compressed_texture_etc",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_depth_texture",
"GL_ANGLE_framebuffer_blit",
"GL_ANGLE_framebuffer_multisample",
"GL_ANGLE_get_image",
"GL_ANGLE_get_serialized_context_string",
"GL_ANGLE_get_tex_level_parameter",
"GL_ANGLE_instanced_arrays",
"GL_ANGLE_memory_object_flags",
"GL_ANGLE_memory_size",
"GL_ANGLE_multi_draw",
"GL_ANGLE_program_cache_control",
"GL_ANGLE_relaxed_vertex_attribute_type",
"GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory",
"GL_ANGLE_texture_compression_dxt3",
"GL_ANGLE_texture_compression_dxt5",
"GL_ANGLE_yuv_internal_format",
"GL_APPLE_clip_distance",
"GL_CHROMIUM_bind_generates_resource",
"GL_CHROMIUM_bind_uniform_location",
"GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_lose_context",
"GL_CHROMIUM_texture_filtering_hint",
"GL_EXT_EGL_image_array",
"GL_EXT_EGL_image_external_wrap_modes",
"GL_EXT_blend_minmax",
"GL_EXT_buffer_storage",
"GL_EXT_clip_control",
"GL_EXT_clip_cull_distance",
"GL_EXT_color_buffer_float",
"GL_EXT_color_buffer_half_float",
"GL_EXT_compressed_ETC1_RGB8_sub_texture",
"GL_EXT_copy_image",
"GL_EXT_debug_label",
"GL_EXT_debug_marker",
"GL_EXT_discard_framebuffer",
"GL_EXT_disjoint_timer_query",
"GL_EXT_draw_buffers",
"GL_EXT_draw_buffers_indexed",
"GL_EXT_draw_elements_base_vertex",
"GL_EXT_float_blend",
"GL_EXT_frag_depth",
"GL_EXT_instanced_arrays",
"GL_EXT_map_buffer_range",
"GL_EXT_memory_object",
"GL_EXT_multisampled_render_to_texture",
"GL_EXT_multisampled_render_to_texture2",
"GL_EXT_occlusion_query_boolean",
"GL_EXT_primitive_bounding_box",
"GL_EXT_read_format_bgra",
"GL_EXT_sRGB",
"GL_EXT_semaphore",
"GL_EXT_separate_shader_objects",
"GL_EXT_shader_framebuffer_fetch_non_coherent",
"GL_EXT_shader_io_blocks",
"GL_EXT_shader_non_constant_global_initializers",
"GL_EXT_shader_texture_lod",
"GL_EXT_shadow_samplers",
"GL_EXT_texture_buffer",
"GL_EXT_texture_compression_bptc",
"GL_EXT_texture_compression_dxt1",
"GL_EXT_texture_compression_rgtc",
"GL_EXT_texture_compression_s3tc_srgb",
"GL_EXT_texture_cube_map_array",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_format_BGRA8888",
"GL_EXT_texture_rg",
"GL_EXT_texture_sRGB_R8",
"GL_EXT_texture_sRGB_RG8",
"GL_EXT_texture_sRGB_decode",
"GL_EXT_texture_storage",
"GL_EXT_texture_type_2_10_10_10_REV",
"GL_EXT_unpack_subimage",
"GL_KHR_debug",
"GL_KHR_parallel_shader_compile",
"GL_KHR_texture_compression_astc_ldr",
"GL_NV_depth_buffer_float2",
"GL_NV_fence",
"GL_NV_framebuffer_blit",
"GL_NV_pack_subimage",
"GL_NV_pixel_buffer_object",
"GL_NV_read_depth",
"GL_NV_read_stencil",
"GL_NV_shader_noperspective_interpolation",
"GL_OES_EGL_image",
"GL_OES_EGL_image_external",
"GL_OES_EGL_image_external_essl3",
"GL_OES_EGL_sync",
"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_OES_compressed_ETC1_RGB8_texture",
"GL_OES_compressed_ETC2_RGB8_texture",
"GL_OES_compressed_ETC2_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture",
"GL_OES_compressed_ETC2_sRGB8_alpha8_texture",
"GL_OES_compressed_ETC2_sRGB8_texture",
"GL_OES_depth24",
"GL_OES_depth32",
"GL_OES_depth_texture",
"GL_OES_depth_texture_cube_map",
"GL_OES_draw_buffers_indexed",
"GL_OES_draw_elements_base_vertex",
"GL_OES_element_index_uint",
"GL_OES_fbo_render_mipmap",
"GL_OES_get_program_binary",
"GL_OES_mapbuffer",
"GL_OES_packed_depth_stencil",
"GL_OES_rgb8_rgba8",
"GL_OES_sample_shading",
"GL_OES_sample_variables",
"GL_OES_shader_image_atomic",
"GL_OES_shader_io_blocks",
"GL_OES_shader_multisample_interpolation",
"GL_OES_standard_derivatives",
"GL_OES_surfaceless_context",
"GL_OES_texture_3D",
"GL_OES_texture_buffer",
"GL_OES_texture_cube_map_array",
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_OES_texture_half_float",
"GL_OES_texture_half_float_linear",
"GL_OES_texture_npot",
"GL_OES_texture_stencil8",
"GL_OES_texture_storage_multisample_2d_array",
"GL_OES_vertex_array_object",
"GL_OES_vertex_half_float",
"GL_OES_vertex_type_10_10_10_2",
"GL_OVR_multiview",
"GL_OVR_multiview2"
],
"DateRecorded": "September 23, 2021"
}

View File

@@ -0,0 +1,140 @@
{
"Vendor": "Google Inc. (Google)",
"Version": "OpenGL ES 1.0.0 (ANGLE 2.1.16782 git hash: 368c0ce94472)",
"Renderer": "ANGLE (Google, Vulkan 1.2.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)",
"ShaderLanguageVersion": "OpenGL ES GLSL ES 1.00 (ANGLE 2.1.16782 git hash: 368c0ce94472)",
"Extensions": [
"GL_ANGLE_base_vertex_base_instance",
"GL_ANGLE_client_arrays",
"GL_ANGLE_compressed_texture_etc",
"GL_ANGLE_depth_texture",
"GL_ANGLE_framebuffer_blit",
"GL_ANGLE_framebuffer_multisample",
"GL_ANGLE_get_image",
"GL_ANGLE_get_serialized_context_string",
"GL_ANGLE_get_tex_level_parameter",
"GL_ANGLE_instanced_arrays",
"GL_ANGLE_memory_object_flags",
"GL_ANGLE_memory_size",
"GL_ANGLE_multi_draw",
"GL_ANGLE_program_cache_control",
"GL_ANGLE_relaxed_vertex_attribute_type",
"GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory",
"GL_ANGLE_texture_compression_dxt3",
"GL_ANGLE_texture_compression_dxt5",
"GL_ANGLE_yuv_internal_format",
"GL_CHROMIUM_bind_generates_resource",
"GL_CHROMIUM_bind_uniform_location",
"GL_CHROMIUM_color_buffer_float_rgb",
"GL_CHROMIUM_color_buffer_float_rgba",
"GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_lose_context",
"GL_CHROMIUM_texture_filtering_hint",
"GL_EXT_EGL_image_external_wrap_modes",
"GL_EXT_blend_minmax",
"GL_EXT_buffer_storage",
"GL_EXT_clip_control",
"GL_EXT_color_buffer_half_float",
"GL_EXT_compressed_ETC1_RGB8_sub_texture",
"GL_EXT_copy_image",
"GL_EXT_debug_label",
"GL_EXT_debug_marker",
"GL_EXT_discard_framebuffer",
"GL_EXT_disjoint_timer_query",
"GL_EXT_draw_buffers",
"GL_EXT_draw_elements_base_vertex",
"GL_EXT_float_blend",
"GL_EXT_frag_depth",
"GL_EXT_instanced_arrays",
"GL_EXT_map_buffer_range",
"GL_EXT_memory_object",
"GL_EXT_multisampled_render_to_texture",
"GL_EXT_multisampled_render_to_texture2",
"GL_EXT_occlusion_query_boolean",
"GL_EXT_primitive_bounding_box",
"GL_EXT_read_format_bgra",
"GL_EXT_sRGB",
"GL_EXT_semaphore",
"GL_EXT_separate_shader_objects",
"GL_EXT_shader_framebuffer_fetch_non_coherent",
"GL_EXT_shader_io_blocks",
"GL_EXT_shader_non_constant_global_initializers",
"GL_EXT_shader_texture_lod",
"GL_EXT_shadow_samplers",
"GL_EXT_texture_buffer",
"GL_EXT_texture_compression_bptc",
"GL_EXT_texture_compression_dxt1",
"GL_EXT_texture_compression_rgtc",
"GL_EXT_texture_compression_s3tc_srgb",
"GL_EXT_texture_cube_map_array",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_format_BGRA8888",
"GL_EXT_texture_rg",
"GL_EXT_texture_sRGB_R8",
"GL_EXT_texture_sRGB_RG8",
"GL_EXT_texture_sRGB_decode",
"GL_EXT_texture_storage",
"GL_EXT_texture_type_2_10_10_10_REV",
"GL_EXT_unpack_subimage",
"GL_KHR_debug",
"GL_KHR_texture_compression_astc_ldr",
"GL_NV_depth_buffer_float2",
"GL_NV_fence",
"GL_NV_framebuffer_blit",
"GL_NV_pack_subimage",
"GL_NV_pixel_buffer_object",
"GL_NV_read_depth",
"GL_NV_read_stencil",
"GL_NV_shader_noperspective_interpolation",
"GL_OES_EGL_image",
"GL_OES_EGL_image_external",
"GL_OES_EGL_sync",
"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_OES_compressed_ETC1_RGB8_texture",
"GL_OES_compressed_ETC2_RGB8_texture",
"GL_OES_compressed_ETC2_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture",
"GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture",
"GL_OES_compressed_ETC2_sRGB8_alpha8_texture",
"GL_OES_compressed_ETC2_sRGB8_texture",
"GL_OES_depth24",
"GL_OES_depth32",
"GL_OES_depth_texture",
"GL_OES_depth_texture_cube_map",
"GL_OES_draw_elements_base_vertex",
"GL_OES_draw_texture",
"GL_OES_element_index_uint",
"GL_OES_fbo_render_mipmap",
"GL_OES_framebuffer_object",
"GL_OES_get_program_binary",
"GL_OES_mapbuffer",
"GL_OES_packed_depth_stencil",
"GL_OES_point_size_array",
"GL_OES_point_sprite",
"GL_OES_rgb8_rgba8",
"GL_OES_sample_shading",
"GL_OES_sample_variables",
"GL_OES_shader_image_atomic",
"GL_OES_shader_io_blocks",
"GL_OES_shader_multisample_interpolation",
"GL_OES_standard_derivatives",
"GL_OES_surfaceless_context",
"GL_OES_texture_buffer",
"GL_OES_texture_cube_map",
"GL_OES_texture_cube_map_array",
"GL_OES_texture_float",
"GL_OES_texture_float_linear",
"GL_OES_texture_half_float",
"GL_OES_texture_half_float_linear",
"GL_OES_texture_npot",
"GL_OES_texture_stencil8",
"GL_OES_vertex_array_object",
"GL_OES_vertex_half_float"
],
"DateRecorded": "September 23, 2021"
}

View File

@@ -17,6 +17,34 @@ namespace angle
// dirtyPointer is a special value that will make the comparison with any valid pointer fail and
// force the renderer to re-apply the state.
const uintptr_t DirtyPointer = std::numeric_limits<uintptr_t>::max();
SaveFileHelper::SaveFileHelper(const std::string &filePathIn)
: mOfs(filePathIn, std::ios::binary | std::ios::out), mFilePath(filePathIn)
{
if (!mOfs.is_open())
{
FATAL() << "Could not open " << filePathIn;
}
}
SaveFileHelper::~SaveFileHelper()
{
printf("Saved '%s'.\n", mFilePath.c_str());
}
void SaveFileHelper::checkError()
{
if (mOfs.bad())
{
FATAL() << "Error writing to " << mFilePath;
}
}
void SaveFileHelper::write(const uint8_t *data, size_t size)
{
mOfs.write(reinterpret_cast<const char *>(data), size);
}
} // namespace angle
std::string ArrayString(unsigned int i)

View File

@@ -23,6 +23,7 @@
#include <climits>
#include <cstdarg>
#include <cstddef>
#include <fstream>
#include <set>
#include <sstream>
#include <string>
@@ -63,6 +64,30 @@ class NonCopyable
extern const uintptr_t DirtyPointer;
struct SaveFileHelper
{
public:
// We always use ios::binary to avoid inconsistent line endings when captured on Linux vs Win.
SaveFileHelper(const std::string &filePathIn);
~SaveFileHelper();
template <typename T>
SaveFileHelper &operator<<(const T &value)
{
mOfs << value;
checkError();
return *this;
}
void write(const uint8_t *data, size_t size);
private:
void checkError();
std::ofstream mOfs;
std::string mFilePath;
};
} // namespace angle
template <typename T, size_t N>

View File

@@ -843,42 +843,6 @@ CallCapture CaptureMakeCurrent(EGLDisplay display,
return CallCapture(angle::EntryPoint::EGLMakeCurrent, std::move(paramBuffer));
}
struct SaveFileHelper
{
public:
// We always use ios::binary to avoid inconsistent line endings when captured on Linux vs Win.
SaveFileHelper(const std::string &filePathIn)
: mOfs(filePathIn, std::ios::binary | std::ios::out), mFilePath(filePathIn)
{
if (!mOfs.is_open())
{
FATAL() << "Could not open " << filePathIn;
}
}
~SaveFileHelper() { printf("Saved '%s'.\n", mFilePath.c_str()); }
template <typename T>
SaveFileHelper &operator<<(const T &value)
{
mOfs << value;
if (mOfs.bad())
{
FATAL() << "Error writing to " << mFilePath;
}
return *this;
}
void write(const uint8_t *data, size_t size)
{
mOfs.write(reinterpret_cast<const char *>(data), size);
}
private:
std::ofstream mOfs;
std::string mFilePath;
};
std::string GetBinaryDataFilePath(bool compression, const std::string &captureLabel)
{
std::stringstream fnameStream;

View File

@@ -8,9 +8,10 @@
# Generates files from supported extensions data.
# NOTE: don't run this script directly. Run scripts/run_code_generation.py.
import json
import os
import re
import sys
import os
d = os.path.dirname
THIS_DIR = d(os.path.abspath(__file__))
@@ -178,17 +179,86 @@ TOGGLEABLE = 'enableableDisablable'
_MARKDOWN_TEMPLATE = """\
# ANGLE Supported Extensions
This is a list of all extensions currently supported by ANGLE's front-end. Back-end support is not
yet documented. To produce a list of all supported extensions in the Vulkan back-end, run
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`.
This list is automatically generated by {script_name} using data from {data_source_name}.
This list is automatically generated by [`{script_name}`](../src/libANGLE/gen_extensions.py)
using data from {data_source_name}.
| Extension Name |
| -------------- |
{md_exts}
## 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.*
{gles_md_table_header}
{gles_md_exts}
## ANGLE unofficial extension support
*Note: some ANGLE extensions are currently missing specifications.*
{angle_md_table_header}
{angle_md_exts}
## GLES 1.0 and 1.1 extension support
{gles1_md_table_header}
{gles1_md_exts}
{md_gpu_info}
## How to update supported extension data
Supported extension data is stored in the ANGLE repo as JSON files in
[`scripts/extension_data`](../scripts/extension_data). The JSON data is
sourced from public ANGLE test runs. Look for `angle_end2end_tests` in a bot
run: [example link]
(https://ci.chromium.org/ui/p/angle/builders/ci/win-clang-x64-rel/8183/overview).
Search for "`angle_end2end_tests`", then click on the "cas output" and find
`GLinfo_ES3_2_Vulkan.json`. Copy and paste the file contents into a file in
the folder above.
To update or add a new configuration, first retrieve the JSON data, modify
[`gen_extensions.py`](../src/libANGLE/gen_extensions.py) if necessary, then
run [`scripts/run_code_generation.py`](../scripts/run_code_generation.py) to
refresh generated files.
"""
_MD_GLES_GPU_CONFIGS = [
'NVIDIA P400 Win10',
'Intel 630 Win10',
'NVIDIA P400 Linux',
'Intel 630 Linux',
'SwiftShader Win10',
'Pixel 4 Android 11',
]
_MD_GLES1_GPU_CONFIGS = [
'SwiftShader Win10',
]
_MD_TABLE_HEADER_TEMPLATE = """\
| Extension Name | {configs} |
| -------------- | {dashes} |"""
_MD_CONFIG_INFO_TEMPLATE = """\
{config}:
* `GL_RENDERER` is `{Renderer}`
* `GL_VENDOR` is `{Vendor}`
* `GL_VERSION` is `{Version}`
* Data updated {DateRecorded}
"""
_MD_GLES_EXT_LINK_TEMPLATE = """[{full_name}](https://khronos.org/registry/OpenGL/extensions/{vendor}/{vendor}_{link}.txt)"""
_MD_ANGLE_EXT_LINK_TEMPLATE = """[{full_name}](https://chromium.googlesource.com/angle/angle/+/refs/heads/main/extensions/{vendor}_{link}.txt)"""
# Some extensions are defined in documents that have different names.
_LINK_OVERRIDES = {
'GL_EXT_memory_object_fd': 'external_objects_fd',
'GL_EXT_semaphore_fd': 'external_objects_fd',
}
def get_camel_case(name_with_underscores):
""" To follow ANGLE naming for member variables, we convert the canonical extension:
@@ -211,6 +281,7 @@ def break_down_ext(ext, expr, mode):
'name_with_underscores': m.group(3),
'name_camel_case': get_camel_case(m.group(3)),
'mode': mode,
'link': _LINK_OVERRIDES.get(ext, m.group(3)),
}
@@ -244,14 +315,57 @@ def sort_by_ext_name(ext_infos):
return sorted(ext_infos, key=lambda e: e['name_camel_case'].lower())
def get_ext_support(ext_name, gpu_data):
def s(ext, support):
CHECKMARK = '&#10004;'
CROSS = '&#10060;'
return CHECKMARK if ext in support['Extensions'] else CROSS
return ' | '.join([s(ext_name, support) for support in gpu_data])
def get_md_table_header(md_gpu_configs):
configs = ' | '.join(md_gpu_configs)
dashes = ' | '.join([(':%s:' % ('-' * (len(config) - 2))) for config in md_gpu_configs])
return _MD_TABLE_HEADER_TEMPLATE.format(configs=configs, dashes=dashes)
def format_md_gpu_info(gpu_data):
return _MD_CONFIG_INFO_TEMPLATE.format(**gpu_data)
def format_md_link(ext_info, link_template):
return link_template.format(**ext_info)
def format_md_ext(ext_info, gpu_json_data, link_template):
return '| %s | %s |' % (format_md_link(
ext_info, link_template), get_ext_support(ext_info['full_name'], gpu_json_data))
def format_md_exts(ext_infos, gpu_json_data, link_template):
return '\n'.join(
[format_md_ext(ext_info, gpu_json_data, link_template) for ext_info in ext_infos])
def main():
# auto_script parameters.
data_source_name = 'registry_xml.py and gl.xml'
gles_h_output_name = 'gles_extensions_autogen.h'
gles_cpp_output_name = 'gles_extensions_autogen.cpp'
md_output_name = '../../doc/SupportedExtensions.md'
ext_jsons = [
'../../scripts/extension_data/%s.json' % s.lower().replace(' ', '_')
for s in _MD_GLES_GPU_CONFIGS
]
gles1_ext_jsons = [
'../../scripts/extension_data/%s_gles1.json' % s.lower().replace(' ', '_')
for s in _MD_GLES1_GPU_CONFIGS
]
if len(sys.argv) > 1:
inputs = ['../../scripts/%s' % xml_input for xml_input in registry_xml.xml_inputs]
inputs = ['../../scripts/%s' % xml_input for xml_input in registry_xml.xml_inputs
] + ext_jsons + gles1_ext_jsons
outputs = [gles_h_output_name, gles_cpp_output_name, md_output_name]
if sys.argv[1] == 'inputs':
print(','.join(inputs))
@@ -298,8 +412,24 @@ def main():
helper_functions = '\n'.join(helper_function_data)
sorted_names = sorted([ext_info['full_name'] for ext_info in ext_infos])
md_exts = '\n'.join(['| `%s` |' % full_name for full_name in sorted_names])
gles_gpu_data = []
for (gpu_config, ext_json) in zip(_MD_GLES_GPU_CONFIGS, ext_jsons):
with open(ext_json) as f:
config_support = json.loads(f.read())
config_support['config'] = gpu_config
gles_gpu_data.append(config_support)
gles1_gpu_data = []
for (gpu_config, ext_json) in zip(_MD_GLES1_GPU_CONFIGS, gles1_ext_jsons):
with open(ext_json) as f:
config_support = json.loads(f.read())
config_support['config'] = gpu_config
gles1_gpu_data.append(config_support)
gles_md_exts = format_md_exts(gles_ext_infos, gles_gpu_data, _MD_GLES_EXT_LINK_TEMPLATE)
angle_md_exts = format_md_exts(angle_ext_infos, gles_gpu_data, _MD_ANGLE_EXT_LINK_TEMPLATE)
gles1_md_exts = format_md_exts(gles1_ext_infos, gles1_gpu_data, _MD_GLES_EXT_LINK_TEMPLATE)
md_gpu_info = [format_md_gpu_info(gpu_data) for gpu_data in gles_gpu_data]
format_args = {
'script_name': os.path.basename(__file__),
@@ -312,7 +442,13 @@ def main():
'angle_strings': format_ext_strings(angle_ext_infos),
'gles_strings': format_ext_strings(gles_ext_infos),
'gles1_strings': format_ext_strings(gles1_ext_infos),
'md_exts': md_exts,
'gles_md_table_header': get_md_table_header(_MD_GLES_GPU_CONFIGS),
'gles_md_exts': gles_md_exts,
'angle_md_table_header': get_md_table_header(_MD_GLES_GPU_CONFIGS),
'angle_md_exts': angle_md_exts,
'gles1_md_table_header': get_md_table_header(_MD_GLES1_GPU_CONFIGS),
'gles1_md_exts': gles1_md_exts,
'md_gpu_info': '\n'.join(md_gpu_info),
}
write_file(gles_h_output_name, _GLES_EXTENSIONS_TEMPLATE, format_args)

View File

@@ -251,6 +251,10 @@ if (is_win || is_linux || is_chromeos || is_android || is_fuchsia || is_apple) {
"$angle_root:angle_image_util",
]
if (angle_has_rapidjson) {
deps += [ "$angle_root:angle_json_serializer" ]
}
if (is_android) {
include_dirs += [ "${android_ndk_root}/sysroot/usr/includes" ]
}

View File

@@ -547,7 +547,8 @@ void dEQPTest<TestModuleIndex>::SetUpTestCase()
logNameStream << ".qpa";
std::stringstream logArgStream;
logArgStream << "--deqp-log-filename=" << testSuite->addTestArtifact(logNameStream.str());
logArgStream << "--deqp-log-filename="
<< testSuite->reserveTestArtifactPath(logNameStream.str());
std::string logNameString = logArgStream.str();
argv.push_back(logNameString.c_str());

View File

@@ -11,6 +11,11 @@
#include "common/string_utils.h"
#include "test_utils/ANGLETest.h"
#include "test_utils/runner/TestSuite.h"
#if defined(ANGLE_HAS_RAPIDJSON)
# include "common/serializer/JsonSerializer.h"
#endif // defined(ANGLE_HAS_RAPIDJSON)
using namespace angle;
@@ -100,12 +105,47 @@ TEST_P(EGLPrintEGLinfoTest, PrintGLInfo)
std::cout << "\tShader: " << GetGLString(GL_SHADING_LANGUAGE_VERSION) << std::endl;
std::cout << "\tExtensions:" << std::endl;
for (auto extension : ParseExtensions(GetGLString(GL_EXTENSIONS)))
const std::vector<std::string> extensions = ParseExtensions(GetGLString(GL_EXTENSIONS));
for (const std::string &extension : extensions)
{
std::cout << "\t\t" << extension << std::endl;
}
std::cout << std::endl;
#if defined(ANGLE_HAS_RAPIDJSON)
angle::TestSuite *testSuite = angle::TestSuite::GetInstance();
if (!testSuite->hasTestArtifactsDirectory())
{
return;
}
JsonSerializer json;
json.addCString("Vendor", GetGLString(GL_VENDOR));
json.addCString("Version", GetGLString(GL_VERSION));
json.addCString("Renderer", GetGLString(GL_RENDERER));
json.addCString("ShaderLanguageVersion", GetGLString(GL_SHADING_LANGUAGE_VERSION));
json.addVectorOfStrings("Extensions", extensions);
constexpr size_t kBufferSize = 1000;
std::array<char, kBufferSize> buffer;
std::time_t timeNow = std::time(nullptr);
std::strftime(buffer.data(), buffer.size(), "%B %e, %Y", std::localtime(&timeNow));
json.addCString("DateRecorded", buffer.data());
std::stringstream fnameStream;
fnameStream << "GLinfo_" << GetParam() << ".json";
std::string fname = fnameStream.str();
const std::string artifactPath = testSuite->reserveTestArtifactPath(fname);
{
std::vector<uint8_t> jsonData = json.getData();
SaveFileHelper saveFile(artifactPath);
saveFile.write(jsonData.data(), jsonData.size());
}
#endif // defined(ANGLE_HAS_RAPIDJSON)
}
#define QUERY_HELPER(enumValue, enumString, stream) \
@@ -316,6 +356,11 @@ TEST_P(EGLPrintEGLinfoTest, PrintGLESCapabilities)
switch (getClientMajorVersion())
{
case 1:
break;
case 2:
LogGles2Capabilities(stream);
break;
case 3:
switch (getClientMinorVersion())
{
@@ -332,9 +377,6 @@ TEST_P(EGLPrintEGLinfoTest, PrintGLESCapabilities)
FAIL() << "unknown client minor version.";
}
break;
case 2:
LogGles2Capabilities(stream);
break;
default:
FAIL() << "unknown client major version.";
}
@@ -485,7 +527,13 @@ TEST_P(EGLPrintEGLinfoTest, PrintConfigInfo)
}
}
ANGLE_INSTANTIATE_TEST(EGLPrintEGLinfoTest, ES2_VULKAN(), ES3_VULKAN(), ES32_VULKAN());
ANGLE_INSTANTIATE_TEST(EGLPrintEGLinfoTest,
ES1_VULKAN(),
ES1_VULKAN_SWIFTSHADER(),
ES2_VULKAN(),
ES3_VULKAN(),
ES32_VULKAN(),
ES31_VULKAN_SWIFTSHADER());
// This test suite is not instantiated on some OSes.
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(EGLPrintEGLinfoTest);

View File

@@ -48,6 +48,7 @@ constexpr char kTestTimeoutArg[] = "--test-timeout=";
constexpr char kDisableCrashHandler[] = "--disable-crash-handler";
constexpr char kIsolatedOutDir[] = "--isolated-outdir=";
constexpr char kMaxFailures[] = "--max-failures=";
constexpr char kRenderTestOutputDir[] = "--render-test-output-dir=";
constexpr char kStartedTestString[] = "[ RUN ] ";
constexpr char kPassedTestString[] = "[ OK ] ";
@@ -1309,6 +1310,7 @@ bool TestSuite::parseSingleArg(const char *argument)
// We need these overloads to work around technical debt in the Android test runner.
ParseStringArg("--isolated-script-test-perf-output=", argument, &mHistogramJsonFile) ||
ParseStringArg("--isolated_script_test_perf_output=", argument, &mHistogramJsonFile) ||
ParseStringArg(kRenderTestOutputDir, argument, &mTestArtifactDirectory) ||
ParseStringArg(kIsolatedOutDir, argument, &mTestArtifactDirectory) ||
ParseFlag("--bot-mode", argument, &mBotMode) ||
ParseFlag("--debug-test-groups", argument, &mDebugTestGroups) ||
@@ -1859,7 +1861,12 @@ void TestSuite::addHistogramSample(const std::string &measurement,
mHistogramWriter.addSample(measurement, story, value, units);
}
std::string TestSuite::addTestArtifact(const std::string &artifactName)
bool TestSuite::hasTestArtifactsDirectory() const
{
return !mTestArtifactDirectory.empty();
}
std::string TestSuite::reserveTestArtifactPath(const std::string &artifactName)
{
mTestResults.testArtifactPaths.push_back(artifactName);

View File

@@ -139,7 +139,8 @@ class TestSuite
static TestSuite *GetInstance() { return mInstance; }
// Returns the path to the artifact in the output directory.
std::string addTestArtifact(const std::string &artifactName);
bool hasTestArtifactsDirectory() const;
std::string reserveTestArtifactPath(const std::string &artifactName);
int getShardIndex() const { return mShardIndex; }
int getBatchId() const { return mBatchId; }