Skip to content

Severe performance issue on NVIDIA GTX 1050 despite smooth 4K performance in Cemu + GPU selection feature request #135

Closed

Description

@DGK001

What happens

Image Image Image Image

Severe performance issue on NVIDIA GTX 1050 despite smooth 4K performance in Cemu + GPU selection feature request

Environment

  • Recomp version: Wind Waker HD v0.2.11-devel.46a38cb8 (46a38cb)
  • Operating system: Windows 10 22H2, build 19045.6466
  • CPU: Intel Core i5-7300HQ
  • Dedicated GPU: NVIDIA GeForce GTX 1050 4 GB
  • Integrated GPU: Intel HD Graphics 630
  • RAM: 8 GB
  • NVIDIA driver: 582.78.0.0
  • Intel graphics driver: 101.2140
  • Graphics API: Vulkan

Summary

Wind Waker HD Recomp runs at only around 8–10 FPS on my NVIDIA GTX 1050, even at 1.0x internal resolution scale (1280×720).

However, the same game runs smoothly at approximately 30 FPS in Cemu 2.6 using Vulkan and the same NVIDIA GPU, even with the resolution graphics pack set to 3840×2160 (4K).

I previously played roughly half of the game in Cemu on this laptop without performance problems. I reinstalled Cemu and tested it again to confirm the difference.

This strongly suggests that the hardware is capable of running the game at a playable framerate and that the severe performance problem may be specific to Recomp or its rendering implementation on this system.

Performance measurements

NVIDIA GTX 1050 — buffer cache enabled, 1.0x scale

  • Average FPS: 10.4
  • Average frame time: 96.2 ms
  • GPU interval: 4.55 ms
  • Render CPU time: 6.12 ms
  • Flush time: 74.28 ms (2 flushes per frame)
  • Draw calls: 979 per frame
  • Uploads: 8.83 MiB per frame

NVIDIA GTX 1050 — buffer cache disabled, 1.0x scale

Tested with the environment variable WWHD_VK_BUFFER_CACHE=0.

  • Average FPS: 8.8
  • Average frame time: 114.20 ms
  • GPU interval: 4.13 ms
  • Render CPU time: 7.03 ms
  • Flush time: 94.69 ms (2 flushes per frame)
  • Draw calls: 979 per frame
  • Uploads: 14.56 MiB per frame

Disabling the buffer cache did not improve performance; it made the result slightly worse.

NVIDIA GTX 1050 — buffer cache enabled, 1.5x scale

  • Average FPS: 10.0
  • Average frame time: 99.75 ms
  • GPU interval: 7.64 ms
  • Render CPU time: 13.15 ms
  • Flush time: 51.07 ms (2 flushes per frame)
  • Draw calls: 2777 per frame
  • Uploads: 9.25 MiB per frame

Reducing the internal resolution from 1.5x to 1.0x did not meaningfully improve the framerate.

The measurements were captured in different scenes, so draw-call and upload counts should not be treated as a direct scene-to-scene comparison. However, the very high flush times and low reported GPU intervals are notable.

Intel HD Graphics 630 — buffer cache disabled, 1.0x scale

  • Average FPS: approximately 29.9
  • Average frame time: 33.37 ms
  • GPU interval: 15.68 ms
  • Render CPU time: 15.76 ms
  • Flush time: 0.15 ms
  • Draw calls: 4300 per frame
  • Uploads: 18.14 MiB per frame

This was a separate test in a different scene, so it is not a controlled benchmark against the NVIDIA measurements. Nevertheless, Recomp ran at approximately 30 FPS on the integrated GPU, while performance on the dedicated NVIDIA GPU was around 9–10 FPS.

Troubleshooting already performed

  • Confirmed that Recomp detects the NVIDIA GTX 1050 and reports it as the active GPU.
  • Set Windows graphics preferences and NVIDIA Control Panel to prefer the high-performance NVIDIA GPU.
  • Tested both 1.5x and 1.0x internal resolution scales.
  • Tested with the Vulkan buffer cache enabled and disabled.
  • Disabling the Intel GPU in Device Manager was also tested, but it did not resolve the performance issue.
  • Monitored GPU and CPU usage. During the low-FPS test, NVIDIA GPU utilization was around 6%, GPU temperature was approximately 46°C, CPU usage was around 50%, and system memory usage was approximately 6 GB out of 8 GB.

The GPU does not appear to be fully saturated. The unusually high Vulkan flush times may be relevant, although I cannot determine the exact cause from these measurements.

Comparison with Cemu

I installed and tested Cemu 2.6 with the same game and laptop.

The Cemu window reports Vulkan and NVIDIA GPU, with approximately 30 FPS during gameplay. I set the game's resolution graphics pack to 3840×2160 (4K), and gameplay remained smooth.

This is a substantial difference compared with Recomp, which reaches only around 8–10 FPS even at 1280×720 internal resolution on the same hardware.

Feature request: GPU selection in Recomp

Could you consider adding a GPU selection option in the launcher or graphics settings?

On laptops with both integrated and dedicated GPUs, it would be useful to select the preferred graphics device directly in Recomp instead of relying entirely on Windows graphics preferences or the NVIDIA Control Panel.

Ideally, Recomp could list the available Vulkan physical devices and let the user select one, with a restart prompt if necessary.

This would make GPU selection and troubleshooting much easier for users with hybrid-graphics laptops.

Performance report

Wind Waker HD v0.2.11-devel.46a38cb8 (46a38cb), Windows 10 22H2 (build 19045.6466), NVIDIA GeForce GTX 1050, driver 582.78.0.0, Vulkan 1.4.312

performance report: renderer Vulkan, host SDL, 30 fps, internal scale 1.0x, buffer cache on

FPS 8.4 (average 8.9), frame 112.89 ms (worst 149.98), average logic steps/s 8.9

Game CPU: 0.00 ms (avg 0.91)

Render CPU: 0.00 ms (avg 1.95)

GPU interval: 3.63 ms (avg 3.88)

CPU time is thread running time per output frame. GPU submission intervals may include stalls; not GPU load.

[prof] frame 240: 120 frames (0 hold), 112.44 ms/frame, 8.9 swaps/s, 8.9 logic steps/s; render thread CPU 5.73 ms/frame, in ops 99.56 ms/frame, idle (waiting for commands) 10.83 ms/frame

[prof] ops ms/frame: regs 0.87 (10648/frame) draw 2.77 (407/frame) clear 0.06 (7/frame) copy 0.06 (0/frame) scan 0.04 (2/frame) invalidate 0.22 (192/frame) flush 25.40 (2/frame) drawdone 0.02 (2/frame) swap 70.09 (1/frame) other 0.03 (23/frame)

[prof] draw phases ms/frame (1 draw in 64 sampled): shader 0.33 indices 0.08 targets 0.11 pipeline 0.08 uniforms 0.32 textures 0.76 descriptors 0.17 pass 0.19 record 0.20 vertex 0.42 submit 0.08; untracked 0.02; 6.81 us/draw

[prof] render thread waits ms/frame: GPU 94.34 (1.24/frame) acquire 0.01 present 0.06; game thread waits for the render thread: DrawDone 98.90 ms (2.00/frame)

[prof] write-back to guest memory: 0 surfaces, 0.0 KiB, read 0.000 ms; DrawDone checks 2.00/frame, 0.32 us each

[prof] uploads MiB/frame 2.74; logic/30 fps frames: other 0.11 vertex 2.42 index 0.00 ubo 0.00 uniforms 0.14 texture 0.06

[prof] unique guest MiB/frame (7 frames sampled): all 0.51; vertex 0.44 of 2.52 copied index 0.06 of 0.00 copied ubo 0.00 of 0.00 copied

[prof] draw classes: 8.5% same registers, 7.6% only buffer pointers/ALU constants, 83.9% other (407 draws/frame); top other writes/frame: SQ_PGM(A225) 269 CB_BLEND/STENCILREF(A104) 153 SQ_PGM(A216) 124 SQ_PGM(A210) 124 CB_BLEND/STENCILREF(A10E) 123 SQ_PGM(A217) 89 DB/CB/PA control(A202) 80 SQ_TEX_RESOURCE(E003) 78

[prof] shader translations so far 298: 294 new programs, 0 differ from an existing variant only in unused texture units/samplers; differing words vs. nearest variant: SPI_PS_INPUT_CNTL 4 fetch shader 3 VTX_SEMANTIC 2 SPI_VS_OUT_ID 2

wwhd.log

Steps to reproduce

  1. Launch Wind Waker HD Recomp v0.2.11-devel.46a38cb8 on Windows 10 using an NVIDIA GeForce GTX 1050.
  2. Start the game and enter gameplay.
  3. Set the internal resolution scale to 1.0x (1280×720).
  4. Observe the framerate and Vulkan performance statistics.
  5. Optionally, test with the Vulkan buffer cache disabled by setting WWHD_VK_BUFFER_CACHE=0.
  6. Compare the performance with Cemu 2.6 on the same laptop, using Vulkan and the NVIDIA GPU. Cemu runs at approximately 30 FPS with the resolution graphics pack set to 3840×2160 (4K).

Save state and save file, or why you can't add them

No save state is attached because this is a performance issue during normal gameplay, not a crash.

Version

v0.2.11-devel.46a38cb8

Platform

Windows

Hardware

i5 7300hq 1050 4gb 8ram

Renderer

Vulkan

Logs

No response

Activity

  1. lschaupp commented on Oct 10, 2026

    @lschaupp
    Contributor

    Thanks for the very thorough report, @DGK001. The numbers and the log already narrow it down a lot.

    Your GTX 1050 is almost idle: about 3.6 ms of GPU work per frame and 6 % utilisation. But our render thread waits about 94 ms per frame for the GPU to report that the work is finished, and the game waits on that twice per frame. So the work itself is fast, but the "finished" signal arrives very late. Your log also shows the NVIDIA Optimus layers (VK_LAYER_NV_optimus, VK_LAYER_NV_present): on this laptop the NVIDIA GPU renders, while the screen is attached to the Intel GPU. That fits with the game running at 30 fps on the Intel GPU alone. Cemu probably doesn't wait for the GPU as often as we do, which would explain why it's fine on the same hardware.

    Could you try these, one at a time, and tell us the FPS (the performance overlay is enough)?

    1. In the settings overlay: Graphics → Presentation → Mailbox, then Immediate (your log shows the default, FIFO/vsync).
    2. In the NVIDIA Control Panel → Manage 3D settings, for Wind Waker HD:
      • Vulkan/OpenGL present method: try Prefer layered on DXGI swapchain, and also Prefer native;
      • Power management mode: Prefer maximum performance.
    3. Turn the Steam overlay off for a test run. Its Vulkan layers are loaded into the game too (VK_LAYER_VALVE_steam_overlay, fossilize).

    If one of them fixes it, we know it's presentation on Optimus and can choose a better default for these laptops. If none helps, we'll look at how often and how we wait for the GPU.

    GPU selection: good idea, and it's planned. Right now the game takes the first suitable GPU in the driver's order. We'll add a list of the Vulkan GPUs to the graphics settings, so hybrid laptops don't depend on Windows or the NVIDIA Control Panel. In your case the NVIDIA GPU was used, so selection alone won't fix this slowdown, but it will make tests like these easier.

  2. DGK001 commented on Oct 10, 2026

    @DGK001
    Author

    I tested the following on v0.2.12:

    1. Presentation modes

      • FIFO: 8.9 FPS average
      • Mailbox: 15.8 FPS reported average (around 10.9 FPS in the 120-frame sample)
      • Immediate: 14.8 FPS reported average (around 10.5 FPS in the 120-frame sample)
    2. NVIDIA Vulkan/OpenGL present method

      • Prefer layered on DXGI Swapchain: 9.3 FPS
      • Prefer native: 9.0 FPS
    3. Other settings

      • NVIDIA power management was already set to Prefer maximum performance.
      • Steam Overlay was disabled.
    4. GPU comparison

      • GTX 1050: around 9–11 FPS; GPU interval around 4 ms.
      • Intel HD Graphics 630: stable 30 FPS.

    None of these changes resolved the issue. The presentation modes change where the frame time is spent, but performance remains poor on the GTX 1050. What would you suggest trying next?

  3. lschaupp commented on Oct 10, 2026

    @lschaupp
    Contributor

    Thanks for testing all of that so carefully, @DGK001, it narrows it down a lot. Your GPU itself is nearly idle (about 4 ms per frame); the time goes into waiting for the NVIDIA GPU to report finished work, and that wait seems tied to how frames are presented through Optimus, which is why Mailbox helps a little.

    Three more quick tests, if you can:

    1. Full screen (F11 or Alt+Enter) instead of a window.
    2. If your laptop has an HDMI port, an external monitor on it. On many laptops HDMI is wired directly to the NVIDIA GPU, which skips the Optimus copy to the Intel GPU. If the game runs well there, we've found the cause.
    3. Start the game once with the environment variable WWHD_PEEKZ=0, to rule out a small depth readback the game does every frame.

    A performance report (overlay) plus the wwhd.log from each test would help, like the ones you already attached.

  4. added a commit that references this issue on Oct 11, 2026
  5. DGK001 commented on Oct 11, 2026

    @DGK001
    Author

    wwhd.log
    Image
    Image
    Image

    I tested the new devel build, WindWakerHD-v0.2.12-devel.4b83c037-windows-x86_64, with the GTX 1050 selected.

    1. Performance

    The performance is now much better:

    • FPS: 30.0 (32.1 average)
    • Internal scale: 3.0x (4K)
    • Render thread CPU: 14.32 ms average
    • GPU interval: 26.93 ms average
    • GPU wait: 0.00 ms

    The GPU wait issue appears to be resolved.

    2. Shadow rendering issue in the new build

    I noticed a visual issue that only occurs at 4K (3.0x internal scale). The shadows intermittently switch between sharp and extremely blurry when I move around or rotate the camera. When Link enters an affected shadow, a dark yellow outline or halo appears around him.

    Switching to Full HD makes the issue disappear. I tried changing the graphics settings, but nothing fixed it. I have screenshots showing the issue and will attach them along with the performance report and wwhd.log.

    3. Further testing

    I haven't run the three tests you suggested on the previous version yet. Are they still relevant for diagnosing the original issue?

  6. lschaupp commented on Oct 11, 2026

    @lschaupp
    Contributor

    Great news, thanks @DGK001! So with the GTX 1050 selected the original problem is solved, and the three earlier tests aren't needed anymore.

    The shadow problem is real and not specific to your GPU: we can reproduce it on a Mac too. Depending on the camera angle, shadows switch between sharp and soft, with the dark outline around Link in the soft ones. It looks tied to how our shadow maps are sized and fitted at high internal resolutions, and we're looking into it now. If you'd like to help narrow it down, start the game once with the environment variable WWHD_SHADOW_SCALE=1 (keeps the shadow maps at the console's size) at 4K and tell us whether the switching and the outline go away.

  7. lschaupp commented on Oct 11, 2026

    @lschaupp
    Contributor

    Closing this one, since the original problem (8–10 fps on the GTX 1050 Optimus laptop) is solved with the GPU selection: a stable 30 fps even at 4K. Thanks a lot for all the careful testing, @DGK001! The shadow problem you found at 4K now has its own issue, #149, with the cause and the fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions