使用D3D11上传多线程纹理

时间:2014-07-08 10:30:56

标签: video textures gpu direct3d directx-11

我目前正在开发一个同时显示多个视频流的应用程序。 解码通过DXVA2 / Intel Media SDK在硬件中进行,部分通过ffmpeg在软件中进行。 解码帧的渲染完全在D3D11中完成(通过Direct2D)。

虽然硬件解码器直接生成NV12格式的纹理,但软件解码器必须将NV12格式的帧上传到GPU内存。由于显示了多个流(通过RTP传送),因此解码和上载在不同的线程上同时发生。

NVidia和AMD建议使用暂存资源的环形缓冲区将数据上传到GPU内存,然后将CopyResource作为快速路径发送到仅GPU的纹理资源。

问题是,映射/取消映射分段资源(来自ringbuffer)(使用MAP_WRITE)块 很长一段时间(30..40ms,720p帧)取决于其他并发D3D操作。 我尝试通过延迟上下文调度Map / Unmap,但这只是强制操作到主线程/立即上下文。

以高频同时上传纹理数据的最佳方法是什么?

感谢您的任何建议!

0 个答案:

没有答案