Fix inconsistencies in advertised dimensions vs levels

Level count was off by one for the size.
Also change vk::MAX_IMAGE_ARRAY_LAYERS to be the actual value rather
than log2 -- this was a bug waiting to happen somewhere.

Bug: b/118429780
Change-Id: I783a11571f90c34302a4ead8476009d309880eb6
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/26508
Tested-by: Chris Forbes <chrisforbes@google.com>
Presubmit-Ready: Chris Forbes <chrisforbes@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Vulkan/VkConfig.h b/src/Vulkan/VkConfig.h
index 84c9d4b..0e4f10c 100644
--- a/src/Vulkan/VkConfig.h
+++ b/src/Vulkan/VkConfig.h
@@ -50,7 +50,7 @@
 	MAX_IMAGE_LEVELS_2D = 14,
 	MAX_IMAGE_LEVELS_3D = 11,
 	MAX_IMAGE_LEVELS_CUBE = 14,
-	MAX_IMAGE_ARRAY_LAYERS = 11,
+	MAX_IMAGE_ARRAY_LAYERS = 2048,
 };
 
 enum
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp
index b4bfe61..5c0d9d4 100644
--- a/src/Vulkan/VkPhysicalDevice.cpp
+++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -137,11 +137,11 @@
 
 	static const VkPhysicalDeviceLimits limits =
 	{
-		(1 << vk::MAX_IMAGE_LEVELS_1D), // maxImageDimension1D
-		(1 << vk::MAX_IMAGE_LEVELS_2D), // maxImageDimension2D
-		(1 << vk::MAX_IMAGE_LEVELS_3D), // maxImageDimension3D
-		(1 << vk::MAX_IMAGE_LEVELS_CUBE), // maxImageDimensionCube
-		(1 << vk::MAX_IMAGE_ARRAY_LAYERS), // maxImageArrayLayers
+		1 << (vk::MAX_IMAGE_LEVELS_1D - 1), // maxImageDimension1D
+		1 << (vk::MAX_IMAGE_LEVELS_2D - 1), // maxImageDimension2D
+		1 << (vk::MAX_IMAGE_LEVELS_3D - 1), // maxImageDimension3D
+		1 << (vk::MAX_IMAGE_LEVELS_CUBE - 1), // maxImageDimensionCube
+		vk::MAX_IMAGE_ARRAY_LAYERS, // maxImageArrayLayers
 		65536, // maxTexelBufferElements
 		16384, // maxUniformBufferRange
 		(1ul << 27), // maxStorageBufferRange
@@ -607,13 +607,13 @@
                                               VkImageUsageFlags usage, VkImageCreateFlags flags,
 	                                          VkImageFormatProperties* pImageFormatProperties) const
 {
-	pImageFormatProperties->maxArrayLayers = 1 << vk::MAX_IMAGE_ARRAY_LAYERS;
+	pImageFormatProperties->maxArrayLayers = vk::MAX_IMAGE_ARRAY_LAYERS;
 
 	switch(type)
 	{
 	case VK_IMAGE_TYPE_1D:
 		pImageFormatProperties->maxMipLevels = vk::MAX_IMAGE_LEVELS_1D;
-		pImageFormatProperties->maxExtent.width = 1 << vk::MAX_IMAGE_LEVELS_1D;
+		pImageFormatProperties->maxExtent.width = 1 << (vk::MAX_IMAGE_LEVELS_1D - 1);
 		pImageFormatProperties->maxExtent.height = 1;
 		pImageFormatProperties->maxExtent.depth = 1;
 		break;
@@ -621,23 +621,23 @@
 		if(flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
 		{
 			pImageFormatProperties->maxMipLevels = vk::MAX_IMAGE_LEVELS_CUBE;
-			pImageFormatProperties->maxExtent.width = 1 << vk::MAX_IMAGE_LEVELS_CUBE;
-			pImageFormatProperties->maxExtent.height = 1 << vk::MAX_IMAGE_LEVELS_CUBE;
+			pImageFormatProperties->maxExtent.width = 1 << (vk::MAX_IMAGE_LEVELS_CUBE - 1);
+			pImageFormatProperties->maxExtent.height = 1 << (vk::MAX_IMAGE_LEVELS_CUBE - 1);
 			pImageFormatProperties->maxExtent.depth = 1;
 		}
 		else
 		{
 			pImageFormatProperties->maxMipLevels = vk::MAX_IMAGE_LEVELS_2D;
-			pImageFormatProperties->maxExtent.width = 1 << vk::MAX_IMAGE_LEVELS_2D;
-			pImageFormatProperties->maxExtent.height = 1 << vk::MAX_IMAGE_LEVELS_2D;
+			pImageFormatProperties->maxExtent.width = 1 << (vk::MAX_IMAGE_LEVELS_2D - 1);
+			pImageFormatProperties->maxExtent.height = 1 << (vk::MAX_IMAGE_LEVELS_2D - 1);
 			pImageFormatProperties->maxExtent.depth = 1;
 		}
 		break;
 	case VK_IMAGE_TYPE_3D:
 		pImageFormatProperties->maxMipLevels = vk::MAX_IMAGE_LEVELS_3D;
-		pImageFormatProperties->maxExtent.width = 1 << vk::MAX_IMAGE_LEVELS_3D;
-		pImageFormatProperties->maxExtent.height = 1 << vk::MAX_IMAGE_LEVELS_3D;
-		pImageFormatProperties->maxExtent.depth = 1 << vk::MAX_IMAGE_LEVELS_3D;
+		pImageFormatProperties->maxExtent.width = 1 << (vk::MAX_IMAGE_LEVELS_3D - 1);
+		pImageFormatProperties->maxExtent.height = 1 << (vk::MAX_IMAGE_LEVELS_3D - 1);
+		pImageFormatProperties->maxExtent.depth = 1 << (vk::MAX_IMAGE_LEVELS_3D - 1);
 		break;
 	default:
 		UNREACHABLE(type);