| 586 | } |
| 587 | |
| 588 | void CopyContext::copySubresourceRegion( |
| 589 | const Texture* pDst, |
| 590 | uint32_t dstSubresourceIdx, |
| 591 | const Texture* pSrc, |
| 592 | uint32_t srcSubresourceIdx, |
| 593 | const uint3& dstOffset, |
| 594 | const uint3& srcOffset, |
| 595 | const uint3& size |
| 596 | ) |
| 597 | { |
| 598 | resourceBarrier(pDst, Resource::State::CopyDest); |
| 599 | resourceBarrier(pSrc, Resource::State::CopySource); |
| 600 | |
| 601 | gfx::SubresourceRange dstSubresource = {}; |
| 602 | dstSubresource.baseArrayLayer = pDst->getSubresourceArraySlice(dstSubresourceIdx); |
| 603 | dstSubresource.layerCount = 1; |
| 604 | dstSubresource.mipLevel = pDst->getSubresourceMipLevel(dstSubresourceIdx); |
| 605 | dstSubresource.mipLevelCount = 1; |
| 606 | |
| 607 | gfx::SubresourceRange srcSubresource = {}; |
| 608 | srcSubresource.baseArrayLayer = pSrc->getSubresourceArraySlice(srcSubresourceIdx); |
| 609 | srcSubresource.layerCount = 1; |
| 610 | srcSubresource.mipLevel = pSrc->getSubresourceMipLevel(srcSubresourceIdx); |
| 611 | srcSubresource.mipLevelCount = 1; |
| 612 | |
| 613 | gfx::ITextureResource::Extents copySize = {(int)size.x, (int)size.y, (int)size.z}; |
| 614 | |
| 615 | if (size.x == uint(-1)) |
| 616 | { |
| 617 | copySize.width = pSrc->getWidth(srcSubresource.mipLevel) - srcOffset.x; |
| 618 | copySize.height = pSrc->getHeight(srcSubresource.mipLevel) - srcOffset.y; |
| 619 | copySize.depth = pSrc->getDepth(srcSubresource.mipLevel) - srcOffset.z; |
| 620 | } |
| 621 | |
| 622 | auto resourceEncoder = getLowLevelData()->getResourceCommandEncoder(); |
| 623 | resourceEncoder->copyTexture( |
| 624 | pDst->getGfxTextureResource(), |
| 625 | gfx::ResourceState::CopyDestination, |
| 626 | dstSubresource, |
| 627 | gfx::ITextureResource::Offset3D(dstOffset.x, dstOffset.y, dstOffset.z), |
| 628 | pSrc->getGfxTextureResource(), |
| 629 | gfx::ResourceState::CopySource, |
| 630 | srcSubresource, |
| 631 | gfx::ITextureResource::Offset3D(srcOffset.x, srcOffset.y, srcOffset.z), |
| 632 | copySize |
| 633 | ); |
| 634 | mCommandsPending = true; |
| 635 | } |
| 636 | |
| 637 | void CopyContext::addAftermathMarker(std::string_view name) |
| 638 | { |
no test coverage detected