Add more constants for max texture sizes

Currently we only implemented 2D and 2DArray texture. kMaxTextureSize
is actually for 2D texture only. This patch adds a few more constants
for texture size for 1D and 3D textures, and changes kMaxTextureSize
to kMaxTextureDimension2D.

Bug: dawn:558

Change-Id: I9088dd7c060dc096a65abea37c7fb01f760524e9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/36540
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Yunchao He <yunchao.he@intel.com>
diff --git a/src/common/Constants.h b/src/common/Constants.h
index 289df4b..423fe0b 100644
--- a/src/common/Constants.h
+++ b/src/common/Constants.h
@@ -58,11 +58,13 @@
 static constexpr float kLodMax = 1000.0;
 
 // Max texture size constants
-static constexpr uint32_t kMaxTextureSize = 8192u;
-static constexpr uint32_t kMaxTexture2DArrayLayers = 256u;
+static constexpr uint32_t kMaxTextureDimension1D = 8192u;
+static constexpr uint32_t kMaxTextureDimension2D = 8192u;
+static constexpr uint32_t kMaxTextureDimension3D = 2048u;
+static constexpr uint32_t kMaxTextureArrayLayers = 2048u;
 static constexpr uint32_t kMaxTexture2DMipLevels = 14u;
-static_assert(1 << (kMaxTexture2DMipLevels - 1) == kMaxTextureSize,
-              "kMaxTexture2DMipLevels and kMaxTextureSize size mismatch");
+static_assert(1 << (kMaxTexture2DMipLevels - 1) == kMaxTextureDimension2D,
+              "kMaxTexture2DMipLevels and kMaxTextureDimension2D size mismatch");
 
 // Offset alignment for CopyB2B. Strictly speaking this alignment is required only
 // on macOS, but we decide to do it on all platforms.
diff --git a/src/dawn_native/SwapChain.cpp b/src/dawn_native/SwapChain.cpp
index c812958..84f5a56 100644
--- a/src/dawn_native/SwapChain.cpp
+++ b/src/dawn_native/SwapChain.cpp
@@ -89,7 +89,8 @@
                 return DAWN_VALIDATION_ERROR("Swapchain size can't be empty");
             }
 
-            if (descriptor->width > kMaxTextureSize || descriptor->height > kMaxTextureSize) {
+            if (descriptor->width > kMaxTextureDimension2D ||
+                descriptor->height > kMaxTextureDimension2D) {
                 return DAWN_VALIDATION_ERROR("Swapchain size too big");
             }
         }
diff --git a/src/dawn_native/Texture.cpp b/src/dawn_native/Texture.cpp
index 171f02b..310829a 100644
--- a/src/dawn_native/Texture.cpp
+++ b/src/dawn_native/Texture.cpp
@@ -155,8 +155,8 @@
 
         MaybeError ValidateTextureSize(const TextureDescriptor* descriptor, const Format* format) {
             ASSERT(descriptor->size.width != 0 && descriptor->size.height != 0);
-            if (descriptor->size.width > kMaxTextureSize ||
-                descriptor->size.height > kMaxTextureSize) {
+            if (descriptor->size.width > kMaxTextureDimension2D ||
+                descriptor->size.height > kMaxTextureDimension2D) {
                 return DAWN_VALIDATION_ERROR("Texture max size exceeded");
             }
 
@@ -176,7 +176,7 @@
             }
 
             if (descriptor->dimension == wgpu::TextureDimension::e2D &&
-                descriptor->size.depth > kMaxTexture2DArrayLayers) {
+                descriptor->size.depth > kMaxTextureArrayLayers) {
                 return DAWN_VALIDATION_ERROR("Texture 2D array layer count exceeded");
             }
             if (descriptor->mipLevelCount > kMaxTexture2DMipLevels) {
@@ -444,12 +444,12 @@
     uint32_t TextureBase::GetSubresourceIndex(uint32_t mipLevel,
                                               uint32_t arraySlice,
                                               Aspect aspect) const {
-        ASSERT(arraySlice <= kMaxTexture2DArrayLayers);
+        ASSERT(arraySlice <= kMaxTextureArrayLayers);
         ASSERT(mipLevel <= kMaxTexture2DMipLevels);
         ASSERT(HasOneBit(aspect));
-        static_assert(kMaxTexture2DMipLevels <=
-                          std::numeric_limits<uint32_t>::max() / kMaxTexture2DArrayLayers,
-                      "texture size overflows uint32_t");
+        static_assert(
+            kMaxTexture2DMipLevels <= std::numeric_limits<uint32_t>::max() / kMaxTextureArrayLayers,
+            "texture size overflows uint32_t");
         return mipLevel +
                GetNumMipLevels() * (arraySlice + GetArrayLayers() * GetAspectIndex(aspect));
     }
diff --git a/src/tests/end2end/SwapChainValidationTests.cpp b/src/tests/end2end/SwapChainValidationTests.cpp
index bc68d96..31081b0 100644
--- a/src/tests/end2end/SwapChainValidationTests.cpp
+++ b/src/tests/end2end/SwapChainValidationTests.cpp
@@ -128,23 +128,23 @@
         ASSERT_DEVICE_ERROR(device.CreateSwapChain(surface, &desc));
     }
 
-    // A width of kMaxTextureSize is valid but kMaxTextureSize + 1 isn't.
+    // A width of kMaxTextureDimension2D is valid but kMaxTextureDimension2D + 1 isn't.
     {
         wgpu::SwapChainDescriptor desc = goodDescriptor;
-        desc.width = kMaxTextureSize;
+        desc.width = kMaxTextureDimension2D;
         device.CreateSwapChain(surface, &desc);
 
-        desc.width = kMaxTextureSize + 1;
+        desc.width = kMaxTextureDimension2D + 1;
         ASSERT_DEVICE_ERROR(device.CreateSwapChain(surface, &desc));
     }
 
-    // A height of kMaxTextureSize is valid but kMaxTextureSize + 1 isn't.
+    // A height of kMaxTextureDimension2D is valid but kMaxTextureDimension2D + 1 isn't.
     {
         wgpu::SwapChainDescriptor desc = goodDescriptor;
-        desc.height = kMaxTextureSize;
+        desc.height = kMaxTextureDimension2D;
         device.CreateSwapChain(surface, &desc);
 
-        desc.height = kMaxTextureSize + 1;
+        desc.height = kMaxTextureDimension2D + 1;
         ASSERT_DEVICE_ERROR(device.CreateSwapChain(surface, &desc));
     }
 }
diff --git a/src/tests/unittests/validation/TextureValidationTests.cpp b/src/tests/unittests/validation/TextureValidationTests.cpp
index 7638e29..a1a3e1b 100644
--- a/src/tests/unittests/validation/TextureValidationTests.cpp
+++ b/src/tests/unittests/validation/TextureValidationTests.cpp
@@ -213,26 +213,26 @@
     TEST_F(TextureValidationTest, ArrayLayerCount) {
         wgpu::TextureDescriptor defaultDescriptor = CreateDefaultTextureDescriptor();
 
-        // Array layer count exceeding kMaxTexture2DArrayLayers is not allowed
+        // Array layer count exceeding kMaxTextureArrayLayers is not allowed
         {
             wgpu::TextureDescriptor descriptor = defaultDescriptor;
-            descriptor.size.depth = kMaxTexture2DArrayLayers + 1u;
+            descriptor.size.depth = kMaxTextureArrayLayers + 1u;
 
             ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
         }
 
-        // Array layer count less than kMaxTexture2DArrayLayers is allowed;
+        // Array layer count less than kMaxTextureArrayLayers is allowed;
         {
             wgpu::TextureDescriptor descriptor = defaultDescriptor;
-            descriptor.size.depth = kMaxTexture2DArrayLayers >> 1;
+            descriptor.size.depth = kMaxTextureArrayLayers >> 1;
 
             device.CreateTexture(&descriptor);
         }
 
-        // Array layer count equal to kMaxTexture2DArrayLayers is allowed;
+        // Array layer count equal to kMaxTextureArrayLayers is allowed;
         {
             wgpu::TextureDescriptor descriptor = defaultDescriptor;
-            descriptor.size.depth = kMaxTexture2DArrayLayers;
+            descriptor.size.depth = kMaxTextureArrayLayers;
 
             device.CreateTexture(&descriptor);
         }
@@ -242,29 +242,29 @@
     TEST_F(TextureValidationTest, TextureSize) {
         wgpu::TextureDescriptor defaultDescriptor = CreateDefaultTextureDescriptor();
 
-        // Texture size exceeding kMaxTextureSize is not allowed
+        // Texture size exceeding kMaxTextureDimension2D is not allowed
         {
             wgpu::TextureDescriptor descriptor = defaultDescriptor;
-            descriptor.size.width = kMaxTextureSize + 1u;
-            descriptor.size.height = kMaxTextureSize + 1u;
+            descriptor.size.width = kMaxTextureDimension2D + 1u;
+            descriptor.size.height = kMaxTextureDimension2D + 1u;
 
             ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
         }
 
-        // Texture size less than kMaxTextureSize is allowed
+        // Texture size less than kMaxTextureDimension2D is allowed
         {
             wgpu::TextureDescriptor descriptor = defaultDescriptor;
-            descriptor.size.width = kMaxTextureSize >> 1;
-            descriptor.size.height = kMaxTextureSize >> 1;
+            descriptor.size.width = kMaxTextureDimension2D >> 1;
+            descriptor.size.height = kMaxTextureDimension2D >> 1;
 
             device.CreateTexture(&descriptor);
         }
 
-        // Texture equal to kMaxTextureSize is allowed
+        // Texture equal to kMaxTextureDimension2D is allowed
         {
             wgpu::TextureDescriptor descriptor = defaultDescriptor;
-            descriptor.size.width = kMaxTextureSize;
-            descriptor.size.height = kMaxTextureSize;
+            descriptor.size.width = kMaxTextureDimension2D;
+            descriptor.size.height = kMaxTextureDimension2D;
 
             device.CreateTexture(&descriptor);
         }