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