1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-20 10:54:16 +01:00

[d3d9] Fix UpdateTexture extent

Same as 5f1629f2cbd93ae48930836237feb0ead1f1034c
This commit is contained in:
Robin Kertels 2021-07-15 19:48:46 +02:00 committed by Joshie
parent 5037e49646
commit 34101dcf26

View File

@ -774,9 +774,9 @@ namespace dxvk {
int32_t(alignDown(box.Front >> m, formatInfo->blockSize.depth))
};
VkExtent3D scaledBoxExtent = util::computeMipLevelExtent({
uint32_t(box.Right - scaledBoxOffset.x),
uint32_t(box.Bottom - scaledBoxOffset.y),
uint32_t(box.Back - scaledBoxOffset.z)
uint32_t(box.Right - int32_t(alignDown(box.Left, formatInfo->blockSize.width))),
uint32_t(box.Bottom - int32_t(alignDown(box.Top, formatInfo->blockSize.height))),
uint32_t(box.Back - int32_t(alignDown(box.Front, formatInfo->blockSize.depth)))
}, m);
VkExtent3D scaledBoxExtentBlockCount = util::computeBlockCount(scaledBoxExtent, formatInfo->blockSize);
VkExtent3D scaledAlignedBoxExtent = util::computeBlockExtent(scaledBoxExtentBlockCount, formatInfo->blockSize);
@ -784,9 +784,9 @@ namespace dxvk {
VkExtent3D texLevelExtent = dstImage->mipLevelExtent(m);
VkExtent3D texLevelExtentBlockCount = util::computeBlockCount(texLevelExtent, formatInfo->blockSize);
scaledAlignedBoxExtent.width = std::min<uint32_t>(texLevelExtent.width, scaledAlignedBoxExtent.width);
scaledAlignedBoxExtent.height = std::min<uint32_t>(texLevelExtent.height, scaledAlignedBoxExtent.height);
scaledAlignedBoxExtent.depth = std::min<uint32_t>(texLevelExtent.depth, scaledAlignedBoxExtent.depth);
scaledAlignedBoxExtent.width = std::min<uint32_t>(texLevelExtent.width - scaledBoxOffset.x, scaledAlignedBoxExtent.width);
scaledAlignedBoxExtent.height = std::min<uint32_t>(texLevelExtent.height - scaledBoxOffset.y, scaledAlignedBoxExtent.height);
scaledAlignedBoxExtent.depth = std::min<uint32_t>(texLevelExtent.depth - scaledBoxOffset.z, scaledAlignedBoxExtent.depth);
VkDeviceSize dirtySize = scaledBoxExtentBlockCount.width * scaledBoxExtentBlockCount.height * scaledBoxExtentBlockCount.depth * formatInfo->elementSize;
D3D9BufferSlice slice = AllocTempBuffer<false>(dirtySize);