Hash :
6fddb18d
Author :
Date :
2024-07-26T12:44:23
GL: Disable heavily emulated extensions for non-WebGL. The multidraw and base vertex base instance extensions are heavily emulated in ANGLE's GL backend, manipulating vertex arrays multiple times per draw. This is often a performance improvement for deep pipelines such as WebGL but slower for shallow stacks like Chrome's rasterization. Mark these extensions as "emulated" and disable them in the frontend for non-WebGL contexts. Only EXT_base_instance can have true native support. Add a frontend feature to re-enable these extensions and use it in the existing end2end tests. Bug: angleproject:355645824 Change-Id: I897559fb270e2aa0f476d7784d25d97574e28f43 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5743837 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
{
"description": [
"Copyright 2022 The ANGLE Project Authors. All rights reserved.",
"Use of this source code is governed by a BSD-style license that can be",
"found in the LICENSE file.",
"",
"frontend_features.json: Features/workarounds for driver bugs and other behaviors seen",
"on all platforms."
],
"features": [
{
"name": "lose_context_on_out_of_memory",
"category": "Workarounds",
"description": [
"Some users rely on a lost context notification if a GL_OUT_OF_MEMORY error occurs"
]
},
{
"name": "disable_program_caching_for_transform_feedback",
"category": "Workarounds",
"description": [
"On some GPUs, program binaries don't contain transform feedback varyings"
]
},
{
"name": "disable_program_binary",
"category": "Features",
"description": [
"Disable support for GL_OES_get_program_binary"
],
"issue": "http://anglebug.com/42263580"
},
{
"name": "disable_draw_buffers_indexed",
"category": "Features",
"description": [
"Disable support for OES_draw_buffers_indexed and EXT_draw_buffers_indexed"
],
"issue": "http://anglebug.com/42266194"
},
{
"name": "disable_anisotropic_filtering",
"category": "Workarounds",
"description": [
"Disable support for anisotropic filtering"
]
},
{
"name": "allow_compressed_formats",
"category": "Workarounds",
"description": [
"Allow compressed formats"
]
},
{
"name": "single_threaded_texture_decompression",
"category": "Workarounds",
"description": [
"Disables multi-threaded decompression of compressed texture formats"
]
},
{
"name": "force_depth_attachment_init_on_clear",
"category": "Workarounds",
"description": [
"Force depth attachment initialization on clear ops"
],
"issue": "https://anglebug.com/42265720"
},
{
"name": "enable_capture_limits",
"category": "Features",
"description": [
"Set the context limits like frame capturing was enabled"
],
"issue": "http://anglebug.com/42264287"
},
{
"name": "force_robust_resource_init",
"category": "Features",
"description": [
"Force-enable robust resource init"
],
"issue": "http://anglebug.com/42264571"
},
{
"name": "force_init_shader_variables",
"category": "Features",
"description": [
"Force-enable shader variable initialization"
]
},
{
"name": "enable_program_binary_for_capture",
"category": "Features",
"description": [
"Even if FrameCapture is enabled, enable GL_OES_get_program_binary"
],
"issue": "http://anglebug.com/42264193"
},
{
"name": "force_gl_error_checking",
"category": "Features",
"description": [
"Force GL error checking (i.e. prevent applications from disabling error checking"
],
"issue": "https://issuetracker.google.com/220069903"
},
{
"name": "emulate_pixel_local_storage",
"category": "Features",
"description": [
"Emulate ANGLE_shader_pixel_local_storage using shader images"
],
"issue": "http://anglebug.com/40096838"
},
{
"name": "cache_compiled_shader",
"category": "Features",
"description": [
"Enable to cache compiled shaders"
],
"issue": "http://anglebug.com/42265509"
},
{
"name": "dump_shader_source",
"category": "Features",
"description": [
"Write shader source to temp directory"
],
"issue": "http://anglebug.com/42266231"
},
{
"name": "enable_shader_substitution",
"category": "Workarounds",
"description": [
"Check the filesystem for shaders to use instead of those provided through glShaderSource"
],
"issue": "http://anglebug.com/42266232"
},
{
"name": "disable_program_caching",
"category": "Features",
"description": [
"Disables saving programs to the cache"
],
"issue": "http://anglebug.com/1423136"
},
{
"name": "dump_translated_shaders",
"category": "Features",
"description": [
"Write translated shaders to temp directory"
],
"issue": "http://anglebug.com/40644912"
},
{
"name": "enable_translated_shader_substitution",
"category": "Workarounds",
"description": [
"Check the filesystem for translated shaders to use instead of the shader translator's"
],
"issue": "http://anglebug.com/40644912"
},
{
"name": "compile_job_is_thread_safe",
"category": "Features",
"description": [
"If false, parts of the compile job cannot be parallelized"
],
"issue": "http://anglebug.com/41488637"
},
{
"name": "link_job_is_thread_safe",
"category": "Features",
"description": [
"If false, parts of the link job cannot be parallelized"
],
"issue": "http://anglebug.com/41488637"
},
{
"name": "always_run_link_sub_jobs_threaded",
"category": "Features",
"description": [
"If true, sub tasks of the link job are always threaded, regardless of GL_KHR_parallel_shader_compile"
],
"issue": "http://anglebug.com/42266842"
},
{
"name": "uncurrent_egl_surface_upon_surface_destroy",
"category": "Workarounds",
"description": [
"Make egl surface uncurrent when calling eglDestroySurface(), if the surface is still bound by the context of current render thread"
],
"issue": "https://issuetracker.google.com/292285899"
},
{
"name": "force_minimum_max_vertex_attributes",
"category": "Features",
"description": [
"Force the minimum GL_MAX_VERTEX_ATTRIBS that the context's client version allows."
],
"issue": ""
},
{
"name": "force_flush_after_drawcall_using_shadowmap",
"category": "Workarounds",
"description": [
"Force flush after drawcall use shadow map for intel device."
],
"issue": "https://issuetracker.google.com/349489248"
},
{
"name": "reject_webgl_shaders_with_undefined_behavior",
"category": "Workarounds",
"description": [
"Attempts to detect undefined behavior when in WebGL mode and reject shaders if any detected."
],
"issue": "http://crbug.com/350528343"
},
{
"name": "always_enable_emulated_multidraw_extensions",
"category": "Workarounds",
"description": [
"Enable multi-draw and base vertex base instance extensions for non-WebGL contexts if they are emulated."
],
"issue": "http://anglebug.com/355645824"
}
]
}