如何判断 Direct2D 工作何时在 GPU 上完成

How do I tell when Direct2D work has finished on the gpu

提问人:Tom Huntington 提问时间:8/24/2023 最后编辑:Tom Huntington 更新时间:8/24/2023 访问量:30

问:

Direct2D API(即 )在 GPU 上异步执行。那么我如何告诉(在 cpu 上)工作(在 gpu 上)已经完成呢?EndDraw

在完成呈现 ID2D1RenderTarget::EndDraw 后,我通过直接调用 IMFSinkWriter::WriteSample 来挂起设备。

P.S. 我要试试apiID3D11Fence

Direct2D Direct3D11

评论

0赞 Simon Mourier 8/24/2023
D2D 完全基于 D3D11 构建,并且不公开它在内部使用的基础 D3D11 对象和着色器。隔离更适合 D3D12 并与之互操作(因为 D3D12 将更多工作留给开发人员)。听起来像是 XY 问题。你为什么需要它?你有可复制的示例代码吗?
0赞 Tom Huntington 8/24/2023
@SimonMourier我从 a 获取并将其传递给 D2D1CreateDevice。似乎这暴露了底层 D3D11 设备,我的代码正在生成正确的结果。(P.S. 挂起是由其他原因引起的,所以我不太确定毕竟真的需要围栏,而且我所做的是正确的)IDXGIDeviceID3D11Device
0赞 Tom Huntington 8/24/2023
@SimonMourier实际上我正在使用 CreateBitmapFromDxgiSurface,这需要我正确获取基础 D3D11 对象The DXGI surface must have been created from the same Direct3D device that the Direct2D device context is associated with.
0赞 Simon Mourier 8/24/2023
基础 DXGI/D3D11 设备并未真正“公开”,只需一个设备即可使用 D2D。但是,为了完成其工作,D2D 使用许多其他基础对象(D3D1 呈现器目标、D3D11 命令列表、着色器等)。这些你无权访问,所以你不能等待任何事情。目前尚不清楚您有什么问题。您可能希望启用调试层太 learn.microsoft.com/en-us/windows/win32/direct3d11/... walbourn.github.io/direct3d-sdk-debug-layer-tricks 用于额外诊断
1赞 Tom Huntington 8/24/2023
我想出了该怎么做,没有任何问题。在之后调用 ID3D11DeviceContext4::Signal 似乎可以解决问题。EndDraw

答: 暂无答案