Add flag to use spvc parser in tests
This also changes the name to be consistent with the option being set
in the spvc API.
BUG=dawn:335
Change-Id: I6f7431095493874e1fef0856e563f7f1225cfc21
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/15780
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index bed169b..eca1733 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -180,6 +180,9 @@
ShaderModuleBase::ShaderModuleBase(DeviceBase* device, const ShaderModuleDescriptor* descriptor)
: CachedObject(device), mCode(descriptor->code, descriptor->code + descriptor->codeSize) {
mFragmentOutputFormatBaseTypes.fill(Format::Other);
+ if (GetDevice()->IsToggleEnabled(Toggle::UseSpvcParser)) {
+ mSpvcContext.SetUseSpvcParser(true);
+ }
}
ShaderModuleBase::ShaderModuleBase(DeviceBase* device, ObjectBase::ErrorTag tag)
diff --git a/src/dawn_native/Toggles.cpp b/src/dawn_native/Toggles.cpp
index 34c4692..cc83c9b 100644
--- a/src/dawn_native/Toggles.cpp
+++ b/src/dawn_native/Toggles.cpp
@@ -91,8 +91,8 @@
"Enable use of spvc for shader compilation, instead of accessing spirv_cross "
"directly.",
"https://crbug.com/dawn/288"}},
- {Toggle::UseSpvcIRGen,
- {"use_spvc_ir_gen",
+ {Toggle::UseSpvcParser,
+ {"use_spvc_parser",
"Enable usage of spvc's internal parsing and IR generation code, instead of "
"spirv_cross's.",
"https://crbug.com/dawn/288"}},
diff --git a/src/dawn_native/Toggles.h b/src/dawn_native/Toggles.h
index e97a273..3fc1dc7 100644
--- a/src/dawn_native/Toggles.h
+++ b/src/dawn_native/Toggles.h
@@ -34,7 +34,7 @@
UseD3D12RenderPass,
SkipValidation,
UseSpvc,
- UseSpvcIRGen,
+ UseSpvcParser,
VulkanUseD32S8,
EnumCount,
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 3896f2a..db727b4 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -149,6 +149,13 @@
continue;
}
+ if (strcmp("--use-spvc-parser", argv[i]) == 0) {
+ mUseSpvc = true; // It's impossible to use the spvc parser without using spvc, so
+ // turning on mUseSpvc implicitly.
+ mUseSpvcParser = true;
+ continue;
+ }
+
constexpr const char kVendorIdFilterArg[] = "--adapter-vendor-id=";
if (strstr(argv[i], kVendorIdFilterArg) == argv[i]) {
const char* vendorIdFilter = argv[i] + strlen(kVendorIdFilterArg);
@@ -218,6 +225,9 @@
"UseSpvc: "
<< (mUseSpvc ? "true" : "false")
<< "\n"
+ "UseSpvcParser: "
+ << (mUseSpvcParser ? "true" : "false")
+ << "\n"
"BeginCaptureOnStartup: "
<< (mBeginCaptureOnStartup ? "true" : "false")
<< "\n"
@@ -270,6 +280,10 @@
return mUseSpvc;
}
+bool DawnTestEnvironment::IsSpvcParserBeingUsed() const {
+ return mUseSpvcParser;
+}
+
dawn_native::Instance* DawnTestEnvironment::GetInstance() const {
return mInstance.get();
}
@@ -519,10 +533,19 @@
}
static constexpr char kUseSpvcToggle[] = "use_spvc";
+ static constexpr char kUseSpvcParserToggle[] = "use_spvc_parser";
if (gTestEnv->IsSpvcBeingUsed()) {
ASSERT(gTestEnv->GetInstance()->GetToggleInfo(kUseSpvcToggle) != nullptr);
deviceDescriptor.forceEnabledToggles.push_back(kUseSpvcToggle);
+
+ if (gTestEnv->IsSpvcParserBeingUsed()) {
+ ASSERT(gTestEnv->GetInstance()->GetToggleInfo(kUseSpvcParserToggle) != nullptr);
+ deviceDescriptor.forceEnabledToggles.push_back(kUseSpvcParserToggle);
+ }
+
} else {
+ // Turning on spvc parser should always turn on spvc.
+ ASSERT(!gTestEnv->IsSpvcParserBeingUsed());
ASSERT(gTestEnv->GetInstance()->GetToggleInfo(kUseSpvcToggle) != nullptr);
deviceDescriptor.forceDisabledToggles.push_back(kUseSpvcToggle);
}
diff --git a/src/tests/DawnTest.h b/src/tests/DawnTest.h
index 9cdfd3e..1250554 100644
--- a/src/tests/DawnTest.h
+++ b/src/tests/DawnTest.h
@@ -137,6 +137,7 @@
bool IsBackendValidationEnabled() const;
bool IsDawnValidationSkipped() const;
bool IsSpvcBeingUsed() const;
+ bool IsSpvcParserBeingUsed() const;
dawn_native::Instance* GetInstance() const;
bool HasVendorIdFilter() const;
uint32_t GetVendorIdFilter() const;
@@ -152,6 +153,7 @@
bool mEnableBackendValidation = false;
bool mSkipDawnValidation = false;
bool mUseSpvc = false;
+ bool mUseSpvcParser = false;
bool mBeginCaptureOnStartup = false;
bool mHasVendorIdFilter = false;
uint32_t mVendorIdFilter = 0;