Hi everyone,
we are investing how to port our application from Windows 7 to Windows 10.
The Requirements are: 60 fps, low latency and no tearing on Windows 10 using DX12
Currently we use a DX9ex full screen application on Windows 7 with DWM disabled.
We have 2 GPUs which have 2 heads each but for this discussion I want to stick to a single GPU using one head.
Configuration:
- Windows 10 version 10.0.14393
- NVIDIA driver 376.63.
- NVIDIA K600 graphics card
Our current measurements (using a ligth sensor and a scope) show that we have
one vsync off additional latency on Windows 10 / DX12 compared to our DX9 full screen solution.
We measure around 50ms (Windows 7 32ms), so one additional frame.
The main question is of course what settings should we use to get the best result (full screen or windows, etc.)
Our initial feeling was based on the info we have: a full screen waitable swap chain were we render each time
when the waitable object is signaled (so a buffer is free).
Our measurement do not show the results expected, why???
We have been watching the video from Jesse Natalie about flipping modes but still have some questions.:
Q1: In the video Jesse talks about windowed mode and full screen.
At @13:20 into video he states: the best option for low latency is a full screen swap chain OR a waitable swap chain.
Does this imply that a waitable swap chain is cannot be a full screen swap chain?
Or in other words one cannot use a waitable object on a full screen swap chain to check if buffer is free
(and as a result the next present call does not block)
Q2: The video suggest (to my understanding) that there are two queues in a swap chain.
a) the present queue (present blocks when this queue is full).
The size of this queue is determined by the buffer count of the swap chain.
How does this relate to the SetMaximumFrameLatency setting???
b) the number of frames completed on the GPU that need to be displayed.
How can one control this?
I am not sure how this works can anybody explain this is more detail?
Q3: Some of the flip modes are not exposed by the API and the system itself
switches between flip, d-flip and i-flip (@26:00).
It is important for us to be in control. We do not want the latency to change
by some mechanism in the OS. Is it therefore better to use the full screen APIs?
Q4: The video discusses all kinds of flip modes. @35:22 into the video it is mentioned that the system
switches to Windowed immediate iflip when using a DX12 swap chain in full screen.
So it there still a difference between a border-less window covering the whole screen
and a swap chain set to full screen LATENCY wise?
Any feedback is welcome
Regards,
TF