diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index a128182d4..d99309af2 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -1137,8 +1137,10 @@ namespace dxvk { textureInfo->GetSubresourceFromIndex( VK_IMAGE_ASPECT_COLOR_BIT, DstSubresource); + VkExtent3D mipExtent = textureInfo->GetImage()->mipLevelExtent(subresource.mipLevel); + VkOffset3D offset = { 0, 0, 0 }; - VkExtent3D extent = textureInfo->GetImage()->mipLevelExtent(subresource.mipLevel); + VkExtent3D extent = mipExtent; if (pDstBox != nullptr) { if (pDstBox->left >= pDstBox->right @@ -1163,6 +1165,10 @@ namespace dxvk { auto formatInfo = imageFormatInfo( textureInfo->GetImage()->info().format); + if (!util::isBlockAligned(offset, formatInfo->blockSize) + || !util::isBlockAligned(offset, extent, formatInfo->blockSize, mipExtent)) + return; + const VkExtent3D regionExtent = util::computeBlockCount(extent, formatInfo->blockSize); const VkDeviceSize bytesPerRow = regionExtent.width * formatInfo->elementSize;