Refactor image view extent retrieval
Image views are only accessed by shaders, and we've previously ensured
descriptors only have one field for holding either the depth of a 3D
texture or the array layer count. This value is accessed through the
getDepthOrLayerCount() method, and so the getMipLevelExtent() of the
ImageView class only has to return the 2D extent.
Bug: b/162315264
Change-Id: I93dd5bbabcd7efc8aa174beb38204e900c8be614
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/47789
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Vulkan/VkDescriptorSetLayout.cpp b/src/Vulkan/VkDescriptorSetLayout.cpp
index 6959fd7..19615a5 100644
--- a/src/Vulkan/VkDescriptorSetLayout.cpp
+++ b/src/Vulkan/VkDescriptorSetLayout.cpp
@@ -371,7 +371,7 @@
texture->mipmap[2].buffer = imageView->getOffsetPointer(offset, VK_IMAGE_ASPECT_PLANE_2_BIT, level, 0, ImageView::SAMPLING);
}
- VkExtent3D extent = imageView->getMipLevelExtent(0);
+ VkExtent2D extent = imageView->getMipLevelExtent(0);
int width = extent.width;
int height = extent.height;
@@ -410,7 +410,7 @@
mipmap.buffer = imageView->getOffsetPointer(offset, aspect, level, 0, ImageView::SAMPLING);
}
- VkExtent3D extent = imageView->getMipLevelExtent(level);
+ VkExtent2D extent = imageView->getMipLevelExtent(level);
int width = extent.width;
int height = extent.height;
diff --git a/src/Vulkan/VkImageView.cpp b/src/Vulkan/VkImageView.cpp
index 421a37f..f789770 100644
--- a/src/Vulkan/VkImageView.cpp
+++ b/src/Vulkan/VkImageView.cpp
@@ -281,15 +281,18 @@
return static_cast<int>(getImage(usage)->getLayerSize(aspect));
}
-VkExtent3D ImageView::getMipLevelExtent(uint32_t mipLevel) const
+VkExtent2D ImageView::getMipLevelExtent(uint32_t mipLevel) const
{
- return image->getMipLevelExtent(static_cast<VkImageAspectFlagBits>(subresourceRange.aspectMask),
- subresourceRange.baseMipLevel + mipLevel);
+ VkExtent3D extent = image->getMipLevelExtent(static_cast<VkImageAspectFlagBits>(subresourceRange.aspectMask),
+ subresourceRange.baseMipLevel + mipLevel);
+
+ return { extent.width, extent.height };
}
int ImageView::getDepthOrLayerCount(uint32_t mipLevel) const
{
- VkExtent3D extent = getMipLevelExtent(mipLevel);
+ VkExtent3D extent = image->getMipLevelExtent(static_cast<VkImageAspectFlagBits>(subresourceRange.aspectMask),
+ subresourceRange.baseMipLevel + mipLevel);
int layers = subresourceRange.layerCount;
int depthOrLayers = layers > 1 ? layers : extent.depth;
diff --git a/src/Vulkan/VkImageView.hpp b/src/Vulkan/VkImageView.hpp
index eb377ab..1839cf2 100644
--- a/src/Vulkan/VkImageView.hpp
+++ b/src/Vulkan/VkImageView.hpp
@@ -87,7 +87,7 @@
int slicePitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel, Usage usage = RAW) const;
int getMipLevelSize(VkImageAspectFlagBits aspect, uint32_t mipLevel, Usage usage = RAW) const;
int layerPitchBytes(VkImageAspectFlagBits aspect, Usage usage = RAW) const;
- VkExtent3D getMipLevelExtent(uint32_t mipLevel) const;
+ VkExtent2D getMipLevelExtent(uint32_t mipLevel) const;
int getDepthOrLayerCount(uint32_t mipLevel) const;
int getSampleCount() const