From cc22ccfc5c8054710212563a3724779f6f6d5cae Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 17 Oct 2024 16:14:46 +0200 Subject: [PATCH] [dxvk] Use new lifetime tracking for resources --- src/dxvk/dxvk_cmdlist.cpp | 1 - src/dxvk/dxvk_cmdlist.h | 27 ----- src/dxvk/dxvk_context.cpp | 150 ++++++++++++++-------------- src/dxvk/dxvk_swapchain_blitter.cpp | 10 +- src/dxvk/hud/dxvk_hud_item.cpp | 8 +- src/dxvk/hud/dxvk_hud_renderer.cpp | 12 +-- 6 files changed, 89 insertions(+), 119 deletions(-) diff --git a/src/dxvk/dxvk_cmdlist.cpp b/src/dxvk/dxvk_cmdlist.cpp index 24464c1d1..5a389ae3c 100644 --- a/src/dxvk/dxvk_cmdlist.cpp +++ b/src/dxvk/dxvk_cmdlist.cpp @@ -366,7 +366,6 @@ namespace dxvk { void DxvkCommandList::reset() { // Free resources and other objects // that are no longer in use - m_resources.reset(); m_objectTracker.clear(); // Less important stuff diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index daff87663..6484f5c31 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -9,7 +9,6 @@ #include "dxvk_gpu_event.h" #include "dxvk_gpu_query.h" #include "dxvk_graphics.h" -#include "dxvk_lifetime.h" #include "dxvk_limits.h" #include "dxvk_pipelayout.h" #include "dxvk_presenter.h" @@ -247,29 +246,6 @@ namespace dxvk { */ void next(); - /** - * \brief Adds a resource to track - * - * Adds a resource to the internal resource tracker. - * Resources will be kept alive and "in use" until - * the device can guarantee that the submission has - * completed. - */ - template - void trackResource(Rc&& rc) { - m_resources.trackResource(DxvkLifetime(std::move(rc), Access)); - } - - template - void trackResource(const Rc& rc) { - m_resources.trackResource(DxvkLifetime(rc.ptr(), Access)); - } - - template - void trackResource(T* rc) { - m_resources.trackResource(DxvkLifetime(rc, Access)); - } - /** * \brief Tracks an object * @@ -331,7 +307,6 @@ namespace dxvk { * \brief Notifies resources and signals */ void notifyObjects() { - m_resources.reset(); m_objectTracker.clear(); m_signalTracker.notify(); } @@ -1082,8 +1057,6 @@ namespace dxvk { PresenterSync m_wsiSemaphores = { }; DxvkObjectTracker m_objectTracker; - - DxvkLifetimeTracker m_resources; DxvkSignalTracker m_signalTracker; DxvkStatCounters m_statCounters; diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 2dc83c3b8..a7f8e546b 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -208,7 +208,7 @@ namespace dxvk { m_rtLayouts.depth = layout; } - m_cmd->trackResource(image); + m_cmd->track(image, DxvkAccess::Write); } } @@ -250,7 +250,7 @@ namespace dxvk { VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT); - m_cmd->trackResource(buffer); + m_cmd->track(buffer, DxvkAccess::Write); } @@ -305,7 +305,7 @@ namespace dxvk { accessBuffer(DxvkCmdBuffer::ExecBuffer, *bufferView, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT); - m_cmd->trackResource(bufferView->buffer()); + m_cmd->track(bufferView->buffer(), DxvkAccess::Write); } @@ -432,8 +432,8 @@ namespace dxvk { VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT); - m_cmd->trackResource(dstBuffer); - m_cmd->trackResource(srcBuffer); + m_cmd->track(dstBuffer, DxvkAccess::Write); + m_cmd->track(srcBuffer, DxvkAccess::Read); } @@ -703,7 +703,7 @@ namespace dxvk { viewInfo.offset = 0; srcView = tmpBuffer->createView(viewInfo); - m_cmd->trackResource(tmpBuffer); + m_cmd->track(tmpBuffer, DxvkAccess::Write); } auto pipeInfo = m_common->metaCopy().getCopyFormattedBufferPipeline(); @@ -764,8 +764,8 @@ namespace dxvk { VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_READ_BIT); // Track all involved resources - m_cmd->trackResource(dstBuffer); - m_cmd->trackResource(srcBuffer); + m_cmd->track(dstBuffer, DxvkAccess::Write); + m_cmd->track(srcBuffer, DxvkAccess::Read); } @@ -1004,7 +1004,7 @@ namespace dxvk { VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT, buffer->info().stages, buffer->info().access); - m_cmd->trackResource(buffer); + m_cmd->track(buffer, DxvkAccess::Write); } @@ -1017,7 +1017,7 @@ namespace dxvk { *image, subresources, initialLayout, VK_PIPELINE_STAGE_2_NONE, 0); - m_cmd->trackResource(image); + m_cmd->track(image, DxvkAccess::None); } else { VkImageLayout clearLayout = image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); @@ -1078,7 +1078,7 @@ namespace dxvk { } } - m_cmd->trackResource(zeroBuffer); + m_cmd->track(zeroBuffer, DxvkAccess::Read); } } else { if (subresources.aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { @@ -1099,7 +1099,7 @@ namespace dxvk { VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT); - m_cmd->trackResource(image); + m_cmd->track(image, DxvkAccess::Write); } } @@ -1149,7 +1149,7 @@ namespace dxvk { *image, image->getAvailableSubresources(), VK_IMAGE_LAYOUT_UNDEFINED, VK_PIPELINE_STAGE_2_NONE, 0); - m_cmd->trackResource(image); + m_cmd->track(image, DxvkAccess::Write); } @@ -1187,7 +1187,7 @@ namespace dxvk { *resource, 0, resource->info().size, srcStages, srcAccess, dstStages, dstAccess); - m_cmd->trackResource(resource); + m_cmd->track(resource, DxvkAccess::Write); } @@ -1209,7 +1209,7 @@ namespace dxvk { srcLayout, srcStages, srcAccess, dstLayout, dstStages, dstAccess); - m_cmd->trackResource(resource); + m_cmd->track(resource, DxvkAccess::Write); } @@ -1372,7 +1372,7 @@ namespace dxvk { VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT); } - m_cmd->trackResource(imageView->image()); + m_cmd->track(imageView->image(), DxvkAccess::Write); m_cmd->track(sampler); } @@ -1501,7 +1501,7 @@ namespace dxvk { oldLayout, image->info().stages, image->info().access, newLayout, image->info().stages, image->info().access); - m_cmd->trackResource(image); + m_cmd->track(image, DxvkAccess::Write); return true; } @@ -1704,7 +1704,7 @@ namespace dxvk { srcLayout, dstImage->info().stages, dstImage->info().access, dstLayout, dstImage->info().stages, dstImage->info().access); - m_cmd->trackResource(dstImage); + m_cmd->track(dstImage, DxvkAccess::Write); } } @@ -1860,7 +1860,7 @@ namespace dxvk { imageView->image()->info().stages, imageView->image()->info().access); - m_cmd->trackResource(imageView->image()); + m_cmd->track(imageView->image(), DxvkAccess::Write); } else { // Perform the operation when starting the next render pass if ((clearAspects | discardAspects) & VK_IMAGE_ASPECT_COLOR_BIT) { @@ -1997,7 +1997,7 @@ namespace dxvk { VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT); - m_cmd->trackResource(buffer); + m_cmd->track(buffer, DxvkAccess::Write); } @@ -2038,8 +2038,8 @@ namespace dxvk { buffer->info().stages, buffer->info().access); } - m_cmd->trackResource(source); - m_cmd->trackResource(buffer); + m_cmd->track(source, DxvkAccess::Read); + m_cmd->track(buffer, DxvkAccess::Write); } @@ -2366,7 +2366,7 @@ namespace dxvk { dstPageTable->updateMapping(m_cmd.ptr(), bind.dstPage, std::move(mapping)); } - m_cmd->trackResource(bindInfo.dstResource); + m_cmd->track(bindInfo.dstResource, DxvkAccess::Write); } @@ -2430,8 +2430,7 @@ namespace dxvk { *r.first, 0, r.first->info().size, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, accessFlags); - if (r.second.test(DxvkAccess::Read)) m_cmd->trackResource(r.first); - if (r.second.test(DxvkAccess::Write)) m_cmd->trackResource(r.first); + m_cmd->track(r.first, r.second.test(DxvkAccess::Write) ? DxvkAccess::Write : DxvkAccess::Read); } for (auto& r : images) { @@ -2441,8 +2440,7 @@ namespace dxvk { r.first->getAvailableSubresources(), r.first->info().layout, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, accessFlags); - if (r.second.test(DxvkAccess::Read)) m_cmd->trackResource(r.first); - if (r.second.test(DxvkAccess::Write)) m_cmd->trackResource(r.first); + m_cmd->track(r.first, r.second.test(DxvkAccess::Write) ? DxvkAccess::Write : DxvkAccess::Read); } } @@ -2649,8 +2647,8 @@ namespace dxvk { VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, VK_ACCESS_2_SHADER_READ_BIT); - m_cmd->trackResource(dstView->image()); - m_cmd->trackResource(srcView->image()); + m_cmd->track(dstView->image(), DxvkAccess::Write); + m_cmd->track(srcView->image(), DxvkAccess::Read); m_cmd->track(sampler); } @@ -2703,8 +2701,8 @@ namespace dxvk { *srcView->image(), srcView->imageSubresources(), srcLayout, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_READ_BIT); - m_cmd->trackResource(dstView->image()); - m_cmd->trackResource(srcView->image()); + m_cmd->track(dstView->image(), DxvkAccess::Write); + m_cmd->track(srcView->image(), DxvkAccess::Read); } @@ -2851,8 +2849,8 @@ namespace dxvk { accessBuffer(DxvkCmdBuffer::ExecBuffer, *buffer, bufferOffset, dataSize, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_READ_BIT); - m_cmd->trackResource(image); - m_cmd->trackResource(buffer); + m_cmd->track(image, DxvkAccess::Write); + m_cmd->track(buffer, DxvkAccess::Read); } @@ -3081,8 +3079,8 @@ namespace dxvk { VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, VK_ACCESS_2_SHADER_READ_BIT); - m_cmd->trackResource(image); - m_cmd->trackResource(buffer); + m_cmd->track(image, DxvkAccess::Write); + m_cmd->track(buffer, DxvkAccess::Read); } @@ -3131,8 +3129,8 @@ namespace dxvk { accessBuffer(DxvkCmdBuffer::ExecBuffer, *buffer, bufferOffset, dataSize, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT); - m_cmd->trackResource(buffer); - m_cmd->trackResource(image); + m_cmd->track(buffer, DxvkAccess::Write); + m_cmd->track(image, DxvkAccess::Read); } @@ -3296,8 +3294,8 @@ namespace dxvk { vk::makeSubresourceRange(imageSubresource), imageLayout, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_READ_BIT); - m_cmd->trackResource(buffer); - m_cmd->trackResource(image); + m_cmd->track(buffer, DxvkAccess::Write); + m_cmd->track(image, DxvkAccess::Read); } @@ -3404,7 +3402,7 @@ namespace dxvk { *imageView->image(), imageView->imageSubresources(), clearLayout, clearStages, clearAccess); - m_cmd->trackResource(imageView->image()); + m_cmd->track(imageView->image(), DxvkAccess::Write); } } @@ -3475,7 +3473,7 @@ namespace dxvk { VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT); - m_cmd->trackResource(imageView->image()); + m_cmd->track(imageView->image(), DxvkAccess::Write); } @@ -3546,8 +3544,8 @@ namespace dxvk { *srcImage, srcSubresourceRange, srcImageLayout, VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_READ_BIT); - m_cmd->trackResource(dstImage); - m_cmd->trackResource(srcImage); + m_cmd->track(dstImage, DxvkAccess::Write); + m_cmd->track(srcImage, DxvkAccess::Read); } @@ -3739,8 +3737,8 @@ namespace dxvk { *dstImage, dstSubresourceRange, dstLayout, dstStages, dstAccess); - m_cmd->trackResource(dstImage); - m_cmd->trackResource(srcImage); + m_cmd->track(dstImage, DxvkAccess::Write); + m_cmd->track(srcImage, DxvkAccess::Read); } @@ -3887,8 +3885,8 @@ namespace dxvk { *sparse, 0, sparse->info().size, VK_PIPELINE_STAGE_2_TRANSFER_BIT, ToBuffer ? VK_ACCESS_2_TRANSFER_READ_BIT : VK_ACCESS_2_TRANSFER_WRITE_BIT); - m_cmd->trackResource(sparse); - m_cmd->trackResource(buffer); + m_cmd->track(sparse, ToBuffer ? DxvkAccess::Read : DxvkAccess::Write); + m_cmd->track(buffer, ToBuffer ? DxvkAccess::Write : DxvkAccess::Read); } @@ -3965,8 +3963,8 @@ namespace dxvk { *sparse, sparseSubresources, transferLayout, VK_PIPELINE_STAGE_2_TRANSFER_BIT, transferAccess); - m_cmd->trackResource(sparse); - m_cmd->trackResource(buffer); + m_cmd->track(sparse, ToBuffer ? DxvkAccess::Read : DxvkAccess::Write); + m_cmd->track(buffer, ToBuffer ? DxvkAccess::Write : DxvkAccess::Read); } @@ -4019,8 +4017,8 @@ namespace dxvk { VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_READ_BIT); - m_cmd->trackResource(dstImage); - m_cmd->trackResource(srcImage); + m_cmd->track(dstImage, DxvkAccess::Write); + m_cmd->track(srcImage, DxvkAccess::Read); } @@ -4108,8 +4106,8 @@ namespace dxvk { VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT); - m_cmd->trackResource(dstImage); - m_cmd->trackResource(srcImage); + m_cmd->track(dstImage, DxvkAccess::Write); + m_cmd->track(srcImage, DxvkAccess::Read); } @@ -4309,8 +4307,8 @@ namespace dxvk { *dstImage, dstSubresourceRange, dstLayout, dstStages, dstAccess); - m_cmd->trackResource(dstImage); - m_cmd->trackResource(srcImage); + m_cmd->track(dstImage, DxvkAccess::Write); + m_cmd->track(srcImage, DxvkAccess::Read); } @@ -4407,8 +4405,8 @@ namespace dxvk { VK_PIPELINE_STAGE_2_TRANSFER_BIT, VK_ACCESS_2_TRANSFER_WRITE_BIT); } - m_cmd->trackResource(source); - m_cmd->trackResource(image); + m_cmd->track(source, DxvkAccess::Read); + m_cmd->track(image, DxvkAccess::Write); } @@ -4707,7 +4705,7 @@ namespace dxvk { } for (uint32_t i = 0; i < framebufferInfo.numAttachments(); i++) - m_cmd->trackResource(framebufferInfo.getAttachment(i).view->image()); + m_cmd->track(framebufferInfo.getAttachment(i).view->image(), DxvkAccess::Write); m_cmd->addStatCtr(DxvkStatCounter::CmdRenderPassCount, 1); } @@ -4763,7 +4761,7 @@ namespace dxvk { ctrOffsets[i] = physSlice.offset; if (physSlice.handle != VK_NULL_HANDLE) - m_cmd->trackResource(m_state.xfb.activeCounters[i].buffer()); + m_cmd->track(m_state.xfb.activeCounters[i].buffer(), DxvkAccess::Read); } m_cmd->cmdBeginTransformFeedback( @@ -4789,7 +4787,7 @@ namespace dxvk { ctrOffsets[i] = physSlice.offset; if (physSlice.handle != VK_NULL_HANDLE) - m_cmd->trackResource(m_state.xfb.activeCounters[i].buffer()); + m_cmd->track(m_state.xfb.activeCounters[i].buffer(), DxvkAccess::Write); m_state.xfb.activeCounters[i] = DxvkBufferSlice(); } @@ -5134,7 +5132,7 @@ namespace dxvk { descriptorInfo.image.imageLayout = res.imageView->image()->info().layout; if (m_rcTracked.set(binding.resourceBinding)) - m_cmd->trackResource(res.imageView->image()); + m_cmd->track(res.imageView->image(), DxvkAccess::Read); } else { descriptorInfo.image.sampler = VK_NULL_HANDLE; descriptorInfo.image.imageView = VK_NULL_HANDLE; @@ -5151,7 +5149,7 @@ namespace dxvk { descriptorInfo.image.imageLayout = res.imageView->image()->info().layout; if (m_rcTracked.set(binding.resourceBinding)) - m_cmd->trackResource(res.imageView->image()); + m_cmd->track(res.imageView->image(), DxvkAccess::Write); } else { descriptorInfo.image.sampler = VK_NULL_HANDLE; descriptorInfo.image.imageView = VK_NULL_HANDLE; @@ -5170,7 +5168,7 @@ namespace dxvk { if (m_rcTracked.set(binding.resourceBinding)) { m_cmd->track(res.sampler); - m_cmd->trackResource(res.imageView->image()); + m_cmd->track(res.imageView->image(), DxvkAccess::Read); } } else { descriptorInfo.image.sampler = m_common->dummyResources().samplerHandle(); @@ -5186,7 +5184,7 @@ namespace dxvk { descriptorInfo.texelBuffer = res.bufferView->handle(); if (m_rcTracked.set(binding.resourceBinding)) - m_cmd->trackResource(res.bufferView->buffer()); + m_cmd->track(res.bufferView->buffer(), DxvkAccess::Read); } else { descriptorInfo.texelBuffer = VK_NULL_HANDLE; } @@ -5199,7 +5197,7 @@ namespace dxvk { descriptorInfo.texelBuffer = res.bufferView->handle(); if (m_rcTracked.set(binding.resourceBinding)) - m_cmd->trackResource(res.bufferView->buffer()); + m_cmd->track(res.bufferView->buffer(), DxvkAccess::Write); } else { descriptorInfo.texelBuffer = VK_NULL_HANDLE; } @@ -5212,7 +5210,7 @@ namespace dxvk { descriptorInfo = res.bufferSlice.getDescriptor(); if (m_rcTracked.set(binding.resourceBinding)) - m_cmd->trackResource(res.bufferSlice.buffer()); + m_cmd->track(res.bufferSlice.buffer(), DxvkAccess::Read); } else { descriptorInfo.buffer.buffer = VK_NULL_HANDLE; descriptorInfo.buffer.offset = 0; @@ -5227,7 +5225,7 @@ namespace dxvk { descriptorInfo = res.bufferSlice.getDescriptor(); if (m_rcTracked.set(binding.resourceBinding)) - m_cmd->trackResource(res.bufferSlice.buffer()); + m_cmd->track(res.bufferSlice.buffer(), DxvkAccess::Write); } else { descriptorInfo.buffer.buffer = VK_NULL_HANDLE; descriptorInfo.buffer.offset = 0; @@ -5365,7 +5363,7 @@ namespace dxvk { VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT); - m_cmd->trackResource(attachment.view->image()); + m_cmd->track(attachment.view->image(), DxvkAccess::Write); } } @@ -5383,7 +5381,7 @@ namespace dxvk { ? VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT : VK_ACCESS_2_NONE); - m_cmd->trackResource(attachment.view->image()); + m_cmd->track(attachment.view->image(), DxvkAccess::Write); } } @@ -5512,7 +5510,7 @@ namespace dxvk { } if (m_vbTracked.set(MaxNumVertexBindings)) - m_cmd->trackResource(m_state.vi.indexBuffer.buffer()); + m_cmd->track(m_state.vi.indexBuffer.buffer(), DxvkAccess::Read); return true; } @@ -5551,7 +5549,7 @@ namespace dxvk { } if (m_vbTracked.set(binding)) - m_cmd->trackResource(m_state.vi.vertexBuffers[binding].buffer()); + m_cmd->track(m_state.vi.vertexBuffers[binding].buffer(), DxvkAccess::Read); } else { buffers[i] = VK_NULL_HANDLE; offsets[i] = 0; @@ -5608,7 +5606,7 @@ namespace dxvk { const Rc& buffer = m_state.xfb.buffers[i].buffer(); buffer->setXfbVertexStride(gsInfo.xfbStrides[i]); - m_cmd->trackResource(buffer); + m_cmd->track(buffer, DxvkAccess::Write); } } @@ -6172,10 +6170,10 @@ namespace dxvk { m_flags.clr(DxvkContextFlag::DirtyDrawBuffer); if (m_state.id.argBuffer.length()) - m_cmd->trackResource(m_state.id.argBuffer.buffer()); + m_cmd->track(m_state.id.argBuffer.buffer(), DxvkAccess::Read); if (m_state.id.cntBuffer.length()) - m_cmd->trackResource(m_state.id.cntBuffer.buffer()); + m_cmd->track(m_state.id.cntBuffer.buffer(), DxvkAccess::Read); } } @@ -6338,7 +6336,7 @@ namespace dxvk { copy.pRegions = ®ion; m_cmd->cmdCopyBuffer(DxvkCmdBuffer::ExecBuffer, ©); - m_cmd->trackResource(info.buffer); + m_cmd->track(info.buffer, DxvkAccess::Write); invalidateBuffer(info.buffer, Rc(info.storage)); } @@ -6393,7 +6391,7 @@ namespace dxvk { copy.pRegions = imageRegions.data(); m_cmd->cmdCopyImage(DxvkCmdBuffer::ExecBuffer, ©); - m_cmd->trackResource(info.image); + m_cmd->track(info.image, DxvkAccess::Write); // Invalidate image and emit post-copy barrier to use the correct layout invalidateImageWithUsage(info.image, Rc(info.storage), info.usageInfo); diff --git a/src/dxvk/dxvk_swapchain_blitter.cpp b/src/dxvk/dxvk_swapchain_blitter.cpp index 10343ea38..1c3439d0a 100644 --- a/src/dxvk/dxvk_swapchain_blitter.cpp +++ b/src/dxvk/dxvk_swapchain_blitter.cpp @@ -340,11 +340,11 @@ namespace dxvk { ctx.cmd->cmdDraw(3, 1, 0, 0); // Make sure to keep used resources alive - ctx.cmd->trackResource(srcView->image()); - ctx.cmd->trackResource(dstView->image()); + ctx.cmd->track(srcView->image(), DxvkAccess::Read); + ctx.cmd->track(dstView->image(), DxvkAccess::Write); if (m_gammaImage) - ctx.cmd->trackResource(m_gammaImage); + ctx.cmd->track(m_gammaImage, DxvkAccess::Read); ctx.cmd->track(m_samplerGamma); ctx.cmd->track(m_samplerPresent); @@ -444,8 +444,8 @@ namespace dxvk { ctx.cmd->cmdPipelineBarrier(DxvkCmdBuffer::ExecBuffer, &depInfo); - ctx.cmd->trackResource(buffer); - ctx.cmd->trackResource(image); + ctx.cmd->track(buffer, DxvkAccess::Read); + ctx.cmd->track(image, DxvkAccess::Write); } diff --git a/src/dxvk/hud/dxvk_hud_item.cpp b/src/dxvk/hud/dxvk_hud_item.cpp index 1b6a14700..2beb7c9b9 100644 --- a/src/dxvk/hud/dxvk_hud_item.cpp +++ b/src/dxvk/hud/dxvk_hud_item.cpp @@ -373,7 +373,7 @@ namespace dxvk::hud { drawInfoBuffer, textBufferView, 2u); // Make sure GPU resources are being kept alive as necessary - ctx.cmd->trackResource(m_gpuBuffer); + ctx.cmd->track(m_gpuBuffer, DxvkAccess::Write); ctx.cmd->track(m_query); } @@ -419,7 +419,7 @@ namespace dxvk::hud { ctx.cmd->cmdDraw(4, 1, 0, 0); - ctx.cmd->trackResource(m_gpuBuffer); + ctx.cmd->track(m_gpuBuffer, DxvkAccess::Read); } @@ -473,7 +473,7 @@ namespace dxvk::hud { depInfo.pMemoryBarriers = &barrier; ctx.cmd->cmdPipelineBarrier(DxvkCmdBuffer::InitBuffer, &depInfo); - ctx.cmd->trackResource(m_gpuBuffer); + ctx.cmd->track(m_gpuBuffer, DxvkAccess::Write); m_query = m_device->createRawQuery(VK_QUERY_TYPE_TIMESTAMP); } @@ -1176,7 +1176,7 @@ namespace dxvk::hud { ctx.cmd->cmdDraw(4, m_drawInfos.size(), 0, 0); // Track data buffer lifetime - ctx.cmd->trackResource(m_dataBuffer); + ctx.cmd->track(m_dataBuffer, DxvkAccess::Read); m_drawInfos.clear(); } diff --git a/src/dxvk/hud/dxvk_hud_renderer.cpp b/src/dxvk/hud/dxvk_hud_renderer.cpp index 1ed8b5a2b..b508fb22c 100644 --- a/src/dxvk/hud/dxvk_hud_renderer.cpp +++ b/src/dxvk/hud/dxvk_hud_renderer.cpp @@ -191,9 +191,9 @@ namespace dxvk::hud { m_textBufferView->handle(), m_textDraws.size()); // Ensure all used resources are kept alive - ctx.cmd->trackResource(m_textBuffer); - ctx.cmd->trackResource(m_fontBuffer); - ctx.cmd->trackResource(m_fontTexture); + ctx.cmd->track(m_textBuffer, DxvkAccess::Read); + ctx.cmd->track(m_fontBuffer, DxvkAccess::Read); + ctx.cmd->track(m_fontTexture, DxvkAccess::Read); ctx.cmd->track(m_fontSampler); // Reset internal text buffers @@ -482,9 +482,9 @@ namespace dxvk::hud { ctx.cmd->cmdPipelineBarrier(DxvkCmdBuffer::InitBuffer, &depInfo); - ctx.cmd->trackResource(uploadBuffer); - ctx.cmd->trackResource(m_fontBuffer); - ctx.cmd->trackResource(m_fontTexture); + ctx.cmd->track(uploadBuffer, DxvkAccess::Read); + ctx.cmd->track(m_fontBuffer, DxvkAccess::Write); + ctx.cmd->track(m_fontTexture, DxvkAccess::Write); }