NVIDIA
Clarification on nvIFR capture in async mode vs DXGI shimmer
Hi all, I've been going through the DXIFR async hw encode sample and the DXGI shimmer sample and I have a few points that I hope can be clarified. My use case is basically a single process multi rendertarget environment and I need to encode each render target. So in no particular order: a) Async mode with multiple frames in flight would achieve the fastest performance, because it amortizes the encoding latency over several frames? b) Async HW encode with multiple render targets would have a race condition due to the multiple render target switch. I.E 1) bind render target, 2) render 3) NvIFRTransferRenderTargetToHWEncoder() <-- Race is here because of async nature 4) goto 1 for N targets Is there anyway to know when a transfer has occured before encoding has started? c) back-buffer and render-target bound are synonymous. I.E NvIFRTransferRenderTargetToHWEncoder() reads from the back-buffer or whatever is bound to the back buffer. d) The shimmer gets around the race condition(and affords some async) by blitting to a shared surface protected by a IDXGIKeyedMutex and then blitting the shared surface to another swap chain's backbuffer. e) Why can't i just have an interface like the D3D9 version when i can pass in a unique D3D surface per encoder? Thanks folks, your help is most appreciated.
Hi all, I've been going through the DXIFR async hw encode sample and the DXGI shimmer sample and I have a few points that I hope can be clarified.

My use case is basically a single process multi rendertarget environment and I need to encode each render target.

So in no particular order:

a) Async mode with multiple frames in flight would achieve the fastest performance, because it amortizes the encoding latency over several frames?

b) Async HW encode with multiple render targets would have a race condition due to the multiple render target switch. I.E
1) bind render target,
2) render
3) NvIFRTransferRenderTargetToHWEncoder() <-- Race is here because of async nature
4) goto 1 for N targets
Is there anyway to know when a transfer has occured before encoding has started?

c) back-buffer and render-target bound are synonymous. I.E NvIFRTransferRenderTargetToHWEncoder() reads
from the back-buffer or whatever is bound to the back buffer.

d) The shimmer gets around the race condition(and affords some async) by blitting to a shared surface protected by a IDXGIKeyedMutex and then blitting the shared surface to another swap chain's backbuffer.

e) Why can't i just have an interface like the D3D9 version when i can pass in a unique D3D surface per encoder?

Thanks folks, your help is most appreciated.

#1
Posted 02/02/2017 07:16 AM   
Scroll To Top

Add Reply