mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-14 22:29:15 +01:00
[dxvk] Execute depth/stencil image upload on graphics queue
Silences a validation error.
This commit is contained in:
parent
8163eb4185
commit
b19293430a
@ -2112,15 +2112,23 @@ namespace dxvk {
|
|||||||
elementCount, formatInfo->elementSize,
|
elementCount, formatInfo->elementSize,
|
||||||
pitchPerRow, pitchPerLayer);
|
pitchPerRow, pitchPerLayer);
|
||||||
|
|
||||||
|
DxvkCmdBuffer cmdBuffer = DxvkCmdBuffer::SdmaBuffer;
|
||||||
|
DxvkBarrierSet* barriers = &m_sdmaAcquires;
|
||||||
|
|
||||||
|
if (subresources.aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
|
||||||
|
cmdBuffer = DxvkCmdBuffer::InitBuffer;
|
||||||
|
barriers = &m_initBarriers;
|
||||||
|
}
|
||||||
|
|
||||||
// Discard previous subresource contents
|
// Discard previous subresource contents
|
||||||
m_sdmaAcquires.accessImage(image,
|
barriers->accessImage(image,
|
||||||
vk::makeSubresourceRange(subresources),
|
vk::makeSubresourceRange(subresources),
|
||||||
VK_IMAGE_LAYOUT_UNDEFINED, 0, 0,
|
VK_IMAGE_LAYOUT_UNDEFINED, 0, 0,
|
||||||
image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
VK_ACCESS_TRANSFER_WRITE_BIT);
|
VK_ACCESS_TRANSFER_WRITE_BIT);
|
||||||
|
|
||||||
m_sdmaAcquires.recordCommands(m_cmd);
|
barriers->recordCommands(m_cmd);
|
||||||
|
|
||||||
// Perform copy on the transfer queue
|
// Perform copy on the transfer queue
|
||||||
VkBufferImageCopy region;
|
VkBufferImageCopy region;
|
||||||
@ -2131,22 +2139,24 @@ namespace dxvk {
|
|||||||
region.imageOffset = imageOffset;
|
region.imageOffset = imageOffset;
|
||||||
region.imageExtent = imageExtent;
|
region.imageExtent = imageExtent;
|
||||||
|
|
||||||
m_cmd->cmdCopyBufferToImage(DxvkCmdBuffer::SdmaBuffer,
|
m_cmd->cmdCopyBufferToImage(cmdBuffer,
|
||||||
stagingHandle.handle, image->handle(),
|
stagingHandle.handle, image->handle(),
|
||||||
image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
||||||
1, ®ion);
|
1, ®ion);
|
||||||
|
|
||||||
// Transfer ownership to graphics queue
|
// Transfer ownership to graphics queue
|
||||||
m_sdmaBarriers.releaseImage(m_initBarriers,
|
if (cmdBuffer == DxvkCmdBuffer::SdmaBuffer) {
|
||||||
image, vk::makeSubresourceRange(subresources),
|
m_sdmaBarriers.releaseImage(m_initBarriers,
|
||||||
m_device->queues().transfer.queueFamily,
|
image, vk::makeSubresourceRange(subresources),
|
||||||
image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
m_device->queues().transfer.queueFamily,
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
||||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
m_device->queues().graphics.queueFamily,
|
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||||
image->info().layout,
|
m_device->queues().graphics.queueFamily,
|
||||||
image->info().stages,
|
image->info().layout,
|
||||||
image->info().access);
|
image->info().stages,
|
||||||
|
image->info().access);
|
||||||
|
}
|
||||||
|
|
||||||
m_cmd->trackResource<DxvkAccess::Write>(image);
|
m_cmd->trackResource<DxvkAccess::Write>(image);
|
||||||
m_cmd->trackResource<DxvkAccess::Read>(stagingSlice.buffer());
|
m_cmd->trackResource<DxvkAccess::Read>(stagingSlice.buffer());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user