I need assistance with frame times issues please!

Discussion in 'Videocards - NVIDIA GeForce' started by OCD Guy, Feb 7, 2021.

  1. OCD Guy

    OCD Guy Guest

    Messages:
    2
    Likes Received:
    0
    GPU:
    3090
    I am having an annoying issue that I really need assistance with.

    I have a pretty powerful pc with 5950x, 3090, 32gb 3600Mhz CL14 ram, 980 Pro nvme etc and using an LG Oled that is G-Sync compatible.

    And in some of my games my frame time graphs were looking like this:

    [​IMG]

    It's almost like a constant frame time spike.

    I was able to achieve a perfectly flat frame time graph by capping my fps at a frame rate my pc could consistently deliver but it was annoying me that some games had a thinner line with no consistent frame time spike.

    After trying countless things, even so much as a full re-installation of Windows 10 I ended up enabling Ultra low latency mode in the Nvidia Control Panel.

    This has now resulted in this:

    [​IMG]

    So problem solved you could say, well after more digging it seems that Ultra low latency mode is NOT working in DX12 games, and with most new games being developed on DX12 this results in a problem for me.

    The likes of Control on gamepass runs only on DX12 (steam versions has a launcher where you can revert to DX11).

    So how would I go about capping or disabling pre-rendered frames in DX12 games?

    And also can someone knowledgable explain why having low latency mode set to off results in that constant frame time spike graph?
     
  2. Mda400

    Mda400 Maha Guru

    Messages:
    1,089
    Likes Received:
    200
    GPU:
    4070Ti 3GHz/24GHz
    External frame limiters like RTSS or Nvidia Control Panel "Max Frame Rate" option still work in DX12 applications.

    But the low latency mode setting does not work in low-level api's like dx12 or vulkan since they do their own frame queuing (similar to the efficiency of Nvidia Reflex). Feel bad you had to fully reinstall your OS to figure this out.

    In applications that it works with, low latency mode controls the amount of pre-rendered frames the CPU can prepare before passing them onto the GPU. In CPU-intensive situations, setting this OFF can help the CPU keep up with the demand from GPU. Otherwise, set it to ON or ULTRA, which can minimize latency (and possibly frame-time spikes).

    Off, will adhere to the application's pre-rendered frame limit (which is 3 by default in directx 11 and previous)

    On, will limit the pre-rendered frames to 1.

    Ultra goes further and adjusts the frame queue to allow the GPU to grab a frame from the CPU just as it's completed. When using G-Sync, it will enforce a frame limit just under your set refresh rate. This is handy for applications that don't have a frame limiter in-game, but again will not work in dx12 or vulkan.
     
    Last edited: Feb 8, 2021
    OCD Guy likes this.
  3. OCD Guy

    OCD Guy Guest

    Messages:
    2
    Likes Received:
    0
    GPU:
    3090
    Thank you for the explanation.

    Could you please clarify one thing for me though please. Why does having more queued up frames cause frame time spikes in my case? Is it because the 5950x is able to push frames faster than the 3090 can draw them?

    I'm confused as I read that having more pre-rendered frames is supposed to give smoother framerates at the cost of higher input lag. Is it the case that having more pre-rendered frames only really helps CPU's that are less powerful than the GPU?

    I'm finding the opposite in terms of smoothness, as in DX11 games when I set low latency mode to Ultra so essentially no pre-rendered frames my games feel smoother and my frame times appear smoother too.

    As soon as I set low latency mode to off, my frame times are really bad and it's just a consistent frame time spike each frame.

    What's frustrating is I can solve the issue in DX11 games by setting low latency to Ultra. However as you've clarified the pre-rendered frames are controlled in the DX12 API so we have no control over it at all.

    The only way I can get smooth frame times in DX12 games is by setting an fps cap using say RTSS (my personal favourite). But I like using G-SYNC and the frame times are not great when I can't limit the amount of pre-rendered frames.

    Thanks
     
    Last edited: Feb 8, 2021
  4. Mda400

    Mda400 Maha Guru

    Messages:
    1,089
    Likes Received:
    200
    GPU:
    4070Ti 3GHz/24GHz
    The render queue is a buffer and if that buffer gets congested, then that buffer can become "bloated' and frame-time spikes can occur.
    Similar to how congested network buffers cause latency spikes.

    When a CPU is able to keep up with the GPU, holding it back with a larger pre-rendered frame queue can create an unnecessary bottleneck.

    Your 5950x is likely fast enough to keep up with your 3090, but I don't consider that a blanket statement as every application is different and some may not fully utilize your CPU.

    I would say something else in the game or set in the background is causing the issue if you are experiencing frame-time spikes in applications using a low-level video API like DX12. When coded correctly, the render queue should in theory behave like Nvidia Reflex where the application knows exactly when to time frame delivery from the CPU to the GPU to minimize latency.

    General consensus is in-game frame limiters will mostly have lower latency than external frame limiters like RTSS, though they may not always be as precise.
     
    Last edited: Feb 8, 2021

Share This Page