Refactor image offset methods

Previously there were three Image::getMemoryOffset() methods. One was
being used for obtaining the subresource offset, so it has been
renamed to getSubresourceOffset(). It also gets called by
getTexelPointer(), which expects it to include the device memory
binding offset. This difference in usage is at the root of a bug but
this change doesn't address that so it's a pure refactoring.

The method now called getSubresourceOffset() previously called another
getMemoryOffset() method for obtaining the  mipmap level offset, which
has now been merged into getSubresourceOffset() since it was small and
not used elsewhere.

The third getMemoryOffset() was for obtaining the aspect offset, so it
has been renamed to getAspectOffset(). Although it's only called by the
new getSubresourceOffset(), it's a bit larger so it's kept separate.

Bug: b/208505033
Change-Id: Ic9f48e32a91a4ad6fbcc26e0dbb442384ccc6ac6
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/63411
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Vulkan/VkImage.cpp b/src/Vulkan/VkImage.cpp
index 29dbd7e..fbd109c 100644
--- a/src/Vulkan/VkImage.cpp
+++ b/src/Vulkan/VkImage.cpp
@@ -232,26 +232,26 @@
 	return memoryRequirements;
 }
 
-void Image::getMemoryRequirements(VkMemoryRequirements2* pMemoryRequirements) const
+void Image::getMemoryRequirements(VkMemoryRequirements2 *pMemoryRequirements) const
 {
-	VkBaseOutStructure* extensionRequirements = reinterpret_cast<VkBaseOutStructure*>(pMemoryRequirements->pNext);
+	VkBaseOutStructure *extensionRequirements = reinterpret_cast<VkBaseOutStructure *>(pMemoryRequirements->pNext);
 	while(extensionRequirements)
 	{
 		switch(extensionRequirements->sType)
 		{
 		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
-		{
-			auto requirements = reinterpret_cast<VkMemoryDedicatedRequirements*>(extensionRequirements);
-			device->getRequirements(requirements);
-#if SWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER
-			if(getSupportedExternalMemoryHandleTypes() == VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)
 			{
-				requirements->prefersDedicatedAllocation = VK_TRUE;
-				requirements->requiresDedicatedAllocation = VK_TRUE;
-			}
+				auto requirements = reinterpret_cast<VkMemoryDedicatedRequirements *>(extensionRequirements);
+				device->getRequirements(requirements);
+#if SWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER
+				if(getSupportedExternalMemoryHandleTypes() == VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)
+				{
+					requirements->prefersDedicatedAllocation = VK_TRUE;
+					requirements->requiresDedicatedAllocation = VK_TRUE;
+				}
 #endif
-		}
-		break;
+			}
+			break;
 		default:
 			UNSUPPORTED("pMemoryRequirements->pNext sType = %s", vk::Stringify(extensionRequirements->sType).c_str());
 			break;
@@ -385,7 +385,7 @@
 	}
 
 	auto aspect = static_cast<VkImageAspectFlagBits>(pSubresource->aspectMask);
-	pLayout->offset = getMemoryOffset(aspect, pSubresource->mipLevel, pSubresource->arrayLayer);
+	pLayout->offset = getSubresourceOffset(aspect, pSubresource->mipLevel, pSubresource->arrayLayer);
 	pLayout->size = getMultiSampledLevelSize(aspect, pSubresource->mipLevel);
 	pLayout->rowPitch = rowPitchBytes(aspect, pSubresource->mipLevel);
 	pLayout->depthPitch = slicePitchBytes(aspect, pSubresource->mipLevel);
@@ -726,7 +726,7 @@
 {
 	VkImageAspectFlagBits aspect = static_cast<VkImageAspectFlagBits>(subresource.aspectMask);
 	return deviceMemory->getOffsetPointer(texelOffsetBytesInStorage(offset, subresource) +
-	                                      getMemoryOffset(aspect, subresource.mipLevel, subresource.arrayLayer));
+	                                      getSubresourceOffset(aspect, subresource.mipLevel, subresource.arrayLayer));
 }
 
 VkExtent3D Image::imageExtentInBlocks(const VkExtent3D &extent, VkImageAspectFlagBits aspect) const
@@ -912,7 +912,7 @@
 	return reinterpret_cast<uint8_t *>(deviceMemory->getOffsetPointer(deviceMemory->getCommittedMemoryInBytes() + 1));
 }
 
-VkDeviceSize Image::getMemoryOffset(VkImageAspectFlagBits aspect) const
+VkDeviceSize Image::getAspectOffset(VkImageAspectFlagBits aspect) const
 {
 	if(deviceMemory && deviceMemory->hasExternalImageProperties())
 	{
@@ -957,19 +957,15 @@
 	return memoryOffset;
 }
 
-VkDeviceSize Image::getMemoryOffset(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
+VkDeviceSize Image::getSubresourceOffset(VkImageAspectFlagBits aspect, uint32_t mipLevel, uint32_t layer) const
 {
-	VkDeviceSize offset = getMemoryOffset(aspect);
-	for(uint32_t i = 0; i < mipLevel; ++i)
+	VkDeviceSize mipmapOffset = getAspectOffset(aspect);
+	for(uint32_t i = 0; i < mipLevel; i++)
 	{
-		offset += getMultiSampledLevelSize(aspect, i);
+		mipmapOffset += getMultiSampledLevelSize(aspect, i);
 	}
-	return offset;
-}
 
-VkDeviceSize Image::getMemoryOffset(VkImageAspectFlagBits aspect, uint32_t mipLevel, uint32_t layer) const
-{
-	return layer * getLayerOffset(aspect, mipLevel) + getMemoryOffset(aspect, mipLevel);
+	return layer * getLayerOffset(aspect, mipLevel) + mipmapOffset;
 }
 
 VkDeviceSize Image::getMipLevelSize(VkImageAspectFlagBits aspect, uint32_t mipLevel) const
diff --git a/src/Vulkan/VkImage.hpp b/src/Vulkan/VkImage.hpp
index 34a50f9..e163e3c 100644
--- a/src/Vulkan/VkImage.hpp
+++ b/src/Vulkan/VkImage.hpp
@@ -125,10 +125,9 @@
 	VkDeviceSize getStorageSize(VkImageAspectFlags flags) const;
 	VkDeviceSize getMultiSampledLevelSize(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
 	VkDeviceSize getLayerOffset(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
-	VkDeviceSize getMemoryOffset(VkImageAspectFlagBits aspect, uint32_t mipLevel) const;
-	VkDeviceSize getMemoryOffset(VkImageAspectFlagBits aspect, uint32_t mipLevel, uint32_t layer) const;
+	VkDeviceSize getAspectOffset(VkImageAspectFlagBits aspect) const;
+	VkDeviceSize getSubresourceOffset(VkImageAspectFlagBits aspect, uint32_t mipLevel, uint32_t layer) const;
 	VkDeviceSize texelOffsetBytesInStorage(const VkOffset3D &offset, const VkImageSubresource &subresource) const;
-	VkDeviceSize getMemoryOffset(VkImageAspectFlagBits aspect) const;
 	VkExtent3D imageExtentInBlocks(const VkExtent3D &extent, VkImageAspectFlagBits aspect) const;
 	VkOffset3D imageOffsetInBlocks(const VkOffset3D &offset, VkImageAspectFlagBits aspect) const;
 	VkExtent2D bufferExtentInBlocks(const VkExtent2D &extent, const VkBufferImageCopy2KHR &region) const;