diff --git a/src/d3d11/d3d11_context_imm.cpp b/src/d3d11/d3d11_context_imm.cpp index 523c8e5b8..9bfded2e0 100644 --- a/src/d3d11/d3d11_context_imm.cpp +++ b/src/d3d11/d3d11_context_imm.cpp @@ -101,13 +101,8 @@ namespace dxvk { if (m_csIsBusy || m_csChunk->commandCount() != 0) { // Add commands to flush the threaded // context, then flush the command list - EmitCs([dev = m_device] (DxvkContext* ctx) { - dev->submitCommandList( - ctx->endRecording(), - nullptr, nullptr); - - ctx->beginRecording( - dev->createCommandList()); + EmitCs([] (DxvkContext* ctx) { + ctx->flushCommandList(); }); FlushCsChunk(); diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 19b7fea94..eb0a9a4e9 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -63,6 +63,16 @@ namespace dxvk { m_cmd->endRecording(); return std::exchange(m_cmd, nullptr); } + + + void DxvkContext::flushCommandList() { + m_device->submitCommandList( + this->endRecording(), + nullptr, nullptr); + + this->beginRecording( + m_device->createCommandList()); + } void DxvkContext::beginQuery(const DxvkQueryRevision& query) { diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 6943a70c7..01e0d1464 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -62,6 +62,14 @@ namespace dxvk { * \returns Active command list */ Rc endRecording(); + + /** + * \brief Flushes command buffer + * + * Transparently submits the current command + * buffer and allocates a new one. + */ + void flushCommandList(); /** * \brief Begins generating query data