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;
