Hash :
3680a5dc
Author :
Date :
2023-11-17T13:51:07
Vulkan: Let program warmup continue passed link The warmup task does not actually affect the link results, so there is no reason to wait for it when the application queries the link status. This change allows the warm up task to continue in parallel until the program is used at draw time. This allows the warm up to be more efficient when the link itself is not parallelized. For applications that create programs in the middle of every frame, it's still likely best to disable warm up (as the following immediate draw will already effectively do the warm up). Note that currently the warm up code in the Vulkan backend is not completely thread-safe, and so the program still blocks on that task before the first draw can happen (or the program is modified in any way). Bug: angleproject:8417 Change-Id: I0877fef39a0585c3279e32699ce817d4643d7cd6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5037538 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 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
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_features.py using data from frontend_features.json.
//
// 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.
//
// FrontendFeatures_autogen.h: Features/workarounds for driver bugs and other behaviors seen
// on all platforms.
#ifndef ANGLE_PLATFORM_AUTOGEN_FRONTENDFEATURES_H_
#define ANGLE_PLATFORM_AUTOGEN_FRONTENDFEATURES_H_
#include "platform/Feature.h"
namespace angle
{
struct FrontendFeatures : FeatureSetBase
{
FrontendFeatures();
~FrontendFeatures();
FeatureInfo loseContextOnOutOfMemory = {
"loseContextOnOutOfMemory",
FeatureCategory::FrontendWorkarounds,
"Some users rely on a lost context notification if a GL_OUT_OF_MEMORY error occurs",
&members,
};
FeatureInfo disableProgramCachingForTransformFeedback = {
"disableProgramCachingForTransformFeedback",
FeatureCategory::FrontendWorkarounds,
"On some GPUs, program binaries don't contain transform feedback varyings",
&members,
};
FeatureInfo disableProgramBinary = {
"disableProgramBinary",
FeatureCategory::FrontendFeatures,
"Disable support for GL_OES_get_program_binary",
&members, "http://anglebug.com/5007"
};
FeatureInfo disableDrawBuffersIndexed = {
"disableDrawBuffersIndexed",
FeatureCategory::FrontendFeatures,
"Disable support for OES_draw_buffers_indexed and EXT_draw_buffers_indexed",
&members, "http://anglebug.com/7724"
};
FeatureInfo disableAnisotropicFiltering = {
"disableAnisotropicFiltering",
FeatureCategory::FrontendWorkarounds,
"Disable support for anisotropic filtering",
&members,
};
FeatureInfo allowCompressedFormats = {
"allowCompressedFormats",
FeatureCategory::FrontendWorkarounds,
"Allow compressed formats",
&members,
};
FeatureInfo singleThreadedTextureDecompression = {
"singleThreadedTextureDecompression",
FeatureCategory::FrontendWorkarounds,
"Disables multi-threaded decompression of compressed texture formats",
&members,
};
FeatureInfo forceDepthAttachmentInitOnClear = {
"forceDepthAttachmentInitOnClear",
FeatureCategory::FrontendWorkarounds,
"Force depth attachment initialization on clear ops",
&members, "https://anglebug.com/7246"
};
FeatureInfo enableCaptureLimits = {
"enableCaptureLimits",
FeatureCategory::FrontendFeatures,
"Set the context limits like frame capturing was enabled",
&members, "http://anglebug.com/5750"
};
FeatureInfo forceRobustResourceInit = {
"forceRobustResourceInit",
FeatureCategory::FrontendFeatures,
"Force-enable robust resource init",
&members, "http://anglebug.com/6041"
};
FeatureInfo forceInitShaderVariables = {
"forceInitShaderVariables",
FeatureCategory::FrontendFeatures,
"Force-enable shader variable initialization",
&members,
};
FeatureInfo enableProgramBinaryForCapture = {
"enableProgramBinaryForCapture",
FeatureCategory::FrontendFeatures,
"Even if FrameCapture is enabled, enable GL_OES_get_program_binary",
&members, "http://anglebug.com/5658"
};
FeatureInfo forceGlErrorChecking = {
"forceGlErrorChecking",
FeatureCategory::FrontendFeatures,
"Force GL error checking (i.e. prevent applications from disabling error checking",
&members, "https://issuetracker.google.com/220069903"
};
FeatureInfo emulatePixelLocalStorage = {
"emulatePixelLocalStorage",
FeatureCategory::FrontendFeatures,
"Emulate ANGLE_shader_pixel_local_storage using shader images",
&members, "http://anglebug.com/7279"
};
FeatureInfo cacheCompiledShader = {
"cacheCompiledShader",
FeatureCategory::FrontendFeatures,
"Enable to cache compiled shaders",
&members, "http://anglebug.com/7036"
};
FeatureInfo dumpShaderSource = {
"dumpShaderSource",
FeatureCategory::FrontendFeatures,
"Write shader source to temp directory",
&members, "http://anglebug.com/7760"
};
FeatureInfo enableShaderSubstitution = {
"enableShaderSubstitution",
FeatureCategory::FrontendWorkarounds,
"Check the filesystem for shaders to use instead of those provided through glShaderSource",
&members, "http://anglebug.com/7761"
};
FeatureInfo disableProgramCaching = {
"disableProgramCaching",
FeatureCategory::FrontendFeatures,
"Disables saving programs to the cache",
&members, "http://anglebug.com/1423136"
};
FeatureInfo dumpTranslatedShaders = {
"dumpTranslatedShaders",
FeatureCategory::FrontendFeatures,
"Write translated shaders to temp directory",
&members, "http://anglebug.com/8280"
};
FeatureInfo enableTranslatedShaderSubstitution = {
"enableTranslatedShaderSubstitution",
FeatureCategory::FrontendWorkarounds,
"Check the filesystem for translated shaders to use instead of the shader translator's",
&members, "http://anglebug.com/8280"
};
FeatureInfo compileJobIsThreadSafe = {
"compileJobIsThreadSafe",
FeatureCategory::FrontendFeatures,
"If false, parts of the compile job cannot be parallelized",
&members, "http://anglebug.com/8297"
};
FeatureInfo linkJobIsThreadSafe = {
"linkJobIsThreadSafe",
FeatureCategory::FrontendFeatures,
"If false, parts of the link job cannot be parallelized",
&members, "http://anglebug.com/8297"
};
FeatureInfo alwaysRunLinkSubJobsThreaded = {
"alwaysRunLinkSubJobsThreaded",
FeatureCategory::FrontendFeatures,
"If true, sub tasks of the link job are always threaded, regardless of GL_KHR_parallel_shader_compile",
&members, "http://anglebug.com/8417"
};
FeatureInfo uncurrentEglSurfaceUponSurfaceDestroy = {
"uncurrentEglSurfaceUponSurfaceDestroy",
FeatureCategory::FrontendWorkarounds,
"Make egl surface uncurrent when calling eglDestroySurface(), if the surface is still bound by the context of current render thread",
&members, "https://issuetracker.google.com/292285899"
};
FeatureInfo forceMinimumMaxVertexAttributes = {
"forceMinimumMaxVertexAttributes",
FeatureCategory::FrontendFeatures,
"Force the minimum GL_MAX_VERTEX_ATTRIBS that the context's client version allows.",
&members, ""
};
};
inline FrontendFeatures::FrontendFeatures() = default;
inline FrontendFeatures::~FrontendFeatures() = default;
} // namespace angle
#endif // ANGLE_PLATFORM_AUTOGEN_FRONTENDFEATURES_H_