241 {
242 enum TestTypeMatcher {
CPU, Ganesh, Graphite,
GPU };
243
244 struct TestDisable {
245 std::optional<std::regex> deviceName;
246 std::optional<std::string_view> backendAPI;
247 std::optional<TestTypeMatcher> testTypeMatcher;
248 std::optional<bool> platform;
249 };
250
252
253
255 #define ADRENO "Adreno \\(TM\\) "
256 #define NVIDIA "(Tegra|Quadro|RTX|GTX) "
257
258 TestDisableMap disables;
259 constexpr std::nullopt_t
_ = std::nullopt;
260 using regex = std::regex;
261
262#if defined(SK_BUILD_FOR_UNIX)
263 constexpr bool kLinux = true;
264#else
265 constexpr bool kLinux = false;
266#endif
267#if defined(SK_BUILD_FOR_MAC)
268 constexpr bool kMac = true;
269#else
270 constexpr bool kMac = false;
271#endif
272#if defined(SK_BUILD_FOR_IOS)
273 constexpr bool kiOS = true;
274#else
275 constexpr bool kiOS = false;
276#endif
277#if defined(SK_BUILD_FOR_WIN)
278 constexpr bool kWindows = true;
279#else
280 constexpr bool kWindows = false;
281#endif
282#if defined(SK_BUILD_FOR_ANDROID)
283 constexpr bool kAndroid = true;
284#else
285 constexpr bool kAndroid = false;
286#endif
287
288
289
290 for (
const char*
test : {
"LogicalAndShortCircuit",
291 "LogicalOrShortCircuit"}) {
292 disables[
test].push_back({
_,
"OpenGL",
GPU, kMac || kiOS});
293 }
294
295
296 for (
const char*
test : {
"MatrixScalarNoOpFolding",
297 "MatrixScalarMath",
298 "SwizzleIndexStore",
299 "OutParamsAreDistinctFromGlobal",
300 "IntrinsicMixFloatES3"}) {
301 disables[
test].push_back({
_,
"ANGLE",
GPU, kMac});
302 }
303
304
305 disables[
"SwitchWithFallthrough"].push_back({
_,
"OpenGL",
GPU, kiOS});
306
307
308
309 for (
const char*
test : {
"Matrices",
310 "MatrixNoOpFolding",
311 "MatrixScalarMath",
312 "MatrixSwizzleStore",
313 "MatrixScalarNoOpFolding",
314 "UnaryPositiveNegative",
315 "Cross"}) {
317 }
318
319
320
321 for (
const char*
test : {
"Switch",
322 "SwitchDefaultOnly",
323 "SwitchWithFallthrough",
324 "SwitchWithFallthroughAndVarDecls",
325 "SwitchWithLoops",
326 "SwitchCaseFolding",
327 "LoopFloat",
328 "LoopInt",
329 "MatrixScalarNoOpFolding",
330 "MatrixScalarMath",
331 "MatrixFoldingES2",
332 "MatrixEquality",
333 "IntrinsicFract",
334 "ModifiedStructParametersCannotBeInlined"}) {
336 }
337
338
339
340 for (
const char*
test : {
"MatrixConstructorsES2",
341 "MatrixConstructorsES3",
342 "MatrixScalarNoOpFolding",
343 "PreserveSideEffects",
344 "StructFieldNoFolding"}) {
347 }
348
349 disables[
"IntrinsicMixFloatES3"].push_back({
regex(
"RTX "),
"Vulkan",
_, kWindows});
350
351
352 for (
const char*
test : {
"PreserveSideEffects",
353 "CommaSideEffects"}) {
354 disables[
test].push_back({
regex(
"Quadro P400"),
_,
_, kLinux});
355 }
356
357
358 for (
const char*
test : {
"UniformArray",
359 "TemporaryIndexLookup",
360 "MatrixIndexLookup"}) {
361 disables[
test].push_back({
regex(
"Quadro P400"),
"Dawn Vulkan", Graphite, kWindows});
362 }
363
364
365 for (
const char*
test : {
"OutParamsAreDistinct",
366 "OutParamsAreDistinctFromGlobal"}) {
367 disables[
test].push_back({
regex(
"PowerVR Rogue GE8300"),
_,
GPU,
_});
368 }
369
370
371 for (
const char*
test : {
"DeadReturnES3",
372 "IntrinsicAll",
373 "MatrixConstructorsES3",
374 "MatrixScalarNoOpFolding",
375 "StructIndexStore",
376 "SwizzleIndexLookup",
377 "SwizzleIndexStore"}) {
378 disables[
test].push_back({
regex(
"Radeon.*(R9|HD)"),
"OpenGL",
GPU,
_});
379 disables[
test].push_back({
regex(
"Radeon.*(R9|HD)"),
"ANGLE GL",
GPU,
_});
380 }
381
382
383 for (
const char*
test : {
"IntrinsicDFdy",
384 "IntrinsicDFdx",
385 "IntrinsicFwidth"}) {
387 }
388
389
390
391 for (
const char*
test : {
"ArrayCast",
392 "ArrayComparison",
393 "CommaSideEffects",
394 "IntrinsicMixFloatES2",
395 "IntrinsicClampFloat",
396 "SwitchWithFallthrough",
397 "SwizzleIndexLookup",
398 "SwizzleIndexStore"}) {
400 }
401
402
403 for (
const char*
test : {
"VoidInSequenceExpressions",
404 "InoutParameters",
405 "OutParams",
406 "OutParamsDoubleSwizzle",
407 "OutParamsNoInline",
408 "OutParamsFunctionCallInArgument"}) {
410 }
411
412 for (
const char*
test : {
"MatrixToVectorCast",
413 "StructsInFunctions"}) {
415 }
416
417
418 for (
const char*
test : {
"Matrices",
419 "MatrixNoOpFolding"}) {
421 }
422
423
424 disables[
"IntrinsicIsInf"].push_back({
regex(
ADRENO "6"),
"OpenGL",
_, kAndroid});
425
426
427 disables[
"EmptyBlocksES3"].push_back({
regex(
ADRENO "(540|630)"),
_,
_, kAndroid});
428
429
430 disables[
"OutParamsAreDistinctFromGlobal"].push_back({
regex(
ADRENO "[3456]"),
"OpenGL",
432
433 disables[
"StructFieldFolding"].push_back({
regex(
ADRENO "[56]"),
"OpenGL",
435
436
437 for (
const char*
test : {
"PrefixExpressionsES2",
438 "MatrixToVectorCast",
439 "MatrixConstructorsES2"}) {
440 disables[
test].push_back({
regex(
ADRENO "620"),
"Vulkan", Graphite, kAndroid});
441 }
442
443
444
445
446 disables[
"IntrinsicFloor"].push_back({
regex(
"Intel.*(Iris|HD)"),
"ANGLE D3D",
_,
_});
447
448
449 for (
const char*
test : {
"IntrinsicNot",
450 "IntrinsicMixFloatES3"}) {
451 disables[
test].push_back({
regex(
"Intel.*(Iris|6000)"),
"Metal",
_, kMac});
452 }
453
454
455 disables[
"SwizzleIndexStore"].push_back({
regex(
"Intel"),
"OpenGL",
_, kMac});
456 disables[
"SwizzleIndexStore"].push_back({
regex(
"Intel.*Iris"),
_,
_, kWindows});
457
458
459 for (
const char*
test : {
"VectorToMatrixCast",
460 "VectorScalarMath",
461 "TrivialArgumentsInlineDirectly"}) {
462 disables[
test].push_back({
regex(
"Intel"),
"ANGLE",
_, kWindows});
463 }
464
465 for (
const char*
test : {
"MatrixFoldingES2",
466 "MatrixEquality",
467 "TemporaryIndexLookup",
468 "SwizzleIndexLookup"}) {
469 disables[
test].push_back({
regex(
"Intel.*(Iris|4400)"),
"OpenGL",
_, kWindows});
470 disables[
test].push_back({
regex(
"Intel.*(Iris|4400)"),
"ANGLE",
_, kWindows});
471 }
472
473 for (
const char*
test : {
"ReturnsValueOnEveryPathES3",
474 "OutParamsAreDistinctFromGlobal",
475 "StructFieldFolding"}) {
476 disables[
test].push_back({
regex(
"Intel"),
"OpenGL",
_, kWindows});
477 disables[
test].push_back({
regex(
"Intel"),
"ANGLE GL",
_, kWindows});
478 }
479
480 for (
const char*
test : {
"SwitchDefaultOnly",
481 "ReturnsValueOnEveryPathES3"}) {
482 disables[
test].push_back({
regex(
"Intel"),
"Vulkan",
_, kLinux});
483 }
484
485 for (
const char*
test : {
"SwitchDefaultOnly"}) {
486 disables[
test].push_back({
regex(
"Intel"),
"ANGLE",
_, kWindows});
487 }
488
489 for (
const char*
test : {
"SwizzleAsLValueES3"}) {
490 disables[
test].push_back({
regex(
"Intel"),
_,
_, kWindows});
491 disables[
test].push_back({
_,
"ANGLE",
_, kWindows});
492 }
493
494
495 for (
const char*
test : {
"IntrinsicDFdy",
496 "IntrinsicDFdx",
497 "IntrinsicFwidth"}) {
499 }
500
501 disables[
"LoopFloat"].push_back({
regex(
"Intel.*(Iris|6000)"),
_,
_, kMac});
502
503 #undef ADRENO
504 #undef NVIDIA
505
506 return disables;
507 }()};
508
509 if (
const std::vector<TestDisable>* testDisables = testDisableMap->find(
name)) {
510 for (
const TestDisable&
d : *testDisables) {
511 if (
d.platform.has_value() && !*
d.platform) {
512 continue;
513 }
515 continue;
516 }
517 if (
d.deviceName.has_value() &&
518 !std::regex_search(deviceName.begin(), deviceName.end(), *
d.deviceName)) {
519 continue;
520 }
522 continue;
523 }
525 continue;
526 }
528 continue;
529 }
531 continue;
532 }
533
534 return true;
535 }
536 }
537
538
539 return false;
540}
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE auto & d
constexpr bool contains(std::string_view str, std::string_view needle)