[idd] isolate post-processing by framebuffer slot

Give each in-flight framebuffer a complete post-processing chain and
its own COMPUTE recording slot while retaining one physical queue.

Claim framebuffer ownership before submitting compute work, and use
the frame index for both COMPUTE and COPY recording state. Drain
in-flight work before reconfiguring either chain so COPY never
references replaced effect resources.

Require both chains to contain the same effects, preserve pending
damage, and release ownership on every pre-copy failure path.
This commit is contained in:
Geoffrey McRae
2026-08-03 19:01:38 +10:00
parent ff4ca7d786
commit fa2769b332
7 changed files with 198 additions and 86 deletions

View File

@@ -137,7 +137,7 @@ CD3D12Device::InitResult CD3D12Device::Init(CIVSHMEM &ivshmem,
if (m_computeEnabled &&
!m_computeQueue.Init(m_device.Get(), D3D12_COMMAND_LIST_TYPE_COMPUTE,
L"Compute", CD3D12CommandSlot::FAST, 1))
L"Compute", CD3D12CommandSlot::FAST, 2))
return InitResult::FAILURE;
DEBUG_INFO("Created CD3D12Device");
@@ -207,7 +207,7 @@ CD3D12CommandSlot * CD3D12Device::GetCopySlot(unsigned frameIndex)
return m_copyQueue.Acquire(frameIndex);
}
CD3D12CommandSlot * CD3D12Device::GetComputeSlot()
CD3D12CommandSlot * CD3D12Device::GetComputeSlot(unsigned frameIndex)
{
if (!m_computeEnabled)
{
@@ -215,5 +215,5 @@ CD3D12CommandSlot * CD3D12Device::GetComputeSlot()
return nullptr;
}
return m_computeQueue.Acquire();
return m_computeQueue.Acquire(frameIndex);
}