[dawn][native] Change EnforceLimitSpecInvariants to use CombinedLimits

This is in preparation to separate Compat limits into a separate
extension struct.

Bug: 416304914
Change-Id: I0a5227ba1921f38eaa2e90990a1baf4e978c69a1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/245015
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Auto-Submit: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp
index 1eac9bf..b142d01 100644
--- a/src/dawn/native/Device.cpp
+++ b/src/dawn/native/Device.cpp
@@ -364,7 +364,7 @@
     mLimits.hostMappedPointerLimits = GetPhysicalDevice()->GetLimits().hostMappedPointerLimits;
 
     // Handle maxXXXPerStage/maxXXXInStage.
-    EnforceLimitSpecInvariants(&mLimits.v1, effectiveFeatureLevel);
+    EnforceLimitSpecInvariants(&mLimits, effectiveFeatureLevel);
 
     if (mLimits.v1.maxStorageBuffersInFragmentStage < 1) {
         // If there is no storage buffer in fragment stage, UseBlitForB2T is not possible.
@@ -404,7 +404,7 @@
 
 DeviceBase::DeviceBase() : mState(State::Alive), mToggles(ToggleStage::Device) {
     GetDefaultLimits(&mLimits, wgpu::FeatureLevel::Core);
-    EnforceLimitSpecInvariants(&mLimits.v1, wgpu::FeatureLevel::Core);
+    EnforceLimitSpecInvariants(&mLimits, wgpu::FeatureLevel::Core);
     mFormatTable = BuildFormatTable(this);
 
     DeviceDescriptor desc = {};
diff --git a/src/dawn/native/Limits.cpp b/src/dawn/native/Limits.cpp
index 3a76cb0..d852ae5 100644
--- a/src/dawn/native/Limits.cpp
+++ b/src/dawn/native/Limits.cpp
@@ -422,19 +422,19 @@
         std::min(limits->v1.maxUniformBufferBindingSize, limits->v1.maxBufferSize);
 }
 
-void EnforceLimitSpecInvariants(Limits* limits, wgpu::FeatureLevel featureLevel) {
+void EnforceLimitSpecInvariants(CombinedLimits* limits, wgpu::FeatureLevel featureLevel) {
     // In all feature levels, maxXXXPerStage is raised to maxXXXInStage
     // The reason for this is in compatibility mode, maxXXXPerStage defaults to = 4.
     // That means if the adapter has 8 maxXXXInStage and 8 maxXXXPerStage
     // and you request maxXXXInStage = 3 things work but, if you request
     // maxXXXInStage = 5 they'd fail because suddenly you're you'd also be required
     // to request maxXXXPerStage to 5. So, we auto-uprade the perStage limits.
-    limits->maxStorageBuffersPerShaderStage =
-        Max(limits->maxStorageBuffersPerShaderStage, limits->maxStorageBuffersInVertexStage,
-            limits->maxStorageBuffersInFragmentStage);
-    limits->maxStorageTexturesPerShaderStage =
-        Max(limits->maxStorageTexturesPerShaderStage, limits->maxStorageTexturesInVertexStage,
-            limits->maxStorageTexturesInFragmentStage);
+    limits->v1.maxStorageBuffersPerShaderStage =
+        Max(limits->v1.maxStorageBuffersPerShaderStage, limits->v1.maxStorageBuffersInVertexStage,
+            limits->v1.maxStorageBuffersInFragmentStage);
+    limits->v1.maxStorageTexturesPerShaderStage =
+        Max(limits->v1.maxStorageTexturesPerShaderStage, limits->v1.maxStorageTexturesInVertexStage,
+            limits->v1.maxStorageTexturesInFragmentStage);
 
     if (featureLevel != wgpu::FeatureLevel::Compatibility) {
         // In core mode the maxStorageXXXInYYYStage are always set to maxStorageXXXPerShaderStage
@@ -448,10 +448,10 @@
         //     device.limits.maxStorageBuffersPerShaderStage = 5;
         //     It's ok to use 5 storage buffers in fragment stage because in core
         //     we originally only had maxStorageBuffersPerShaderStage
-        limits->maxStorageBuffersInFragmentStage = limits->maxStorageBuffersPerShaderStage;
-        limits->maxStorageTexturesInFragmentStage = limits->maxStorageTexturesPerShaderStage;
-        limits->maxStorageBuffersInVertexStage = limits->maxStorageBuffersPerShaderStage;
-        limits->maxStorageTexturesInVertexStage = limits->maxStorageTexturesPerShaderStage;
+        limits->v1.maxStorageBuffersInFragmentStage = limits->v1.maxStorageBuffersPerShaderStage;
+        limits->v1.maxStorageTexturesInFragmentStage = limits->v1.maxStorageTexturesPerShaderStage;
+        limits->v1.maxStorageBuffersInVertexStage = limits->v1.maxStorageBuffersPerShaderStage;
+        limits->v1.maxStorageTexturesInVertexStage = limits->v1.maxStorageTexturesPerShaderStage;
     }
 }
 
diff --git a/src/dawn/native/Limits.h b/src/dawn/native/Limits.h
index 094d47a..4c78a90 100644
--- a/src/dawn/native/Limits.h
+++ b/src/dawn/native/Limits.h
@@ -53,7 +53,7 @@
 CombinedLimits ReifyDefaultLimits(const CombinedLimits& limits, wgpu::FeatureLevel featureLevel);
 
 // Fixup limits after device creation
-void EnforceLimitSpecInvariants(Limits* limits, wgpu::FeatureLevel featureLevel);
+void EnforceLimitSpecInvariants(CombinedLimits* limits, wgpu::FeatureLevel featureLevel);
 
 // Validate that |requiredLimits| are no better than |supportedLimits|.
 MaybeError ValidateLimits(const CombinedLimits& supportedLimits,
diff --git a/src/dawn/tests/unittests/native/LimitsTests.cpp b/src/dawn/tests/unittests/native/LimitsTests.cpp
index 4b08553..48f298f 100644
--- a/src/dawn/tests/unittests/native/LimitsTests.cpp
+++ b/src/dawn/tests/unittests/native/LimitsTests.cpp
@@ -504,126 +504,126 @@
 TEST(Limits, FixupDeviceLimits) {
     // Test maxXXXInStage is raised to maxXXXPerStage in core
     {
-        Limits limits;
-        limits.maxStorageBuffersInFragmentStage = 1;
-        limits.maxStorageBuffersInVertexStage = 2;
-        limits.maxStorageBuffersPerShaderStage = 3;
+        CombinedLimits limits;
+        limits.v1.maxStorageBuffersInFragmentStage = 1;
+        limits.v1.maxStorageBuffersInVertexStage = 2;
+        limits.v1.maxStorageBuffersPerShaderStage = 3;
 
-        limits.maxStorageTexturesInFragmentStage = 4;
-        limits.maxStorageTexturesInVertexStage = 5;
-        limits.maxStorageTexturesPerShaderStage = 6;
+        limits.v1.maxStorageTexturesInFragmentStage = 4;
+        limits.v1.maxStorageTexturesInVertexStage = 5;
+        limits.v1.maxStorageTexturesPerShaderStage = 6;
 
         EnforceLimitSpecInvariants(&limits, wgpu::FeatureLevel::Core);
 
-        EXPECT_EQ(limits.maxStorageBuffersInFragmentStage, 3u);
-        EXPECT_EQ(limits.maxStorageBuffersInVertexStage, 3u);
-        EXPECT_EQ(limits.maxStorageBuffersPerShaderStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInFragmentStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInVertexStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersPerShaderStage, 3u);
 
-        EXPECT_EQ(limits.maxStorageTexturesInFragmentStage, 6u);
-        EXPECT_EQ(limits.maxStorageTexturesInVertexStage, 6u);
-        EXPECT_EQ(limits.maxStorageTexturesPerShaderStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInFragmentStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInVertexStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesPerShaderStage, 6u);
     }
 
     // Test maxXXXInStage are not raised to maxXXXPerStage in compat
     {
-        Limits limits;
-        limits.maxStorageBuffersInFragmentStage = 1;
-        limits.maxStorageBuffersInVertexStage = 2;
-        limits.maxStorageBuffersPerShaderStage = 3;
+        CombinedLimits limits;
+        limits.v1.maxStorageBuffersInFragmentStage = 1;
+        limits.v1.maxStorageBuffersInVertexStage = 2;
+        limits.v1.maxStorageBuffersPerShaderStage = 3;
 
-        limits.maxStorageTexturesInFragmentStage = 4;
-        limits.maxStorageTexturesInVertexStage = 5;
-        limits.maxStorageTexturesPerShaderStage = 6;
+        limits.v1.maxStorageTexturesInFragmentStage = 4;
+        limits.v1.maxStorageTexturesInVertexStage = 5;
+        limits.v1.maxStorageTexturesPerShaderStage = 6;
 
         EnforceLimitSpecInvariants(&limits, wgpu::FeatureLevel::Compatibility);
 
-        EXPECT_EQ(limits.maxStorageBuffersInFragmentStage, 1u);
-        EXPECT_EQ(limits.maxStorageBuffersInVertexStage, 2u);
-        EXPECT_EQ(limits.maxStorageBuffersPerShaderStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInFragmentStage, 1u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInVertexStage, 2u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersPerShaderStage, 3u);
 
-        EXPECT_EQ(limits.maxStorageTexturesInFragmentStage, 4u);
-        EXPECT_EQ(limits.maxStorageTexturesInVertexStage, 5u);
-        EXPECT_EQ(limits.maxStorageTexturesPerShaderStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInFragmentStage, 4u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInVertexStage, 5u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesPerShaderStage, 6u);
     }
 
     // Test maxXXXPerStage is raised to maxXXXInStage in core
     {
-        Limits limits;
-        limits.maxStorageBuffersInFragmentStage = 3;
-        limits.maxStorageBuffersInVertexStage = 2;
-        limits.maxStorageBuffersPerShaderStage = 1;
+        CombinedLimits limits;
+        limits.v1.maxStorageBuffersInFragmentStage = 3;
+        limits.v1.maxStorageBuffersInVertexStage = 2;
+        limits.v1.maxStorageBuffersPerShaderStage = 1;
 
-        limits.maxStorageTexturesInFragmentStage = 6;
-        limits.maxStorageTexturesInVertexStage = 5;
-        limits.maxStorageTexturesPerShaderStage = 4;
+        limits.v1.maxStorageTexturesInFragmentStage = 6;
+        limits.v1.maxStorageTexturesInVertexStage = 5;
+        limits.v1.maxStorageTexturesPerShaderStage = 4;
 
         EnforceLimitSpecInvariants(&limits, wgpu::FeatureLevel::Core);
 
-        EXPECT_EQ(limits.maxStorageBuffersInFragmentStage, 3u);
-        EXPECT_EQ(limits.maxStorageBuffersInVertexStage, 3u);
-        EXPECT_EQ(limits.maxStorageBuffersPerShaderStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInFragmentStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInVertexStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersPerShaderStage, 3u);
 
-        EXPECT_EQ(limits.maxStorageTexturesInFragmentStage, 6u);
-        EXPECT_EQ(limits.maxStorageTexturesInVertexStage, 6u);
-        EXPECT_EQ(limits.maxStorageTexturesPerShaderStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInFragmentStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInVertexStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesPerShaderStage, 6u);
 
-        limits.maxStorageBuffersInFragmentStage = 2;
-        limits.maxStorageBuffersInVertexStage = 3;
-        limits.maxStorageBuffersPerShaderStage = 1;
+        limits.v1.maxStorageBuffersInFragmentStage = 2;
+        limits.v1.maxStorageBuffersInVertexStage = 3;
+        limits.v1.maxStorageBuffersPerShaderStage = 1;
 
-        limits.maxStorageTexturesInFragmentStage = 5;
-        limits.maxStorageTexturesInVertexStage = 6;
-        limits.maxStorageTexturesPerShaderStage = 4;
+        limits.v1.maxStorageTexturesInFragmentStage = 5;
+        limits.v1.maxStorageTexturesInVertexStage = 6;
+        limits.v1.maxStorageTexturesPerShaderStage = 4;
 
         EnforceLimitSpecInvariants(&limits, wgpu::FeatureLevel::Core);
 
-        EXPECT_EQ(limits.maxStorageBuffersInFragmentStage, 3u);
-        EXPECT_EQ(limits.maxStorageBuffersInVertexStage, 3u);
-        EXPECT_EQ(limits.maxStorageBuffersPerShaderStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInFragmentStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInVertexStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersPerShaderStage, 3u);
 
-        EXPECT_EQ(limits.maxStorageTexturesInFragmentStage, 6u);
-        EXPECT_EQ(limits.maxStorageTexturesInVertexStage, 6u);
-        EXPECT_EQ(limits.maxStorageTexturesPerShaderStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInFragmentStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInVertexStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesPerShaderStage, 6u);
     }
 
     // Test maxXXXPerStage is raised to maxXXXInStage compat
     {
-        Limits limits;
-        limits.maxStorageBuffersInFragmentStage = 3;
-        limits.maxStorageBuffersInVertexStage = 2;
-        limits.maxStorageBuffersPerShaderStage = 1;
+        CombinedLimits limits;
+        limits.v1.maxStorageBuffersInFragmentStage = 3;
+        limits.v1.maxStorageBuffersInVertexStage = 2;
+        limits.v1.maxStorageBuffersPerShaderStage = 1;
 
-        limits.maxStorageTexturesInFragmentStage = 6;
-        limits.maxStorageTexturesInVertexStage = 5;
-        limits.maxStorageTexturesPerShaderStage = 4;
+        limits.v1.maxStorageTexturesInFragmentStage = 6;
+        limits.v1.maxStorageTexturesInVertexStage = 5;
+        limits.v1.maxStorageTexturesPerShaderStage = 4;
 
         EnforceLimitSpecInvariants(&limits, wgpu::FeatureLevel::Compatibility);
 
-        EXPECT_EQ(limits.maxStorageBuffersInFragmentStage, 3u);
-        EXPECT_EQ(limits.maxStorageBuffersInVertexStage, 2u);
-        EXPECT_EQ(limits.maxStorageBuffersPerShaderStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInFragmentStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInVertexStage, 2u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersPerShaderStage, 3u);
 
-        EXPECT_EQ(limits.maxStorageTexturesInFragmentStage, 6u);
-        EXPECT_EQ(limits.maxStorageTexturesInVertexStage, 5u);
-        EXPECT_EQ(limits.maxStorageTexturesPerShaderStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInFragmentStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInVertexStage, 5u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesPerShaderStage, 6u);
 
-        limits.maxStorageBuffersInFragmentStage = 2;
-        limits.maxStorageBuffersInVertexStage = 3;
-        limits.maxStorageBuffersPerShaderStage = 1;
+        limits.v1.maxStorageBuffersInFragmentStage = 2;
+        limits.v1.maxStorageBuffersInVertexStage = 3;
+        limits.v1.maxStorageBuffersPerShaderStage = 1;
 
-        limits.maxStorageTexturesInFragmentStage = 5;
-        limits.maxStorageTexturesInVertexStage = 6;
-        limits.maxStorageTexturesPerShaderStage = 4;
+        limits.v1.maxStorageTexturesInFragmentStage = 5;
+        limits.v1.maxStorageTexturesInVertexStage = 6;
+        limits.v1.maxStorageTexturesPerShaderStage = 4;
 
         EnforceLimitSpecInvariants(&limits, wgpu::FeatureLevel::Compatibility);
 
-        EXPECT_EQ(limits.maxStorageBuffersInFragmentStage, 2u);
-        EXPECT_EQ(limits.maxStorageBuffersInVertexStage, 3u);
-        EXPECT_EQ(limits.maxStorageBuffersPerShaderStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInFragmentStage, 2u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersInVertexStage, 3u);
+        EXPECT_EQ(limits.v1.maxStorageBuffersPerShaderStage, 3u);
 
-        EXPECT_EQ(limits.maxStorageTexturesInFragmentStage, 5u);
-        EXPECT_EQ(limits.maxStorageTexturesInVertexStage, 6u);
-        EXPECT_EQ(limits.maxStorageTexturesPerShaderStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInFragmentStage, 5u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesInVertexStage, 6u);
+        EXPECT_EQ(limits.v1.maxStorageTexturesPerShaderStage, 6u);
     }
 }