blob: e24c019dc83622ea21bee5c20668980ffd139f63 [file] [log] [blame]
kkinnunen3e980c32015-12-23 01:33:00 -08001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkCommonFlagsConfig.h"
msarett7802c3d2016-09-28 11:15:27 -07009#include "SkColorSpace_Base.h"
kkinnunen3e980c32015-12-23 01:33:00 -080010#include "Test.h"
11#include <initializer_list>
12
bsalomon3724e572016-03-30 18:56:19 -070013using sk_gpu_test::GrContextFactory;
14
kkinnunen3e980c32015-12-23 01:33:00 -080015namespace {
16// The code
17// SkCommandLineFlags::StringArray FLAGS_config1 = make_string_array({"a", "b"})
18// can be used to construct string array that one gets with command line flags.
19// For example, the call above is equivalent of
20// DEFINE_string(config1, "a b", "");
21// in cases where the default command line flag value ("a b") is used.
22// make_string_array can be used to construct StringArray strings that have spaces in
23// them.
24SkCommandLineFlags::StringArray make_string_array(std::initializer_list<const char*> strings) {
25 SkTArray<SkString> array;
26 for (auto& s : strings) {
27 array.push_back(SkString(s));
28 }
29 return SkCommandLineFlags::StringArray(array);
30}
31}
32DEF_TEST(ParseConfigs_Gpu, reporter) {
33 // Parses a normal config and returns correct "tag".
Brian Salomon6405e712017-03-20 08:54:16 -040034 // Simple GL config works
35 SkCommandLineFlags::StringArray config1 = make_string_array({"gl"});
kkinnunen3e980c32015-12-23 01:33:00 -080036 SkCommandLineConfigArray configs;
37 ParseConfigs(config1, &configs);
38
39 REPORTER_ASSERT(reporter, configs.count() == 1);
Brian Salomon6405e712017-03-20 08:54:16 -040040 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gl"));
kkinnunen3e980c32015-12-23 01:33:00 -080041 REPORTER_ASSERT(reporter, configs[0]->getViaParts().count() == 0);
42#if SK_SUPPORT_GPU
43 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu());
44 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getContextType()
Brian Salomon6405e712017-03-20 08:54:16 -040045 == GrContextFactory::kGL_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -080046 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseNVPR() == false);
csmartdaltone0d36292016-07-29 08:14:20 -070047 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseInstanced() == false);
kkinnunen3e980c32015-12-23 01:33:00 -080048 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseDIText() == false);
49 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSamples() == 0);
bsalomon33069252016-09-28 08:49:53 -070050 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
brianosmanb109b8c2016-06-16 13:03:24 -070051 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getColorSpace() == nullptr);
kkinnunen3e980c32015-12-23 01:33:00 -080052#endif
53}
54
55DEF_TEST(ParseConfigs_OutParam, reporter) {
56 // Clears the out parameter.
Brian Salomon6405e712017-03-20 08:54:16 -040057 SkCommandLineFlags::StringArray config1 = make_string_array({"gles"});
kkinnunen3e980c32015-12-23 01:33:00 -080058 SkCommandLineConfigArray configs;
59 ParseConfigs(config1, &configs);
60 REPORTER_ASSERT(reporter, configs.count() == 1);
Brian Salomon6405e712017-03-20 08:54:16 -040061 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gles"));
bsalomonb8797bb2016-04-05 08:49:38 -070062
kkinnunen3e980c32015-12-23 01:33:00 -080063 SkCommandLineFlags::StringArray config2 = make_string_array({"8888"});
64 ParseConfigs(config2, &configs);
65 REPORTER_ASSERT(reporter, configs.count() == 1);
66 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("8888"));
bsalomonb8797bb2016-04-05 08:49:38 -070067
68 SkCommandLineFlags::StringArray config3 = make_string_array({"gl"});
69 ParseConfigs(config3, &configs);
70 REPORTER_ASSERT(reporter, configs.count() == 1);
71 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gl"));
kkinnunen3e980c32015-12-23 01:33:00 -080072}
73
74DEF_TEST(ParseConfigs_DefaultConfigs, reporter) {
75 // Parses all default configs and returns correct "tag".
76
77 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon8fe24272017-07-07 12:56:11 -040078 "565",
79 "8888",
80 "debuggl",
81 "gl",
82 "gldft",
83 "nullgl",
84 "glmsaa8",
85 "glmsaa4",
86 "nonrendering",
87 "nullgl",
88 "gles",
89 "glnvpr8",
90 "glnvpr4",
91 "glnvprdit8",
92 "glesnvprdit4",
93 "pdf",
94 "skp",
95 "svg",
96 "xps",
97 "angle_d3d11_es2",
98 "angle_gl_es2",
99 "commandbuffer",
100 "mesa",
101 "hwui",
102 "glf16",
103 "glessrgb",
104 "gl",
105 "glnvpr4",
106 "glnvprdit4",
107 "glsrgb",
108 "glmsaa4",
109 "vk",
110 "glinst",
111 "glinst4",
112 "glinstdit4",
113 "glinst8",
114 "glinstdit8",
115 "glesinst",
116 "glesinst4",
117 "glesinstdit4",
118 "glwide",
119 "glnarrow",
120 "glnostencils",
Greg Daniel2811aa22017-07-13 15:34:56 -0400121 "mock",
Brian Salomonce5ee602017-07-17 11:31:31 -0400122 "mtl",
123 "gl4444",
124 "gl565"
kkinnunen3e980c32015-12-23 01:33:00 -0800125 });
126
127 SkCommandLineConfigArray configs;
128 ParseConfigs(config1, &configs);
129
Matt Sarett77a7a1b2017-02-07 13:56:11 -0500130 auto srgbColorSpace = SkColorSpace::MakeSRGB();
brianosmanb109b8c2016-06-16 13:03:24 -0700131
kkinnunen3e980c32015-12-23 01:33:00 -0800132 REPORTER_ASSERT(reporter, configs.count() == config1.count());
133 for (int i = 0; i < config1.count(); ++i) {
134 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
135 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() == 0);
136 }
137#if SK_SUPPORT_GPU
138 REPORTER_ASSERT(reporter, !configs[0]->asConfigGpu());
139 REPORTER_ASSERT(reporter, !configs[1]->asConfigGpu());
140 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu());
141 REPORTER_ASSERT(reporter, configs[3]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400142 REPORTER_ASSERT(reporter, configs[4]->asConfigGpu()->getUseDIText());
143 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400144 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getSamples() == 8);
Brian Salomon6405e712017-03-20 08:54:16 -0400145 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getSamples() == 4);
146 REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu());
147 REPORTER_ASSERT(reporter, configs[9]->asConfigGpu());
148 REPORTER_ASSERT(reporter, configs[10]->asConfigGpu());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400149 REPORTER_ASSERT(reporter, configs[11]->asConfigGpu()->getSamples() == 8);
Brian Salomon6405e712017-03-20 08:54:16 -0400150 REPORTER_ASSERT(reporter, configs[11]->asConfigGpu()->getUseNVPR());
151 REPORTER_ASSERT(reporter, !configs[11]->asConfigGpu()->getUseDIText());
152 REPORTER_ASSERT(reporter, configs[12]->asConfigGpu()->getSamples() == 4);
kkinnunen3e980c32015-12-23 01:33:00 -0800153 REPORTER_ASSERT(reporter, configs[12]->asConfigGpu()->getUseNVPR());
cdaltonc28afdb2016-03-29 20:05:07 -0700154 REPORTER_ASSERT(reporter, !configs[12]->asConfigGpu()->getUseDIText());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400155 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getSamples() == 8);
kkinnunen3e980c32015-12-23 01:33:00 -0800156 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getUseNVPR());
Brian Salomon6405e712017-03-20 08:54:16 -0400157 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getUseDIText());
158 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getSamples() == 4);
cdaltonc28afdb2016-03-29 20:05:07 -0700159 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getUseNVPR());
160 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getUseDIText());
Brian Salomon6405e712017-03-20 08:54:16 -0400161 REPORTER_ASSERT(reporter, !configs[15]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800162 REPORTER_ASSERT(reporter, !configs[16]->asConfigGpu());
163 REPORTER_ASSERT(reporter, !configs[17]->asConfigGpu());
164 REPORTER_ASSERT(reporter, !configs[18]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400165 REPORTER_ASSERT(reporter, !configs[23]->asConfigGpu());
166 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
167 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorSpace());
168 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorSpace()->gammaIsLinear());
raftias94888332016-10-18 10:02:51 -0700169 const SkMatrix44* srgbXYZ = as_CSB(srgbColorSpace)->toXYZD50();
170 SkASSERT(srgbXYZ);
171 const SkMatrix44* config25XYZ =
Brian Salomon6405e712017-03-20 08:54:16 -0400172 as_CSB(configs[24]->asConfigGpu()->getColorSpace())->toXYZD50();
raftias94888332016-10-18 10:02:51 -0700173 SkASSERT(config25XYZ);
174 REPORTER_ASSERT(reporter, *config25XYZ == *srgbXYZ);
Brian Salomon6405e712017-03-20 08:54:16 -0400175 REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
176 REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorSpace() == srgbColorSpace.get());
177 REPORTER_ASSERT(reporter, configs[40]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
178 REPORTER_ASSERT(reporter, configs[40]->asConfigGpu()->getColorSpace());
179 REPORTER_ASSERT(reporter, configs[40]->asConfigGpu()->getColorSpace()->gammaIsLinear());
180 const SkMatrix44* config41XYZ =
181 as_CSB(configs[40]->asConfigGpu()->getColorSpace())->toXYZD50();
182 SkASSERT(config41XYZ);
183 REPORTER_ASSERT(reporter, *config41XYZ != *srgbXYZ);
184 REPORTER_ASSERT(reporter, configs[32]->asConfigGpu()->getContextType() ==
185 GrContextFactory::kGL_ContextType);
brianosman4562f6e2016-09-19 14:42:04 -0700186 REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
187 REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorSpace());
188 REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorSpace()->gammaIsLinear());
Brian Salomon6405e712017-03-20 08:54:16 -0400189 REPORTER_ASSERT(reporter, *as_CSB(configs[41]->asConfigGpu()->getColorSpace())->toXYZD50() !=
190 *as_CSB(srgbColorSpace)->toXYZD50());
Brian Salomon8fe24272017-07-07 12:56:11 -0400191 REPORTER_ASSERT(reporter, configs[42]->asConfigGpu()->getContextType() ==
192 GrContextFactory::kGL_ContextType);
193 REPORTER_ASSERT(reporter, SkToBool(configs[42]->asConfigGpu()->getContextOverrides() &
194 SkCommandLineConfigGpu::ContextOverrides::kAvoidStencilBuffers));
195 REPORTER_ASSERT(reporter, configs[43]->asConfigGpu()->getContextType() ==
196 GrContextFactory::kMock_ContextType);
Brian Salomon6405e712017-03-20 08:54:16 -0400197 REPORTER_ASSERT(reporter, configs[32]->asConfigGpu()->getUseInstanced());
raftias94888332016-10-18 10:02:51 -0700198 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getContextType() ==
199 GrContextFactory::kGL_ContextType);
csmartdaltone0d36292016-07-29 08:14:20 -0700200 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400201 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getSamples() == 4);
csmartdaltone0d36292016-07-29 08:14:20 -0700202 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getContextType() ==
203 GrContextFactory::kGL_ContextType);
204 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400205 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getUseDIText());
csmartdaltone0d36292016-07-29 08:14:20 -0700206 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getSamples() == 4);
207 REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getContextType() ==
208 GrContextFactory::kGL_ContextType);
209 REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getUseInstanced());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400210 REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getSamples() == 8);
csmartdaltone0d36292016-07-29 08:14:20 -0700211 REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getContextType() ==
212 GrContextFactory::kGL_ContextType);
213 REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400214 REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getUseDIText());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400215 REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getSamples() == 8);
csmartdaltone0d36292016-07-29 08:14:20 -0700216 REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400217 GrContextFactory::kGLES_ContextType);
csmartdaltone0d36292016-07-29 08:14:20 -0700218 REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()->getUseInstanced());
csmartdaltone0d36292016-07-29 08:14:20 -0700219 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getContextType() ==
220 GrContextFactory::kGLES_ContextType);
221 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400222 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getSamples() == 4);
csmartdaltone0d36292016-07-29 08:14:20 -0700223 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getContextType() ==
224 GrContextFactory::kGLES_ContextType);
225 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400226 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getUseDIText());
csmartdaltone0d36292016-07-29 08:14:20 -0700227 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getSamples() == 4);
Brian Salomon6405e712017-03-20 08:54:16 -0400228 REPORTER_ASSERT(reporter, configs[19]->asConfigGpu());
halcanary3c4521a2016-04-04 12:14:46 -0700229 REPORTER_ASSERT(reporter, configs[20]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800230 REPORTER_ASSERT(reporter, configs[21]->asConfigGpu());
Brian Salomonce5ee602017-07-17 11:31:31 -0400231 REPORTER_ASSERT(reporter, configs[45]->asConfigGpu()->getContextType() ==
232 GrContextFactory::kGL_ContextType);
233 REPORTER_ASSERT(reporter, configs[45]->asConfigGpu()->getColorType() == kARGB_4444_SkColorType);
234 REPORTER_ASSERT(reporter, configs[45]->asConfigGpu()->getAlphaType() == kPremul_SkAlphaType);
235 REPORTER_ASSERT(reporter, configs[46]->asConfigGpu()->getContextType() ==
236 GrContextFactory::kGL_ContextType);
237 REPORTER_ASSERT(reporter, configs[46]->asConfigGpu()->getColorType() == kRGB_565_SkColorType);
238 REPORTER_ASSERT(reporter, configs[46]->asConfigGpu()->getAlphaType() == kOpaque_SkAlphaType);
halcanary3c4521a2016-04-04 12:14:46 -0700239#if SK_MESA
cdaltonc28afdb2016-03-29 20:05:07 -0700240 REPORTER_ASSERT(reporter, configs[23]->asConfigGpu());
241#else
Brian Salomon6405e712017-03-20 08:54:16 -0400242 REPORTER_ASSERT(reporter, !configs[22]->asConfigGpu());
cdaltonc28afdb2016-03-29 20:05:07 -0700243#endif
Brian Salomon6405e712017-03-20 08:54:16 -0400244 REPORTER_ASSERT(reporter, configs[26]->asConfigGpu());
bsalomonb8797bb2016-04-05 08:49:38 -0700245 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400246 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu()->getSamples() == 4);
247 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu()->getUseNVPR());
bsalomonb8797bb2016-04-05 08:49:38 -0700248 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu());
249 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getSamples() == 4);
250 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getUseNVPR());
Brian Salomon6405e712017-03-20 08:54:16 -0400251 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getUseDIText());
bsalomonb8797bb2016-04-05 08:49:38 -0700252 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400253 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
254 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorSpace() == srgbColorSpace.get());
bsalomonb8797bb2016-04-05 08:49:38 -0700255 REPORTER_ASSERT(reporter, configs[30]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400256 REPORTER_ASSERT(reporter, configs[30]->asConfigGpu()->getSamples() == 4);
bsalomondc0fcd42016-04-11 14:21:33 -0700257#ifdef SK_VULKAN
Brian Salomon6405e712017-03-20 08:54:16 -0400258 REPORTER_ASSERT(reporter, configs[31]->asConfigGpu());
bsalomondc0fcd42016-04-11 14:21:33 -0700259#endif
kkinnunen3e980c32015-12-23 01:33:00 -0800260#endif
261}
262
263DEF_TEST(ParseConfigs_ExtendedGpuConfigsCorrect, reporter) {
264 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon6405e712017-03-20 08:54:16 -0400265 "gpu[api=gl,nvpr=true,dit=false]",
bsalomon11abd8d2016-10-14 08:13:48 -0700266 "gpu[api=angle_d3d9_es2]",
267 "gpu[api=angle_gl_es3]",
bsalomon808ecbb2016-09-28 12:40:22 -0700268 "gpu[api=mesa,samples=77]",
269 "gpu[dit=true,api=commandbuffer]",
bsalomon808ecbb2016-09-28 12:40:22 -0700270 "gpu[api=gles]",
271 "gpu[api=gl]",
272 "gpu[api=vulkan]",
Greg Daniel2811aa22017-07-13 15:34:56 -0400273 "gpu[api=metal]",
Brian Salomon8fe24272017-07-07 12:56:11 -0400274 "gpu[api=mock]",
kkinnunen3e980c32015-12-23 01:33:00 -0800275 });
276
277 SkCommandLineConfigArray configs;
278 ParseConfigs(config1, &configs);
279 REPORTER_ASSERT(reporter, configs.count() == config1.count());
280 for (int i = 0; i < config1.count(); ++i) {
281 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
282 }
283#if SK_SUPPORT_GPU
284 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400285 GrContextFactory::kGL_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800286 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseNVPR());
kkinnunene3c2f802015-12-29 08:57:32 -0800287 REPORTER_ASSERT(reporter, !configs[0]->asConfigGpu()->getUseDIText());
kkinnunen3e980c32015-12-23 01:33:00 -0800288 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSamples() == 0);
kkinnunen3e980c32015-12-23 01:33:00 -0800289 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu()->getContextType() ==
bsalomon11abd8d2016-10-14 08:13:48 -0700290 GrContextFactory::kANGLE_D3D9_ES2_ContextType);
291 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800292 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu()->getContextType() ==
bsalomon11abd8d2016-10-14 08:13:48 -0700293 GrContextFactory::kANGLE_GL_ES3_ContextType);
294 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800295#if SK_MESA
296 REPORTER_ASSERT(reporter, configs[3]->asConfigGpu()->getContextType() ==
bsalomon85b4b532016-04-05 11:06:27 -0700297 GrContextFactory::kMESA_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800298#else
299 REPORTER_ASSERT(reporter, !configs[3]->asConfigGpu());
300#endif
kkinnunen3e980c32015-12-23 01:33:00 -0800301 REPORTER_ASSERT(reporter, configs[4]->asConfigGpu()->getContextType() ==
bsalomon85b4b532016-04-05 11:06:27 -0700302 GrContextFactory::kCommandBuffer_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800303 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400304 GrContextFactory::kGLES_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800305 REPORTER_ASSERT(reporter, !configs[5]->asConfigGpu()->getUseNVPR());
306 REPORTER_ASSERT(reporter, !configs[5]->asConfigGpu()->getUseDIText());
307 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()->getSamples() == 0);
308 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400309 GrContextFactory::kGL_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800310 REPORTER_ASSERT(reporter, !configs[6]->asConfigGpu()->getUseNVPR());
311 REPORTER_ASSERT(reporter, !configs[6]->asConfigGpu()->getUseDIText());
312 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getSamples() == 0);
bsalomondc0fcd42016-04-11 14:21:33 -0700313#ifdef SK_VULKAN
Brian Salomon6405e712017-03-20 08:54:16 -0400314 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getContextType() ==
bsalomondc0fcd42016-04-11 14:21:33 -0700315 GrContextFactory::kVulkan_ContextType);
316 REPORTER_ASSERT(reporter, !configs[7]->asConfigGpu()->getUseNVPR());
317 REPORTER_ASSERT(reporter, !configs[7]->asConfigGpu()->getUseDIText());
318 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getSamples() == 0);
319#endif
Greg Daniel2811aa22017-07-13 15:34:56 -0400320#ifdef SK_METAL
Brian Salomon8fe24272017-07-07 12:56:11 -0400321 REPORTER_ASSERT(reporter, configs[8]->asConfigGpu()->getContextType() ==
Greg Daniel2811aa22017-07-13 15:34:56 -0400322 GrContextFactory::kMetal_ContextType);
323 REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu()->getUseNVPR());
324 REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu()->getUseDIText());
325 REPORTER_ASSERT(reporter, configs[8]->asConfigGpu()->getSamples() == 0);
326#endif
327 REPORTER_ASSERT(reporter, configs[9]->asConfigGpu()->getContextType() ==
Brian Salomon8fe24272017-07-07 12:56:11 -0400328 GrContextFactory::kMock_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800329#endif
330}
331
332DEF_TEST(ParseConfigs_ExtendedGpuConfigsIncorrect, reporter) {
333 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon6405e712017-03-20 08:54:16 -0400334 "gpu[api=gl,nvpr=1]", // Number as bool.
bsalomon808ecbb2016-09-28 12:40:22 -0700335 "gpu[api=gl,]", // Trailing in comma.
bsalomon11abd8d2016-10-14 08:13:48 -0700336 "gpu[api=angle_glu]", // Unknown api.
bsalomon808ecbb2016-09-28 12:40:22 -0700337 "gpu[api=,samples=0]", // Empty api.
Brian Salomon6405e712017-03-20 08:54:16 -0400338 "gpu[api=gl,samples=true]", // Value true as a number.
339 "gpu[api=gl,samples=0,samples=0]", // Duplicate option key.
340 "gpu[,api=gl,samples=0]", // Leading comma.
bsalomon808ecbb2016-09-28 12:40:22 -0700341 "gpu[samples=54", // Missing closing parenthesis.
kkinnunen3e980c32015-12-23 01:33:00 -0800342 ",,",
Brian Salomon6405e712017-03-20 08:54:16 -0400343 "gpu[]", // Missing required api specifier
344 "gpu[samples=4]", // Missing required api specifier
bsalomon808ecbb2016-09-28 12:40:22 -0700345 "gpu[", // Missing bracket.
kkinnunen3e980c32015-12-23 01:33:00 -0800346 "samples=54" // No backend.
bsalomon808ecbb2016-09-28 12:40:22 -0700347 "gpu[nvpr=true ]", // Space.
kkinnunen3e980c32015-12-23 01:33:00 -0800348 });
349
350 SkCommandLineConfigArray configs;
351 ParseConfigs(config1, &configs);
352 REPORTER_ASSERT(reporter, configs.count() == config1.count());
353 for (int i = 0; i < config1.count(); ++i) {
354 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
355 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(config1[i]));
356#if SK_SUPPORT_GPU
357 REPORTER_ASSERT(reporter, !configs[i]->asConfigGpu());
358#endif
359 }
360}
361
kkinnunen3e980c32015-12-23 01:33:00 -0800362DEF_TEST(ParseConfigs_ExtendedGpuConfigsSurprises, reporter) {
363 // These just list explicitly some properties of the system.
364 SkCommandLineFlags::StringArray config1 = make_string_array({
365 // Options are not canonized -> two same configs have a different tag.
Brian Salomon6405e712017-03-20 08:54:16 -0400366 "gpu[api=gl,nvpr=true,dit=true]", "gpu[api=gl,dit=true,nvpr=true]",
367 "gpu[api=debuggl]", "gpu[api=gl]", "gpu[api=gles]", ""
368 "gpu[api=gl]", "gpu[api=gl,samples=0]", "gpu[api=gles,samples=0]"
kkinnunen3e980c32015-12-23 01:33:00 -0800369 });
370 SkCommandLineConfigArray configs;
371 ParseConfigs(config1, &configs);
372 REPORTER_ASSERT(reporter, configs.count() == config1.count());
373 for (int i = 0; i < config1.count(); ++i) {
374 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
375#if SK_SUPPORT_GPU
376 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals("gpu"));
377 REPORTER_ASSERT(reporter, configs[i]->asConfigGpu());
378#else
379 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(config1[i]));
380#endif
381 }
382}
Mike Klein2af5d682017-04-13 12:24:53 -0400383
384#if SK_SUPPORT_GPU
kkinnunen3e980c32015-12-23 01:33:00 -0800385DEF_TEST(ParseConfigs_ViaParsing, reporter) {
386 SkCommandLineFlags::StringArray config1 = make_string_array({
387 "a-b-c-8888",
388 "zz-qq-gpu",
bsalomon11abd8d2016-10-14 08:13:48 -0700389 "a-angle_gl_es2"
kkinnunen3e980c32015-12-23 01:33:00 -0800390 });
391
392 SkCommandLineConfigArray configs;
393 ParseConfigs(config1, &configs);
394 const struct {
395 const char* backend;
396 const char* vias[3];
397 } expectedConfigs[] = {
398 {"8888", {"a", "b", "c"}},
399 {"gpu", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700400 {"gpu", { "a", nullptr, nullptr }}
kkinnunen3e980c32015-12-23 01:33:00 -0800401 };
402 for (int i = 0; i < config1.count(); ++i) {
403 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
404 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(expectedConfigs[i].backend));
405 for (int j = 0; j < static_cast<int>(SK_ARRAY_COUNT(expectedConfigs[i].vias)); ++j) {
406 if (!expectedConfigs[i].vias[j]) {
407 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() == j);
408 break;
409 }
410 REPORTER_ASSERT(reporter,
411 configs[i]->getViaParts()[j].equals(expectedConfigs[i].vias[j]));
412 }
413 }
414}
Mike Klein2af5d682017-04-13 12:24:53 -0400415#endif
kkinnunen3e980c32015-12-23 01:33:00 -0800416
417DEF_TEST(ParseConfigs_ViaParsingExtendedForm, reporter) {
418 SkCommandLineFlags::StringArray config1 = make_string_array({
bsalomon808ecbb2016-09-28 12:40:22 -0700419 "zz-qq-gpu[api=gles]",
bsalomon11abd8d2016-10-14 08:13:48 -0700420 "abc-nbc-cbs-gpu[api=angle_d3d9_es2,samples=1]",
Brian Salomon6405e712017-03-20 08:54:16 -0400421 "a-gpu[api=gl",
422 "abc-def-angle_gl_es2[api=gles]",
kkinnunen3e980c32015-12-23 01:33:00 -0800423 });
424
425 SkCommandLineConfigArray configs;
426 ParseConfigs(config1, &configs);
427 const struct {
428 const char* backend;
429 const char* vias[3];
430 } expectedConfigs[] = {
431#if SK_SUPPORT_GPU
432 {"gpu", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700433 {"gpu", {"abc", "nbc", "cbs"}},
kkinnunen3e980c32015-12-23 01:33:00 -0800434#else
bsalomon808ecbb2016-09-28 12:40:22 -0700435 {"gpu[api=gles]", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700436 {"gpu[api=angle_d3d9_es2,samples=1]", {"abc", "nbc", "cbs"}},
kkinnunen3e980c32015-12-23 01:33:00 -0800437#endif
Brian Salomon6405e712017-03-20 08:54:16 -0400438 {"gpu[api=gl", {"a", nullptr, nullptr}}, // Missing bracket makes this is not extended
439 // form but via still works as expected.
440 {"angle_gl_es2[api=gles]", {"abc", "def", nullptr}} // This is not extended form.
441 // angle_gl_es2 is an api type not a
442 // backend.
kkinnunen3e980c32015-12-23 01:33:00 -0800443 };
444 for (int i = 0; i < config1.count(); ++i) {
445 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
446 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(expectedConfigs[i].backend));
447 for (int j = 0; j < static_cast<int>(SK_ARRAY_COUNT(expectedConfigs[i].vias)); ++j) {
448 if (!expectedConfigs[i].vias[j]) {
449 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() ==
450 static_cast<int>(j));
451 break;
452 }
453 REPORTER_ASSERT(reporter,
454 configs[i]->getViaParts()[j].equals(expectedConfigs[i].vias[j]));
455 }
456 }
457#if SK_SUPPORT_GPU
458 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu());
bsalomon11abd8d2016-10-14 08:13:48 -0700459 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800460 REPORTER_ASSERT(reporter, !configs[2]->asConfigGpu());
bsalomon11abd8d2016-10-14 08:13:48 -0700461 REPORTER_ASSERT(reporter, !configs[3]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800462#endif
463}