19#include <unordered_map>
24#if defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_IOS)
25#define DEFAULT_GPU_CONFIG "gles"
27#define DEFAULT_GPU_CONFIG "gl"
32#if SK_ANGLE && defined(SK_BUILD_FOR_WIN)
37#undef DEFAULT_GPU_CONFIG
45 {
"gl",
"gpu",
"api=gl" },
46 {
"glf16",
"gpu",
"api=gl,color=f16" },
47 {
"glf16norm",
"gpu",
"api=gl,color=f16norm" },
48 {
"glsrgba",
"gpu",
"api=gl,color=srgba" },
49 {
"gl1010102",
"gpu",
"api=gl,color=1010102" },
50 {
"gles",
"gpu",
"api=gles" },
51 {
"glesf16",
"gpu",
"api=gles,color=f16" },
52 {
"glessrgba",
"gpu",
"api=gles,color=srgba" },
53 {
"gles1010102",
"gpu",
"api=gles,color=1010102" },
54 {
"glesfakev2",
"gpu",
"api=glesfakev2" },
55 {
"gldmsaa",
"gpu",
"api=gl,dmsaa=true" },
56 {
"glesdmsaa",
"gpu",
"api=gles,dmsaa=true" },
57 {
"glmsaa4",
"gpu",
"api=gl,samples=4" },
58 {
"glmsaa8" ,
"gpu",
"api=gl,samples=8" },
59 {
"glesmsaa4",
"gpu",
"api=gles,samples=4" },
60 {
"glbetex",
"gpu",
"api=gl,surf=betex" },
61 {
"glesbetex",
"gpu",
"api=gles,surf=betex" },
62 {
"glbert",
"gpu",
"api=gl,surf=bert" },
63 {
"glesbert",
"gpu",
"api=gles,surf=bert" },
64 {
"gl4444",
"gpu",
"api=gl,color=4444" },
65 {
"gles4444",
"gpu",
"api=gles,color=4444" },
66 {
"gl565",
"gpu",
"api=gl,color=565" },
67 {
"gl888x",
"gpu",
"api=gl,color=888x" },
68 {
"gles888x",
"gpu",
"api=gles,color=888x" },
69 {
"glr8",
"gpu",
"api=gl,color=r8" },
70 {
"glnostencils",
"gpu",
"api=gl,stencils=false" },
71 {
"gldft",
"gpu",
"api=gl,dit=true" },
72 {
"glesdft",
"gpu",
"api=gles,dit=true" },
73 {
"glslug",
"gpu",
"api=gl,slug=true" },
74 {
"glserializeslug",
"gpu",
"api=gl,serializeSlug=true" },
75 {
"glremoteslug",
"gpu",
"api=gl,remoteSlug=true" },
76 {
"gltestpersistentcache",
"gpu",
"api=gl,testPersistentCache=1" },
77 {
"gltestglslcache",
"gpu",
"api=gl,testPersistentCache=2" },
78 {
"gltestprecompile",
"gpu",
"api=gl,testPrecompile=true" },
79 {
"glestestprecompile",
"gpu",
"api=gles,testPrecompile=true" },
80 {
"glddl",
"gpu",
"api=gl,useDDLSink=true" },
81 {
"glreducedshaders",
"gpu",
"api=gl,reducedShaders=true" },
82 {
"glesreducedshaders",
"gpu",
"api=gles,reducedShaders=true" },
83 {
"angle_d3d11_es2",
"gpu",
"api=angle_d3d11_es2" },
84 {
"angle_d3d11_es3",
"gpu",
"api=angle_d3d11_es3" },
85 {
"angle_d3d9_es2",
"gpu",
"api=angle_d3d9_es2" },
86 {
"angle_d3d11_es2_msaa4",
"gpu",
"api=angle_d3d11_es2,samples=4" },
87 {
"angle_d3d11_es2_msaa8",
"gpu",
"api=angle_d3d11_es2,samples=8" },
88 {
"angle_d3d11_es2_dmsaa",
"gpu",
"api=angle_d3d11_es2,dmsaa=true" },
89 {
"angle_d3d11_es3_msaa4",
"gpu",
"api=angle_d3d11_es3,samples=4" },
90 {
"angle_d3d11_es3_msaa8",
"gpu",
"api=angle_d3d11_es3,samples=8" },
91 {
"angle_d3d11_es3_dmsaa",
"gpu",
"api=angle_d3d11_es3,dmsaa=true" },
92 {
"angle_gl_es2",
"gpu",
"api=angle_gl_es2" },
93 {
"angle_gl_es3",
"gpu",
"api=angle_gl_es3" },
94 {
"angle_gl_es2_msaa4",
"gpu",
"api=angle_gl_es2,samples=4" },
95 {
"angle_gl_es2_msaa8",
"gpu",
"api=angle_gl_es2,samples=8" },
96 {
"angle_gl_es2_dmsaa",
"gpu",
"api=angle_gl_es2,dmsaa=true" },
97 {
"angle_gl_es3_msaa4",
"gpu",
"api=angle_gl_es3,samples=4" },
98 {
"angle_gl_es3_msaa8",
"gpu",
"api=angle_gl_es3,samples=8" },
99 {
"angle_gl_es3_dmsaa",
"gpu",
"api=angle_gl_es3,dmsaa=true" },
100 {
"angle_mtl_es2",
"gpu",
"api=angle_mtl_es2" },
101 {
"angle_mtl_es3",
"gpu",
"api=angle_mtl_es3" },
102 {
"mock",
"gpu",
"api=mock" },
104 {
"vk",
"gpu",
"api=vulkan" },
105 {
"vkf16",
"gpu",
"api=vulkan,color=f16" },
106 {
"vk1010102",
"gpu",
"api=vulkan,color=1010102" },
107 {
"vkdmsaa",
"gpu",
"api=vulkan,dmsaa=true" },
108 {
"vknostencils",
"gpu",
"api=vulkan,stencils=false" },
109 {
"vkmsaa4",
"gpu",
"api=vulkan,samples=4" },
110 {
"vkmsaa8",
"gpu",
"api=vulkan,samples=8" },
111 {
"vkbetex",
"gpu",
"api=vulkan,surf=betex" },
112 {
"vkbert",
"gpu",
"api=vulkan,surf=bert" },
113 {
"vktestpersistentcache",
"gpu",
"api=vulkan,testPersistentCache=1" },
114 {
"vkddl",
"gpu",
"api=vulkan,useDDLSink=true" },
117 {
"mtl",
"gpu",
"api=metal" },
118 {
"mtlf16",
"gpu",
"api=metal,color=f16" },
119 {
"mtlf16norm",
"gpu",
"api=metal,color=f16norm" },
120 {
"mtlsrgba",
"gpu",
"api=metal,color=srgba"},
121 {
"mtl1010102",
"gpu",
"api=metal,color=1010102" },
122 {
"mtl_dmsaa",
"gpu",
"api=metal,dmsaa=true" },
123 {
"mtlmsaa4",
"gpu",
"api=metal,samples=4" },
124 {
"mtlmsaa8",
"gpu",
"api=metal,samples=8" },
125 {
"mtlddl",
"gpu",
"api=metal,useDDLSink=true" },
126 {
"mtltestprecompile",
"gpu",
"api=metal,testPrecompile=true" },
127 {
"mtlreducedshaders",
"gpu",
"api=metal,reducedShaders=true" },
130 {
"d3d",
"gpu",
"api=direct3d" },
131 {
"d3dmsaa4",
"gpu",
"api=direct3d,samples=4" },
132 {
"d3dmsaa8",
"gpu",
"api=direct3d,samples=8" },
135#if defined(SK_GRAPHITE)
137 {
"grd3d",
"graphite",
"api=direct3d" },
140 {
"grdawn_fakeWGPU",
"graphite",
"api=dawn_mtl,fakeWGPU=true" },
141 {
"grdawn_d3d11",
"graphite",
"api=dawn_d3d11" },
142 {
"grdawn_d3d12",
"graphite",
"api=dawn_d3d12" },
143 {
"grdawn_mtl",
"graphite",
"api=dawn_mtl" },
144 {
"grdawn_vk",
"graphite",
"api=dawn_vk" },
145 {
"grdawn_gl",
"graphite",
"api=dawn_gl" },
146 {
"grdawn_gles",
"graphite",
"api=dawn_gles" },
147#if defined(SK_ENABLE_PRECOMPILE)
148 {
"grdawn_mtlprecompile",
"graphite",
"api=dawn_mtl,precompile=true" },
149 {
"grdawn_vkprecompile",
"graphite",
"api=dawn_vk, precompile=true" },
153 {
"grmtl",
"graphite",
"api=metal" },
154 {
"grmtlf16",
"graphite",
"api=metal,color=f16" },
155 {
"grmtlf16norm",
"graphite",
"api=metal,color=f16norm" },
156 {
"grmtlsrgba",
"graphite",
"api=metal,color=srgba"},
157 {
"grmtl1010102",
"graphite",
"api=metal,color=1010102" },
158#if defined(SK_ENABLE_PRECOMPILE)
159 {
"grmtlprecompile",
"graphite",
"api=metal,precompile=true" },
160 {
"grmtlprecompilef16",
"graphite",
"api=metal,precompile=true,color=f16" },
161 {
"grmtlprecompile1010102",
"graphite",
"api=metal,precompile=true,color=1010102" },
165 {
"grvk",
"graphite",
"api=vulkan" },
166#if defined(SK_ENABLE_PRECOMPILE)
167 {
"grvkprecompile",
"graphite",
"api=vulkan,precompile=true" },
176 "Options: 565 4444 8888 rgba bgra rgbx 1010102 101010x bgra1010102 bgr101010x f16 f16norm "
177 "f32 nonrendering null pdf pdfa pdf300 skp svg xps";
183 helpString.
appendf(
" %s", config.predefinedConfig);
185 helpString.
append(
" or use extended form 'backend[option=value,...]'.\n");
186 return helpString.
c_str();
190 "Extended form: 'backend(option=value,...)'\n\n"
191 "Possible backends and options:\n"
193 "gpu[api=string,color=string,dit=bool,dmsaa=bool,samples=int]\n"
194 "\tapi\ttype: string\trequired\n"
195 "\t Select graphics API to use with gpu backend.\n"
197 "\t\tgl \t\t\tUse OpenGL.\n"
198 "\t\tgles \t\t\tUse OpenGL ES.\n"
199 "\t\tglesfakev2 \t\t\tUse OpenGL ES with version faked as 2.0.\n"
200 "\t\tnullgl \t\t\tUse null OpenGL.\n"
201 "\t\tangle_d3d9_es2\t\tUse OpenGL ES2 on the ANGLE Direct3D9 backend.\n"
202 "\t\tangle_d3d11_es2\t\tUse OpenGL ES2 on the ANGLE Direct3D11 backend.\n"
203 "\t\tangle_d3d11_es3\t\tUse OpenGL ES3 on the ANGLE Direct3D11 backend.\n"
204 "\t\tangle_gl_es2\t\tUse OpenGL ES2 on the ANGLE OpenGL backend.\n"
205 "\t\tangle_gl_es3\t\tUse OpenGL ES3 on the ANGLE OpenGL backend.\n"
206 "\t\tmock\t\t\tUse mock context.\n"
208 "\t\tvulkan\t\t\tUse Vulkan.\n"
211 "\t\tmetal\t\t\tUse Metal.\n"
213 "\tcolor\ttype: string\tdefault: 8888.\n"
214 "\t Select framebuffer color format.\n"
216 "\t\t8888\t\t\tLinear 8888.\n"
217 "\t\t888x\t\t\tLinear 888x.\n"
218 "\t\t4444\t\t\tLinear 4444.\n"
219 "\t\t565\t\t\tLinear 565.\n"
220 "\t\t1010102\t\t\tLinear 1010102.\n"
221 "\t\tf16\t\t\t16-bit floating point.\n"
222 "\tdit\ttype: bool\tdefault: false.\n"
223 "\t Use device independent text.\n"
224 "\tdmsaa\ttype: bool\tdefault: false.\n"
225 "\t Use internal MSAA to render to non-MSAA surfaces.\n"
226 "\tsamples\ttype: int\tdefault: 0.\n"
227 "\t Use multisampling with N samples.\n"
228 "\tstencils\ttype: bool\tdefault: true.\n"
229 "\t Allow the use of stencil buffers.\n"
230 "\t Run with and without worker threads, check that results match.\n"
231 "\ttestPersistentCache\ttype: int\tdefault: 0.\n"
232 "\t 1: Run using a pre-warmed binary GrContextOptions::fPersistentCache.\n"
233 "\t 2: Run using a pre-warmed GLSL GrContextOptions::fPersistentCache.\n"
234 "\tsurf\ttype: string\tdefault: default.\n"
235 "\t Controls the type of backing store for SkSurfaces.\n"
237 "\t\tdefault\t\t\tA renderable texture created in Skia's resource cache.\n"
238 "\t\tbetex\t\t\tA wrapped backend texture.\n"
239 "\t\tbert\t\t\tA wrapped backend render target\n"
241 "Predefined configs:\n\n"
249 helpString.
appendf(
"\t%-10s\t= gpu(%s)\n", config.predefinedConfig, config.options);
251 return helpString.
c_str();
259 : fTag(tag), fBackend(
backend) {
260 static const auto* kColorSpaces =
new std::unordered_map<std::string_view, SkColorSpace*>{
278 for (
const SkString& via : viaParts) {
279 auto it = kColorSpaces->find(via.c_str());
280 if (it == kColorSpaces->end()) {
291 if (
value.isEmpty()) {
294 char* endptr =
nullptr;
295 long intValue = strtol(
value.c_str(), &endptr, 10);
296 if (*endptr !=
'\0') {
299 *outInt =
static_cast<int>(intValue);
303 if (
value.equals(
"true")) {
307 if (
value.equals(
"false")) {
315 bool* outFakeGLESVersion2) {
316 *outFakeGLESVersion2 =
false;
317 if (
value.equals(
"gl")) {
321 if (
value.equals(
"gles")) {
325 if (
value.equals(
"glesfakev2")) {
327 *outFakeGLESVersion2 =
true;
330 if (
value.equals(
"angle_d3d9_es2")) {
334 if (
value.equals(
"angle_d3d11_es2")) {
338 if (
value.equals(
"angle_d3d11_es3")) {
342 if (
value.equals(
"angle_gl_es2")) {
346 if (
value.equals(
"angle_gl_es3")) {
350 if (
value.equals(
"angle_mtl_es2")) {
354 if (
value.equals(
"angle_mtl_es3")) {
358 if (
value.equals(
"mock")) {
363 if (
value.equals(
"vulkan")) {
369 if (
value.equals(
"metal")) {
375 if (
value.equals(
"direct3d")) {
389 if (
value.equals(
"8888")) {
391 }
else if (
value.equals(
"888x")) {
393 }
else if (
value.equals(
"bgra8")) {
395 }
else if (
value.equals(
"4444")) {
397 }
else if (
value.equals(
"565")) {
400 }
else if (
value.equals(
"1010102")) {
402 }
else if (
value.equals(
"f16")) {
404 }
else if (
value.equals(
"f16norm")) {
406 }
else if (
value.equals(
"srgba")) {
408 }
else if (
value.equals(
"r8")) {
419 if (
value.equals(
"default")) {
423 if (
value.equals(
"betex")) {
427 if (
value.equals(
"bert")) {
441 for (
int i = 0;
i < optionParts.
size(); ++
i) {
444 if (keyValueParts.
size() != 2) {
445 *outParseSucceeded =
false;
450 if (fOptionsMap.
find(
key) ==
nullptr) {
454 *outParseSucceeded =
false;
458 *outParseSucceeded =
true;
464 bool optional =
true)
const {
466 if (optionValue ==
nullptr) {
474 bool* outFakeGLESVersion2,
475 bool optional =
true)
const {
477 if (optionValue ==
nullptr) {
483#if defined(SK_GRAPHITE)
484 bool get_option_graphite_api(
const char* optionKey,
487 if (optionValue ==
nullptr) {
491 if (optionValue->
equals(
"dawn_d3d11")) {
495 if (optionValue->
equals(
"dawn_d3d12")) {
499 if (optionValue->
equals(
"dawn_mtl")) {
503 if (optionValue->
equals(
"dawn_vk")) {
507 if (optionValue->
equals(
"dawn_gl")) {
511 if (optionValue->
equals(
"dawn_gles")) {
517 if (optionValue->
equals(
"direct3d")) {
523 if (optionValue->
equals(
"metal")) {
529 if (optionValue->
equals(
"vulkan")) {
541 bool optional =
true)
const {
543 if (optionValue ==
nullptr) {
549 bool get_option_int(
const char* optionKey,
int* outInt,
bool optional =
true)
const {
551 if (optionValue ==
nullptr) {
557 bool get_option_bool(
const char* optionKey,
bool* outBool,
bool optional =
true)
const {
559 if (optionValue ==
nullptr) {
572 bool fakeGLESVersion2,
573 uint32_t surfaceFlags,
577 bool useStencilBuffers,
578 int testPersistentCache,
587 , fContextType(contextType)
589 , fSurfaceFlags(surfaceFlags)
593 , fTestPersistentCache(testPersistentCache)
594 , fTestPrecompile(testPrecompile)
595 , fUseDDLSink(useDDLSink)
597 , fSerializeSlug(serializeSlug)
598 , fRemoteSlug(remoteSlug)
599 , fReducedShaders(reducedShaders)
600 , fSurfType(surfType) {
601 if (!useStencilBuffers) {
604 if (fakeGLESVersion2) {
607 if (reducedShaders) {
617 bool useDIText =
false;
618 bool useDMSAA =
false;
622 bool useStencils =
true;
623 int testPersistentCache = 0;
624 bool testPrecompile =
false;
625 bool useDDLs =
false;
627 bool serializeSlug =
false;
628 bool remoteSlug =
false;
629 bool reducedShaders =
false;
630 bool fakeGLESVersion2 =
false;
633 bool parseSucceeded =
false;
635 if (!parseSucceeded) {
646 extendedOptions.
get_option_int(
"testPersistentCache", &testPersistentCache) &&
659 uint32_t surfaceFlags = 0;
686#if defined(SK_GRAPHITE)
688SkCommandLineConfigGraphite* parse_command_line_config_graphite(
const SkString& tag,
696 bool testPrecompile =
false;
700 bool parseSucceeded =
false;
702 if (!parseSucceeded) {
706 bool fakeWGPU =
false;
707 bool validOptions = extendedOptions.get_option_graphite_api(
"api", &contextType) &&
708 extendedOptions.get_option_gpu_color(
"color", &
colorType, &alphaType) &&
709 extendedOptions.get_option_bool(
"fakeWGPU", &fakeWGPU) &&
710 extendedOptions.get_option_bool(
"precompile", &testPrecompile);
718 surfaceType = SkCommandLineConfigGraphite::SurfaceType::kWrapTextureView;
721 return new SkCommandLineConfigGraphite(tag,
744 bool parseSucceeded =
false;
746 if (!parseSucceeded) {
750 bool validOptions = extendedOptions.
get_option_int(
"page", &pageIndex);
771 if (
parts.size() == 2) {
774 if (parts2.
size() == 2 && parts2[1].isEmpty()) {
777 extendedBackend = vias[vias.
size() - 1];
780 extendedBackend =
parts[0];
782 extendedOptions = parts2[0];
783 simpleBackend.
printf(
"%s[%s]", extendedBackend.
c_str(), extendedOptions.
c_str());
787 if (extendedBackend.
isEmpty()) {
791 simpleBackend = vias[vias.
size() - 1];
803 if (extendedBackend.
equals(
"gpu")) {
806#if defined(SK_GRAPHITE)
807 if (extendedBackend.
equals(
"graphite")) {
808 parsedConfig = parse_command_line_config_graphite(tag, vias, extendedOptions);
811 if (extendedBackend.
equals(
"svg")) {
static bool parse_option_gpu_color(const SkString &value, SkColorType *outColorType, SkAlphaType *alphaType)
SkCommandLineConfigGpu * parse_command_line_config_gpu(const SkString &tag, const TArray< SkString > &vias, const SkString &options)
static bool parse_option_bool(const SkString &value, bool *outBool)
static const char defaultConfigs[]
static const char * config_extended_help_fn()
const char * predefinedConfig
static const char * config_help_fn()
SkCommandLineConfigSvg * parse_command_line_config_svg(const SkString &tag, const TArray< SkString > &vias, const SkString &options)
void ParseConfigs(const CommandLineFlags::StringArray &configs, SkCommandLineConfigArray *outResult)
static const struct @440 gPredefinedConfigs[]
static const char configHelp[]
DEFINE_extended_string(config, defaultConfigs, config_help_fn(), config_extended_help_fn())
static const char configExtendedHelp[]
static bool parse_option_gpu_api(const SkString &value, SkCommandLineConfigGpu::ContextType *outContextType, bool *outFakeGLESVersion2)
static bool parse_option_gpu_surf_type(const SkString &value, SkCommandLineConfigGpu::SurfType *surfType)
static bool parse_option_int(const SkString &value, int *outInt)
#define DEFAULT_GPU_CONFIG
sk_gpu_test::GrContextFactory::ContextType ContextType
@ kOpaque_SkAlphaType
pixel is opaque
@ kPremul_SkAlphaType
pixel components are premultiplied by alpha
static constexpr skcms_Matrix3x3 gNarrow_toXYZD50
@ kARGB_4444_SkColorType
pixel with 4 bits for alpha, red, green, blue; in 16-bit word
@ kBGRA_8888_SkColorType
pixel with 8 bits for blue, green, red, alpha; in 32-bit word
@ kRGBA_F16_SkColorType
pixel with half floats for red, green, blue, alpha;
@ kSRGBA_8888_SkColorType
@ kRGB_565_SkColorType
pixel with 5 bits red, 6 bits green, 5 bits blue, in 16-bit word
@ kRGBA_8888_SkColorType
pixel with 8 bits for red, green, blue, alpha; in 32-bit word
@ kRGB_888x_SkColorType
pixel with 8 bits each for red, green, blue; in 32-bit word
@ kRGBA_1010102_SkColorType
10 bits for red, green, blue; 2 bits for alpha; in 32-bit word
@ kRGBA_F16Norm_SkColorType
pixel with half floats in [0,1] for red, green, blue, alpha;
static SkColorType colorType(AImageDecoder *decoder, const AImageDecoderHeaderInfo *headerInfo)
sk_sp< T > sk_ref_sp(T *obj)
void SkStrSplit(const char *str, const char *delimiters, SkStrSplitMode splitMode, TArray< SkString > *out)
bool get_option_gpu_color(const char *optionKey, SkColorType *outColorType, SkAlphaType *alphaType, bool optional=true) const
bool get_option_gpu_surf_type(const char *optionKey, SkCommandLineConfigGpu::SurfType *outSurfType, bool optional=true) const
bool get_option_gpu_api(const char *optionKey, SkCommandLineConfigGpu::ContextType *outContextType, bool *outFakeGLESVersion2, bool optional=true) const
bool get_option_int(const char *optionKey, int *outInt, bool optional=true) const
ExtendedOptions(const SkString &optionsString, bool *outParseSucceeded)
bool get_option_bool(const char *optionKey, bool *outBool, bool optional=true) const
static sk_sp< SkColorSpace > MakeSRGB()
sk_sp< SkColorSpace > makeColorSpin() const
static sk_sp< SkColorSpace > MakeRGB(const skcms_TransferFunction &transferFn, const skcms_Matrix3x3 &toXYZ)
static sk_sp< SkColorSpace > MakeSRGBLinear()
SkCommandLineConfigGpu(const SkString &tag, const skia_private::TArray< SkString > &viaParts, ContextType contextType, bool fakeGLESVer2, uint32_t surfaceFlags, int samples, SkColorType colorType, SkAlphaType alphaType, bool useStencilBuffers, int testPersistentCache, bool testPrecompile, bool useDDLSink, bool slug, bool serializedSlug, bool remoteSlug, bool reducedShaders, SurfType)
SkCommandLineConfigSvg(const SkString &tag, const skia_private::TArray< SkString > &viaParts, int pageIndex)
SkCommandLineConfig(const SkString &tag, const SkString &backend, const skia_private::TArray< SkString > &viaParts)
virtual ~SkCommandLineConfig()
void printf(const char format[],...) SK_PRINTF_LIKE(2
void set(const SkString &src)
bool equals(const SkString &) const
void append(const char text[])
const char * c_str() const
void void void appendf(const char format[],...) SK_PRINTF_LIKE(2
@ kUseDeviceIndependentFonts_Flag
T & emplace_back(Args &&... args)
V * find(const K &key) const
static constexpr skcms_Matrix3x3 kRec2020
static constexpr skcms_Matrix3x3 kDisplayP3
static constexpr skcms_TransferFunction kRec2020
static constexpr skcms_TransferFunction k2Dot2
static constexpr skcms_TransferFunction kSRGB
@ kDawn_OpenGLES
Dawn on OpenGL.
@ kDawn_Metal
Dawn on Direct3D12.
@ kANGLE_GL_ES2
ANGLE on Direct3D11 OpenGL ES 3 context.
@ kDawn_D3D12
Dawn on Direct3D11.
@ kANGLE_GL_ES3
ANGLE on OpenGL OpenGL ES 2 context.
@ kANGLE_D3D11_ES2
ANGLE on Direct3D9 OpenGL ES 2 context.
@ kDawn_Vulkan
Dawn on Metal.
@ kVulkan
ANGLE on Metal ES 3 context.
@ kDawn_OpenGL
Dawn on Vulkan.
@ kDawn_D3D11
Direct3D 12.
@ kANGLE_D3D11_ES3
ANGLE on Direct3D11 OpenGL ES 2 context.
@ kANGLE_D3D9_ES2
OpenGL ES context.
@ kANGLE_Metal_ES2
ANGLE on OpenGL OpenGL ES 3 context.
@ kANGLE_Metal_ES3
ANGLE on Metal ES 2 context.
@ kMock
Dawn on OpenGL ES.