Hey,
I am working on volumetric video player renderer. It uploads ~100MB of vertex buffers and textures couple times a second and I would like to make sure, that the uploads are completely async (using GPUs copy engine) and I would like to know if there is any way to force upload to VRAM on d3d11 buffer unmap and later on to know if the transfer is finished.
Current strategy in the engine is to map memcpy unmap dynamic buffer (ping pong strategy) and copyResource to default buffer, which happens in the same frame when the data are requested. I want to change it, but would like to be smart about it.
Problem is that I dont see any way to tell driver "hey I will be using this" like D3D9 Preload function and for driver to tell me "your data are ready fine sir". Im basically looking on how to do the same thing as described in this talk, but for D3D11:
http://on-demand.gputechconf.com/gtc/2012/presentations/S0356-GTC2012-Texture-Transfers.pdf
I was analyzing my data transfers with nsight and GPUView and tried these things without much success:
- Deferred context: Which is just a way to record command buffer asynchronously and replay it on main context later
- Creating separate D3D11 upload device: I wasnt able to make any uploads (or at least verify it) with this approach
Seem like that driver knows when the upload was finished according to this:
https://msdn.microsoft.com/en-us/windows/hardware/drivers/display/device-paging-queues
I'll be happy for any advice or articles to study on this.