1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-23 10:54:14 +01:00

[dxvk] Add functionality to use secondary command buffers

This commit is contained in:
Philip Rebohle 2025-02-05 17:14:58 +01:00
parent 7d35afdc37
commit 6c1bc35264

View File

@ -441,6 +441,25 @@ namespace dxvk {
}
void beginSecondaryCommandBuffer(
const VkCommandBufferInheritanceInfo& inheritanceInfo) {
m_execBuffer = std::exchange(m_cmd.cmdBuffers[uint32_t(DxvkCmdBuffer::ExecBuffer)],
m_graphicsPool->getSecondaryCommandBuffer(inheritanceInfo));
}
VkCommandBuffer endSecondaryCommandBuffer() {
VkCommandBuffer cmd = getCmdBuffer();
if (m_vkd->vkEndCommandBuffer(cmd))
throw DxvkError("DxvkCommandList: Failed to end secondary command buffer");
m_cmd.cmdBuffers[uint32_t(DxvkCmdBuffer::ExecBuffer)] = m_execBuffer;
m_execBuffer = VK_NULL_HANDLE;
return cmd;
}
void cmdBeginQuery(
VkQueryPool queryPool,
uint32_t query,
@ -818,6 +837,15 @@ namespace dxvk {
}
void cmdExecuteCommands(
uint32_t count,
VkCommandBuffer* commandBuffers) {
m_cmd.execCommands = true;
m_vkd->vkCmdExecuteCommands(getCmdBuffer(), count, commandBuffers);
}
void cmdFillBuffer(
DxvkCmdBuffer cmdBuffer,
VkBuffer dstBuffer,
@ -1143,6 +1171,7 @@ namespace dxvk {
Rc<DxvkCommandPool> m_transferPool;
DxvkCommandSubmissionInfo m_cmd;
VkCommandBuffer m_execBuffer = VK_NULL_HANDLE;
PresenterSync m_wsiSemaphores = { };
uint64_t m_trackingId = 0u;