aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-autoroll <android-autoroll@skia-public.iam.gserviceaccount.com>2022-04-20 20:37:31 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-20 20:37:31 +0000
commit42f1b7776ab7481c63f97833a027bef9a1e0d168 (patch)
tree1c1544f9314c2048b9ee4da5b154694ef8fc1982
parentbbe49d65a9ad23f60ccabe434726e0504e0f580b (diff)
parent8656d6e5948f74aee55264bf79dbf342af175244 (diff)
downloadswiftshader-42f1b7776ab7481c63f97833a027bef9a1e0d168.tar.gz
Roll SwiftShader from ea5f37f39193 to 88fe9ce05ec8 (2 revisions) am: 26228c7e58 am: 16be78422d am: 817c71276f am: 57a72b7649 am: 8656d6e594
Original change: https://android-review.googlesource.com/c/platform/external/swiftshader/+/2069369 Change-Id: Iac068531ea9553035969e059bef7ab8fc13f328c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--src/Reactor/LLVMJIT.cpp50
-rw-r--r--src/Reactor/LLVMReactor.cpp69
-rw-r--r--src/Reactor/LLVMReactor.hpp2
-rw-r--r--tests/regres/deqp.json2
-rw-r--r--tests/regres/testlists/vk-default/api.txt1
-rw-r--r--tests/regres/testlists/vk-default/graphicsfuzz.txt15
-rw-r--r--tests/regres/testlists/vk-default/ray-query.txt72
7 files changed, 140 insertions, 71 deletions
diff --git a/src/Reactor/LLVMJIT.cpp b/src/Reactor/LLVMJIT.cpp
index a217b92a2..959082032 100644
--- a/src/Reactor/LLVMJIT.cpp
+++ b/src/Reactor/LLVMJIT.cpp
@@ -31,6 +31,7 @@ __pragma(warning(push))
#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
#include "llvm/IR/DiagnosticInfo.h"
+#include "llvm/IR/Verifier.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/TargetSelect.h"
@@ -52,7 +53,9 @@ __pragma(warning(push))
# include "llvm/Transforms/Scalar/SimplifyCFG.h"
#else // Legacy pass manager
# include "llvm/IR/LegacyPassManager.h"
-# include "llvm/Transforms/Scalar.h"
+# include "llvm/Pass.h"
+# include "llvm/Transforms/Coroutines.h"
+# include "llvm/Transforms/IPO.h"
#endif
#ifdef _MSC_VER
@@ -854,8 +857,46 @@ JITBuilder::JITBuilder(const rr::Config &config)
}
}
-void JITBuilder::optimize(const rr::Config &cfg)
+void JITBuilder::runPasses(const rr::Config &cfg)
{
+ if(coroutine.id) // Run manadory coroutine transforms.
+ {
+#if LLVM_VERSION_MAJOR >= 13 // New pass manager
+ llvm::PassBuilder pb;
+ llvm::LoopAnalysisManager lam;
+ llvm::FunctionAnalysisManager fam;
+ llvm::CGSCCAnalysisManager cgam;
+ llvm::ModuleAnalysisManager mam;
+
+ pb.registerModuleAnalyses(mam);
+ pb.registerCGSCCAnalyses(cgam);
+ pb.registerFunctionAnalyses(fam);
+ pb.registerLoopAnalyses(lam);
+ pb.crossRegisterProxies(lam, fam, cgam, mam);
+
+ llvm::ModulePassManager mpm =
+ pb.buildO0DefaultPipeline(llvm::OptimizationLevel::O0);
+ mpm.run(*module, mam);
+#else // Legacy pass manager
+ llvm::legacy::PassManager pm;
+
+ pm.add(llvm::createCoroEarlyLegacyPass());
+ pm.add(llvm::createCoroSplitLegacyPass());
+ pm.add(llvm::createCoroElideLegacyPass());
+ pm.add(llvm::createBarrierNoopPass());
+ pm.add(llvm::createCoroCleanupLegacyPass());
+
+ pm.run(*module);
+#endif
+ }
+
+#if defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
+ if(llvm::verifyModule(*module, &llvm::errs()))
+ {
+ llvm::report_fatal_error("Invalid LLVM module");
+ }
+#endif
+
#ifdef ENABLE_RR_DEBUG_INFO
if(debugInfo != nullptr)
{
@@ -892,8 +933,9 @@ void JITBuilder::optimize(const rr::Config &cfg)
{
case rr::Optimization::Pass::Disabled: break;
case rr::Optimization::Pass::CFGSimplification: fpm.addPass(llvm::SimplifyCFGPass()); break;
- case rr::Optimization::Pass::LICM: fpm.addPass(llvm::createFunctionToLoopPassAdaptor(
- llvm::LICMPass(llvm::SetLicmMssaOptCap, llvm::SetLicmMssaNoAccForPromotionCap, true)));
+ case rr::Optimization::Pass::LICM:
+ fpm.addPass(llvm::createFunctionToLoopPassAdaptor(
+ llvm::LICMPass(llvm::SetLicmMssaOptCap, llvm::SetLicmMssaNoAccForPromotionCap, true)));
break;
case rr::Optimization::Pass::AggressiveDCE: fpm.addPass(llvm::ADCEPass()); break;
case rr::Optimization::Pass::GVN: fpm.addPass(llvm::GVNPass()); break;
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 33904af54..c958c8b2c 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -23,23 +23,9 @@
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsX86.h"
-#include "llvm/IR/Verifier.h"
-#include "llvm/Pass.h"
#include "llvm/Support/Alignment.h"
+#include "llvm/Support/Error.h"
#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Transforms/Coroutines.h"
-#include "llvm/Transforms/IPO.h"
-#include "llvm/Transforms/Scalar.h"
-
-#if LLVM_VERSION_MAJOR >= 13 // New pass manager
-# include "llvm/Passes/PassBuilder.h"
-#else // Legacy pass manager
-# include "llvm/IR/LegacyPassManager.h"
-# include "llvm/Pass.h"
-# include "llvm/Transforms/Coroutines.h"
-# include "llvm/Transforms/IPO.h"
-# include "llvm/Transforms/Scalar.h"
-#endif
#include <fstream>
#include <iostream>
@@ -622,14 +608,7 @@ std::shared_ptr<Routine> Nucleus::acquireRoutine(const char *name, const Config:
jit->module->print(file, 0);
}
-#if defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
- if(llvm::verifyModule(*jit->module, &llvm::errs()))
- {
- llvm::report_fatal_error("Invalid LLVM module");
- }
-#endif // defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
-
- jit->optimize(cfg);
+ jit->runPasses(cfg);
if(false)
{
@@ -4364,8 +4343,7 @@ void Nucleus::yield(Value *val)
std::shared_ptr<Routine> Nucleus::acquireCoroutine(const char *name, const Config::Edit *cfgEdit /* = nullptr */)
{
- bool isCoroutine = jit->coroutine.id != nullptr;
- if(isCoroutine)
+ if(jit->coroutine.id)
{
jit->builder->CreateBr(jit->coroutine.endBlock);
}
@@ -4397,51 +4375,12 @@ std::shared_ptr<Routine> Nucleus::acquireCoroutine(const char *name, const Confi
jit->module->print(file, 0);
}
- if(isCoroutine)
- {
-#if LLVM_VERSION_MAJOR >= 13 // New pass manager
- llvm::PassBuilder pb;
- llvm::LoopAnalysisManager lam;
- llvm::FunctionAnalysisManager fam;
- llvm::CGSCCAnalysisManager cgam;
- llvm::ModuleAnalysisManager mam;
-
- pb.registerModuleAnalyses(mam);
- pb.registerCGSCCAnalyses(cgam);
- pb.registerFunctionAnalyses(fam);
- pb.registerLoopAnalyses(lam);
- pb.crossRegisterProxies(lam, fam, cgam, mam);
-
- llvm::ModulePassManager mpm =
- pb.buildO0DefaultPipeline(llvm::OptimizationLevel::O0);
- mpm.run(*jit->module, mam);
-#else
- // Run manadory coroutine transforms.
- llvm::legacy::PassManager pm;
-
- pm.add(llvm::createCoroEarlyLegacyPass());
- pm.add(llvm::createCoroSplitLegacyPass());
- pm.add(llvm::createCoroElideLegacyPass());
- pm.add(llvm::createBarrierNoopPass());
- pm.add(llvm::createCoroCleanupLegacyPass());
-
- pm.run(*jit->module);
-#endif
- }
-
-#if defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
- if(llvm::verifyModule(*jit->module, &llvm::errs()))
- {
- llvm::report_fatal_error("Invalid LLVM module");
- }
-#endif // defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
-
Config cfg = jit->config;
if(cfgEdit)
{
cfg = cfgEdit->apply(jit->config);
}
- jit->optimize(cfg);
+ jit->runPasses(cfg);
if(false)
{
diff --git a/src/Reactor/LLVMReactor.hpp b/src/Reactor/LLVMReactor.hpp
index 54a44c3ea..dad54a733 100644
--- a/src/Reactor/LLVMReactor.hpp
+++ b/src/Reactor/LLVMReactor.hpp
@@ -90,7 +90,7 @@ class JITBuilder
public:
JITBuilder(const rr::Config &config);
- void optimize(const rr::Config &cfg);
+ void runPasses(const rr::Config &cfg);
std::shared_ptr<rr::Routine> acquireRoutine(const char *name, llvm::Function **funcs, size_t count, const rr::Config &cfg);
diff --git a/tests/regres/deqp.json b/tests/regres/deqp.json
index 227d3272f..5e187f9c8 100644
--- a/tests/regres/deqp.json
+++ b/tests/regres/deqp.json
@@ -1,7 +1,7 @@
{
"remote": "https://github.com/KhronosGroup/VK-GL-CTS.git",
"branch": "",
- "sha": "20a474e64382e8f5144122b30b3d7cab182421b8",
+ "sha": "a22069b4e3b7f68cc0c161e8c93b1308bff0925f",
"patches": [
"tests/regres/deqp-patches/deqp-x11.patch"
]
diff --git a/tests/regres/testlists/vk-default/api.txt b/tests/regres/testlists/vk-default/api.txt
index 03f82dc2c..b80935e2d 100644
--- a/tests/regres/testlists/vk-default/api.txt
+++ b/tests/regres/testlists/vk-default/api.txt
@@ -1450,6 +1450,7 @@ dEQP-VK.api.info.vulkan1p2_limits_validation.fragment_density_map
dEQP-VK.api.info.vulkan1p2_limits_validation.nv_ray_tracing
dEQP-VK.api.info.vulkan1p2_limits_validation.timeline_semaphore
dEQP-VK.api.info.vulkan1p2_limits_validation.ext_line_rasterization
+dEQP-VK.api.info.vulkan1p2_limits_validation.robustness2
dEQP-VK.api.info.vulkan1p3_limits_validation.khr_maintenance4
dEQP-VK.api.info.vulkan1p3_limits_validation.max_inline_uniform_total_size
dEQP-VK.api.info.image_format_properties2.1d.optimal.r4g4_unorm_pack8
diff --git a/tests/regres/testlists/vk-default/graphicsfuzz.txt b/tests/regres/testlists/vk-default/graphicsfuzz.txt
index c887501ce..20b789703 100644
--- a/tests/regres/testlists/vk-default/graphicsfuzz.txt
+++ b/tests/regres/testlists/vk-default/graphicsfuzz.txt
@@ -186,18 +186,22 @@ dEQP-VK.graphicsfuzz.cov-function-call-twice-clamp-global-variable
dEQP-VK.graphicsfuzz.cov-function-divide-argument-until-lt-one
dEQP-VK.graphicsfuzz.cov-function-find-lsb-ivec2-one
dEQP-VK.graphicsfuzz.cov-function-fragcoord-condition-always-return
+dEQP-VK.graphicsfuzz.cov-function-global-loop-counter-sample-texture
+dEQP-VK.graphicsfuzz.cov-function-index-array-redundant-clamps
dEQP-VK.graphicsfuzz.cov-function-infinite-loop-always-return
dEQP-VK.graphicsfuzz.cov-function-infinite-loop-return-identical-condition
dEQP-VK.graphicsfuzz.cov-function-large-array-max-clamp
dEQP-VK.graphicsfuzz.cov-function-large-loop-break-argument-lte-global-loop-bound
dEQP-VK.graphicsfuzz.cov-function-loop-check-determinant-zero-return-vector
dEQP-VK.graphicsfuzz.cov-function-loop-clamp-no-effect
+dEQP-VK.graphicsfuzz.cov-function-loop-condition-constant-array-always-false
dEQP-VK.graphicsfuzz.cov-function-loop-condition-uniform-shift-right
dEQP-VK.graphicsfuzz.cov-function-loop-condition-variable-less-than-min-itself
dEQP-VK.graphicsfuzz.cov-function-loop-copy-array-elements-based-on-arguments
dEQP-VK.graphicsfuzz.cov-function-loop-modify-ivec-components-infinite-loop-never-executed
dEQP-VK.graphicsfuzz.cov-function-loop-same-conditions-multiple-times-struct-array
dEQP-VK.graphicsfuzz.cov-function-loop-switch-increment-array-element-return
+dEQP-VK.graphicsfuzz.cov-function-max-all-ones-select-always-true
dEQP-VK.graphicsfuzz.cov-function-min-integer-large-shift-unused
dEQP-VK.graphicsfuzz.cov-function-loop-variable-multiplied-unused
dEQP-VK.graphicsfuzz.cov-function-loops-vector-mul-matrix-never-executed
@@ -208,6 +212,7 @@ dEQP-VK.graphicsfuzz.cov-function-nested-loops-limit-uniform-xor-uniform
dEQP-VK.graphicsfuzz.cov-function-set-struct-field-zero-loop-reset-first-element
dEQP-VK.graphicsfuzz.cov-function-parameter-zero-divided-by-uniform
dEQP-VK.graphicsfuzz.cov-function-round-unpack-half-2x16
+dEQP-VK.graphicsfuzz.cov-function-struct-int-array-loop-check-element
dEQP-VK.graphicsfuzz.cov-function-switch-case-constant-clamp-transpose-identity-matrices
dEQP-VK.graphicsfuzz.cov-function-trivial-switch-case
dEQP-VK.graphicsfuzz.cov-function-two-loops-limit-using-arguments-array-element-copies
@@ -322,9 +327,11 @@ dEQP-VK.graphicsfuzz.cov-loop-array-index-decrement-never-negative
dEQP-VK.graphicsfuzz.cov-loop-array-struct-field-index-array-with-uniforms
dEQP-VK.graphicsfuzz.cov-loop-break-after-first-iteration-set-array-element
dEQP-VK.graphicsfuzz.cov-loop-break-floor-nan-never-executed
+dEQP-VK.graphicsfuzz.cov-loop-break-fragcoord-x-empty-loop
dEQP-VK.graphicsfuzz.cov-loop-clamp-to-one-empty-condition
dEQP-VK.graphicsfuzz.cov-loop-condition-bitfield-extract-set-array-elements
dEQP-VK.graphicsfuzz.cov-loop-condition-clamp-vec-of-ones
+dEQP-VK.graphicsfuzz.cov-loop-condition-constant-struct-field-data
dEQP-VK.graphicsfuzz.cov-loop-condition-divide-by-uniform-always-false
dEQP-VK.graphicsfuzz.cov-loop-condition-double-negate
dEQP-VK.graphicsfuzz.cov-loop-condition-filter-some-iterations-never-discard
@@ -343,6 +350,7 @@ dEQP-VK.graphicsfuzz.cov-loop-findmsb-findlsb
dEQP-VK.graphicsfuzz.cov-loop-fragcoord-identical-condition
dEQP-VK.graphicsfuzz.cov-loop-global-counter-break-set-ivec-elements
dEQP-VK.graphicsfuzz.cov-loop-function-call-negative-argument
+dEQP-VK.graphicsfuzz.cov-loop-global-counter-increment-iterator-select-uniform
dEQP-VK.graphicsfuzz.cov-loop-increase-iterator-condition-uniform-copy-array-elements
dEQP-VK.graphicsfuzz.cov-loop-increment-array-elements-clamp-index
dEQP-VK.graphicsfuzz.cov-loop-increment-array-index-array-usuborrow-feedback
@@ -360,6 +368,7 @@ dEQP-VK.graphicsfuzz.cov-loop-limiter-min-findlsb
dEQP-VK.graphicsfuzz.cov-loop-limiter-uniform-bitwise-and-one-always-break
dEQP-VK.graphicsfuzz.cov-loop-logical-xor
dEQP-VK.graphicsfuzz.cov-loop-multiple-iterator-variables-copy-array-elements
+dEQP-VK.graphicsfuzz.cov-loop-never-iterated-constant-vector-condition
dEQP-VK.graphicsfuzz.cov-loop-read-array-index-from-array-data
dEQP-VK.graphicsfuzz.cov-loop-max-divide-integer-by-ten
dEQP-VK.graphicsfuzz.cov-loop-overwrite-sample-texture-as-color-output
@@ -368,6 +377,7 @@ dEQP-VK.graphicsfuzz.cov-loop-replace-output-color-restore-original
dEQP-VK.graphicsfuzz.cov-loop-returns-behind-true-and-false
dEQP-VK.graphicsfuzz.cov-loop-sampled-texel-integer-counter
dEQP-VK.graphicsfuzz.cov-loop-set-vector-components-pow-two
+dEQP-VK.graphicsfuzz.cov-loop-start-fragcoord-while-iterates-once
dEQP-VK.graphicsfuzz.cov-loop-start-from-one-switch-case-invalid-color-never-executed
dEQP-VK.graphicsfuzz.cov-loop-start-from-one-switch-case-never-executed
dEQP-VK.graphicsfuzz.cov-loop-struct-array-field-set-value-self-dependency
@@ -404,6 +414,7 @@ dEQP-VK.graphicsfuzz.cov-modf-integer-to-private
dEQP-VK.graphicsfuzz.cov-modulo-zero-never-executed
dEQP-VK.graphicsfuzz.cov-multiple-fragcoord-conditions-false-never-return-sample-texture
dEQP-VK.graphicsfuzz.cov-multiple-fragcoord-conditions-never-return-color-uninitialized
+dEQP-VK.graphicsfuzz.cov-multiple-functions-global-never-change
dEQP-VK.graphicsfuzz.cov-multiple-loops-same-condition-always-false-global-loop-counter
dEQP-VK.graphicsfuzz.cov-multiple-one-iteration-loops-global-counter-write-matrices
dEQP-VK.graphicsfuzz.cov-negative-integer-bitwise-or-uniform-increment-loop
@@ -411,6 +422,7 @@ dEQP-VK.graphicsfuzz.cov-nested-functions-accumulate-global-matrix
dEQP-VK.graphicsfuzz.cov-nested-functions-compare-fragcood-length-zero-vector
dEQP-VK.graphicsfuzz.cov-nested-functions-loop-assign-global-array-element
dEQP-VK.graphicsfuzz.cov-nested-functions-struct-arrays-vector-lengths
+dEQP-VK.graphicsfuzz.cov-nested-functions-vec4-array-element-argument
dEQP-VK.graphicsfuzz.cov-nested-loop-continue-inner-copy-array-element
dEQP-VK.graphicsfuzz.cov-nested-loop-decrease-vector-components
dEQP-VK.graphicsfuzz.cov-nested-loop-initializer-value-increased-inside
@@ -436,6 +448,7 @@ dEQP-VK.graphicsfuzz.cov-nested-loops-global-loop-counter-fragcoord-negative-alw
dEQP-VK.graphicsfuzz.cov-nested-loops-global-loop-counter-index-array-vec2
dEQP-VK.graphicsfuzz.cov-nested-loops-global-loop-counter-iterator-dependency
dEQP-VK.graphicsfuzz.cov-nested-loops-global-loop-counter-output-color-from-backup
+dEQP-VK.graphicsfuzz.cov-nested-loops-global-loop-counter-reached-second-iteration
dEQP-VK.graphicsfuzz.cov-nested-loops-identical-iterator-names-multiply-divide
dEQP-VK.graphicsfuzz.cov-nested-loops-identical-iterators-compare-same-array-elements
dEQP-VK.graphicsfuzz.cov-nested-loops-increase-integer-dot-product
@@ -530,8 +543,10 @@ dEQP-VK.graphicsfuzz.cov-transpose-multiply
dEQP-VK.graphicsfuzz.cov-trunc-fract-always-zero
dEQP-VK.graphicsfuzz.cov-two-functions-loops-copy-elements-infinite-loops-never-executed
dEQP-VK.graphicsfuzz.cov-two-functions-modify-struct-array-element-return-from-loop
+dEQP-VK.graphicsfuzz.cov-two-loops-global-loop-counter-clamp-ivec-elements-index-array
dEQP-VK.graphicsfuzz.cov-two-loops-global-loop-counter-shift-right-zero-increment-array-element
dEQP-VK.graphicsfuzz.cov-two-loops-increment-integer-global-counter-break-square-threshold
+dEQP-VK.graphicsfuzz.cov-two-loops-never-iterated
dEQP-VK.graphicsfuzz.cov-two-nested-loops-switch-case-matrix-array-increment
dEQP-VK.graphicsfuzz.cov-types-return-in-main-never-hit
dEQP-VK.graphicsfuzz.cov-uadd-carry-bit-count-index-array
diff --git a/tests/regres/testlists/vk-default/ray-query.txt b/tests/regres/testlists/vk-default/ray-query.txt
index 2bb070f5a..97237ad94 100644
--- a/tests/regres/testlists/vk-default/ray-query.txt
+++ b/tests/regres/testlists/vk-default/ray-query.txt
@@ -23426,3 +23426,75 @@ dEQP-VK.ray_query.non_uniform_args.miss_cause_3
dEQP-VK.ray_query.non_uniform_args.miss_cause_4
dEQP-VK.ray_query.non_uniform_args.miss_cause_5
dEQP-VK.ray_query.non_uniform_args.miss_cause_6
+dEQP-VK.ray_query.helper_invocations.gpu.regular.linear_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.regular.linear_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.regular.linear_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.regular.linear_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.regular.linear_cubic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.regular.linear_cubic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.regular.linear_cubic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.regular.linear_cubic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.regular.cubic_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.regular.cubic_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.regular.cubic_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.regular.cubic_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.linear_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.linear_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.linear_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.linear_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.linear_cubic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.linear_cubic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.linear_cubic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.linear_cubic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.cubic_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.cubic_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.cubic_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.coarse.cubic_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.fine.linear_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.fine.linear_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.fine.linear_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.fine.linear_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.fine.linear_cubic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.fine.linear_cubic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.fine.linear_cubic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.fine.linear_cubic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.fine.cubic_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.fine.cubic_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.gpu.fine.cubic_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.gpu.fine.cubic_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.regular.linear_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.regular.linear_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.regular.linear_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.regular.linear_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.regular.linear_cubic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.regular.linear_cubic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.regular.linear_cubic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.regular.linear_cubic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.regular.cubic_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.regular.cubic_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.regular.cubic_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.regular.cubic_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.linear_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.linear_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.linear_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.linear_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.linear_cubic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.linear_cubic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.linear_cubic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.linear_cubic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.cubic_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.cubic_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.cubic_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.coarse.cubic_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.fine.linear_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.fine.linear_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.fine.linear_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.fine.linear_quadratic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.fine.linear_cubic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.fine.linear_cubic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.fine.linear_cubic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.fine.linear_cubic.32x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.fine.cubic_quadratic.64x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.fine.cubic_quadratic.64x64.64x32
+dEQP-VK.ray_query.helper_invocations.cpu.fine.cubic_quadratic.32x64.64x64
+dEQP-VK.ray_query.helper_invocations.cpu.fine.cubic_quadratic.32x64.64x32