diff --git a/src/dxvk/dxvk_image.h b/src/dxvk/dxvk_image.h index f55ae42d..df06930e 100644 --- a/src/dxvk/dxvk_image.h +++ b/src/dxvk/dxvk_image.h @@ -190,11 +190,7 @@ namespace dxvk { * \returns Size of that level */ VkExtent3D mipLevelExtent(uint32_t level) const { - VkExtent3D size = m_info.extent; - size.width = std::max(1u, size.width >> level); - size.height = std::max(1u, size.height >> level); - size.depth = std::max(1u, size.depth >> level); - return size; + return util::computeMipLevelExtent(m_info.extent, level); } /** diff --git a/src/dxvk/dxvk_util.h b/src/dxvk/dxvk_util.h index cde2e8a9..86bb44e9 100644 --- a/src/dxvk/dxvk_util.h +++ b/src/dxvk/dxvk_util.h @@ -87,6 +87,20 @@ namespace dxvk::util { && ((extent.depth % blockSize.depth == 0) || (uint32_t(offset.z + extent.depth) == imageSize.depth)); } + /** + * \brief Computes mip level extent + * + * \param [in] size Base mip level extent + * \param [in] level mip level to compute + * \returns Extent of the given mip level + */ + inline VkExtent3D computeMipLevelExtent(VkExtent3D size, uint32_t level) { + size.width = std::max(1u, size.width >> level); + size.height = std::max(1u, size.height >> level); + size.depth = std::max(1u, size.depth >> level); + return size; + } + /** * \brief Computes block offset for compressed images *