mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2025-10-30 07:11:05 +00:00
Move main thread buffer copy to graphics command list.
This commit is contained in:
parent
f807feaeb1
commit
b3b8d1657a
2 changed files with 27 additions and 8 deletions
|
|
@ -2859,6 +2859,8 @@ namespace RT64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanCommandList::copyBufferRegion(RenderBufferReference dstBuffer, RenderBufferReference srcBuffer, uint64_t size) {
|
void VulkanCommandList::copyBufferRegion(RenderBufferReference dstBuffer, RenderBufferReference srcBuffer, uint64_t size) {
|
||||||
|
endActiveRenderPass();
|
||||||
|
|
||||||
assert(dstBuffer.ref != nullptr);
|
assert(dstBuffer.ref != nullptr);
|
||||||
assert(srcBuffer.ref != nullptr);
|
assert(srcBuffer.ref != nullptr);
|
||||||
|
|
||||||
|
|
@ -2938,6 +2940,8 @@ namespace RT64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanCommandList::copyBuffer(const RenderBuffer *dstBuffer, const RenderBuffer *srcBuffer) {
|
void VulkanCommandList::copyBuffer(const RenderBuffer *dstBuffer, const RenderBuffer *srcBuffer) {
|
||||||
|
endActiveRenderPass();
|
||||||
|
|
||||||
assert(dstBuffer != nullptr);
|
assert(dstBuffer != nullptr);
|
||||||
assert(srcBuffer != nullptr);
|
assert(srcBuffer != nullptr);
|
||||||
|
|
||||||
|
|
@ -2951,6 +2955,8 @@ namespace RT64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanCommandList::copyTexture(const RenderTexture *dstTexture, const RenderTexture *srcTexture) {
|
void VulkanCommandList::copyTexture(const RenderTexture *dstTexture, const RenderTexture *srcTexture) {
|
||||||
|
endActiveRenderPass();
|
||||||
|
|
||||||
assert(dstTexture != nullptr);
|
assert(dstTexture != nullptr);
|
||||||
assert(srcTexture != nullptr);
|
assert(srcTexture != nullptr);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1252,7 +1252,7 @@ static void ExecuteCopyCommandList(const T& function)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void UnlockBufferImpl(GuestBuffer* buffer)
|
static void UnlockBuffer(GuestBuffer* buffer, bool useCopyQueue)
|
||||||
{
|
{
|
||||||
auto uploadBuffer = g_device->createBuffer(RenderBufferDesc::UploadBuffer(buffer->dataSize));
|
auto uploadBuffer = g_device->createBuffer(RenderBufferDesc::UploadBuffer(buffer->dataSize));
|
||||||
|
|
||||||
|
|
@ -1268,10 +1268,23 @@ static void UnlockBufferImpl(GuestBuffer* buffer)
|
||||||
|
|
||||||
uploadBuffer->unmap();
|
uploadBuffer->unmap();
|
||||||
|
|
||||||
ExecuteCopyCommandList([&]
|
if (useCopyQueue)
|
||||||
{
|
{
|
||||||
g_copyCommandList->copyBufferRegion(buffer->buffer->at(0), uploadBuffer->at(0), buffer->dataSize);
|
ExecuteCopyCommandList([&]
|
||||||
});
|
{
|
||||||
|
g_copyCommandList->copyBufferRegion(buffer->buffer->at(0), uploadBuffer->at(0), buffer->dataSize);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto& commandList = g_commandLists[g_frame];
|
||||||
|
|
||||||
|
commandList->barriers(RenderBarrierStage::COPY, RenderBufferBarrier(buffer->buffer.get(), RenderBufferAccess::WRITE));
|
||||||
|
commandList->copyBufferRegion(buffer->buffer->at(0), uploadBuffer->at(0), buffer->dataSize);
|
||||||
|
commandList->barriers(RenderBarrierStage::GRAPHICS, RenderBufferBarrier(buffer->buffer.get(), RenderBufferAccess::READ));
|
||||||
|
|
||||||
|
g_tempBuffers[g_frame].emplace_back(std::move(uploadBuffer));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
@ -1288,19 +1301,19 @@ static void UnlockBuffer(GuestBuffer* buffer)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UnlockBufferImpl<T>(buffer);
|
UnlockBuffer<T>(buffer, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcUnlockBuffer16(const RenderCommand& cmd)
|
static void ProcUnlockBuffer16(const RenderCommand& cmd)
|
||||||
{
|
{
|
||||||
UnlockBufferImpl<uint16_t>(cmd.unlockBuffer.buffer);
|
UnlockBuffer<uint16_t>(cmd.unlockBuffer.buffer, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcUnlockBuffer32(const RenderCommand& cmd)
|
static void ProcUnlockBuffer32(const RenderCommand& cmd)
|
||||||
{
|
{
|
||||||
UnlockBufferImpl<uint32_t>(cmd.unlockBuffer.buffer);
|
UnlockBuffer<uint32_t>(cmd.unlockBuffer.buffer, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UnlockVertexBuffer(GuestBuffer* buffer)
|
static void UnlockVertexBuffer(GuestBuffer* buffer)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue