DirectX12 - ExecuteCommandLists 和 Present 函数

DirectX12 - ExecuteCommandLists and Present function

我在微软示例中发现:

void D3D12HelloTriangle::OnRender()
{
// Record all the commands we need to render the scene into the command list.
PopulateCommandList();

// Execute the command list.
ID3D12CommandList* ppCommandLists[] = { m_commandList.Get() };
m_commandQueue->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists);

// Present the frame.
ThrowIfFailed(m_swapChain->Present(1, 0));

WaitForPreviousFrame();
}

实际是如何工作的? ExecuteCommandLists 是一个异步函数调用,因此这意味着代码将继续执行并命中 Present 函数。

Present 通话后会发生什么?比方说,GPU 仍在绘图、工作并调用 present。现在是同步调用吗?当 gpu 仍在绘图时,它无法呈现缓冲区。那是对的吗 ?有人可以解释这里发生了什么吗?

Present 也是一个异步命令,它告诉 GPU 从交换链中的下一个缓冲区开始扫描(显示)。您不必担心 GPU 在 'Flip' 发生之前没有完成所有先前发出的工作(在图形命令队列上)。