protonscr

Ys VIII: Lacrimosa of DANA fps drops when text are loading on Intel GPU

dxvkclosed not our bug
doitsujin/dxvk#5368 · opened 2025-12-07 by kevinwidjaja21 · updated 2026-05-12 · 5 comments · github
Kkevinwidjaja21 2025-12-07 github

When text appears, FPS drops from 45+ to 16 or less. I am unable to attach the video here so please take a look at the mesa issue ticket (https://gitlab.freedesktop.org/mesa/mesa/-/issues/14429). The video shows the frame-time jump during conversation text loading. Similar issue also in menu during initial load of a page can be seen in the video as frame-time spikes.

Same issue on Ys IX: Monstrum Nox. Likely due to the same engine used. The frame-time jumps actually worse there but I cannot get the backtrace for the game.

Switching to xe from i915 seems to fix the issue with frame-time jump during text loading. But introduce a different issue of constant stuttering if the GPU load is high in all game I tried.

Software information

Ys VIII: Lacrimosa of DANA from GOG and launched using Heroic Launcher with umu launcher.

System information

  • GPU: Intel Core Ultra 7 155H iGPU
  • Driver: i915, mesa
  • Wine version: proton-cachyos 10.0-20251126
  • DXVK version: 2.7.1 (commit 8d58ad2f5d846e001dcc48c6f41dbac5ea27fa38 based on proton repo)

Inxi output:

System:
  Host: cachyos-intel Kernel: 6.17.9-2-cachyos-deckify arch: x86_64 bits: 64
    compiler: gcc v: 15.2.1
  Desktop: KDE Plasma v: 6.5.3 tk: Qt v: N/A wm: kwin_wayland dm: SDDM
    Distro: CachyOS base: Arch Linux
CPU:
  Info: 16-core (6-mt/10-st) model: Intel Core Ultra 7 155H bits: 64
    type: MST AMCP arch: Meteor Lake rev: 4 cache: L1: 1.6 MiB L2: 18 MiB
    L3: 24 MiB
  Speed (MHz): avg: 400 min/max: 400/4500:4800:3800:2500 cores: 1: 400
    2: 400 3: 400 4: 400 5: 400 6: 400 7: 400 8: 400 9: 400 10: 400 11: 400
    12: 400 13: 400 14: 400 15: 400 16: 400 17: 400 18: 400 19: 400 20: 400
    21: 400 22: 400 bogomips: 131788
  Flags-basic: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
Graphics:
  Device-1: Intel Meteor Lake-P [Intel Arc Graphics] vendor: Micro-Star MSI
    driver: i915 v: kernel arch: Xe-LPG ports: active: eDP-1 empty: DP-1,DP-2
    bus-ID: 0000:00:02.0 chip-ID: 8086:7d55
  Display: wayland server: X.org v: 1.21.1.21 with: Xwayland v: 24.1.9
    compositor: kwin_wayland driver: gpu: i915 display-ID: 0
  Monitor-1: eDP-1 model: TL070FVXS02-0 res: 1920x1080 hz: 120 dpi: 305
    diag: 179mm (7")
  API: EGL v: 1.5 platforms: device: 0 drv: iris device: 1 drv: swrast gbm:
    drv: iris surfaceless: drv: iris wayland: drv: iris x11: drv: iris
  API: OpenGL v: 4.6 compat-v: 4.5 vendor: intel mesa v: 25.3.1-arch1.2
    glx-v: 1.4 direct-render: yes renderer: Mesa Intel Arc Graphics (MTL)
    device-ID: 8086:7d55 display-ID: :0.0
  API: Vulkan v: 1.4.328 surfaces: N/A device: 0 type: integrated-gpu
    driver: mesa intel device-ID: 8086:7d55
  Info: Tools: api: clinfo, eglinfo, glxinfo, vulkaninfo
    de: kscreen-console,kscreen-doctor gpu: gputop, intel_gpu_top, lsgpu
    wl: wayland-info x11: xdpyinfo, xprop, xrandr

Proton-cachyos is built with DXVK-GPLASYNC support but issue still persist when the async feature is disabled.

Apitrace file(s)

Log files

Ddoitsujin maintainer 2025-12-07 · hidden on GitHub github

Thanks for the detailed report and the trace.

Looking at the trace, it's fairly obvious what's going on here, and I'm even seeing the frametime fluctuations when replaying it on my 6900XT. Only reason it's not a huge problem in the game itself is because it's locked to 60 FPS.

Instead of drawing text one character at a time with some font texture atlas - like any normal game would - this instead renders text entirely on the CPU. Which would still be fine if it just derped the rendered text into a texture via UpdateSubresource and used that texture to put it on screen, but that would be far too easy and efficient, so instead it's doing something like this:

void update_text(ID3D11Device* dev, ID3D11DeviceContext* ctx, ID3D11Texture2D* text_texture) {
  dev->CreateTexture2D(..., &readback);  /* D3D11_USAGE_STAGING, so basically a cpu-visible buffer */
  ctx->CopyResource(readback, text_texture);
  /* oops, need to wait for the copy to finish on the GPU, which in turn
   * happens after the entire frame has been rendered... */
  ctx->Map(readback, 0, D3D11_MAP_READ, ...);
  [...] /* memcpy mapped texture data into internal buffer */
  ctx->Unmap(readback, 0);
  dev->Release(readback);

  ... /* do some shit to draw one character into internal buffer on CPU,
       * GPU is completely idle during this time */
  
  dev->CreateTexture2D(..., &upload);  /* D3D11_USAGE_STAGING again */
  ctx->Map(upload, 0, D3D11_MAP_WRITE, ...);
  ... /* memcpy internal buffer to mapped texture memory */
  ctx->Unmap(upload, 0);
  ctx->CopyResource(text_texture, upload);
  dev->Release(upload);
}

More or less the exact same shit that the old Atelier games were doing. Can happen multiple times per frame, because why not.

TL;DR the game is stupid as fuck and makes us wait for the entire frame to finish rendering on the GPU just to add a single character of text. If changing kernel drivers helps then that's going to be either due to high submission overhead, or due to high latency between GPU work completing and the VkSemaphore actually getting signaled, which is certainly something that Intel should look at, but the problem is never going to fully go away on weaker GPUs.

Kkevinwidjaja21 2025-12-07 github

Hmm, interesting since this was not an issue on ROG Ally Z1 Extreme. At least not that I notice and I usually play with frame time graph enabled. Still not quite getting your explanation but does your atelier fix can potentially fix this issue?

Ddoitsujin maintainer 2025-12-07 github

I don't really expect my old mod to work, a) Ys 8 is 32-bit and b) the mod makes some assumptions that may not hold true in this game. Here's a 32-bit build in case you want to try it out, but it's entirely untested.

d3d11.zip

Kkevinwidjaja21 2025-12-07 github
  • Ys 8 is 64-bit. Eitherway, the fix didn't work for both ys 8 and ys 9. Don't worry, I am not going to pester you for another fix since this is an issue with the game. I guess I just play it on my desktop or deal with it on my MSI Claw
  • I post it in reddit and it seems to be an issue with Ys Celceta as well which I think run an older version of the same engine but I don't own the game right now so cannot confirm myself.
  • I confirm that this is not an issue with Ys Origin which running entirely different engine (same one as Felghana and Ark of Napishtim), even on my celeron 3125u system. Granted, it is a very old game that run on pentium 3.
  • I guess time to test if Ys X experience this issue as well.
  • Should I close the issue now?
Kkevinwidjaja21 2025-12-07 github

Welp, at least they fix it by Ys X. It does run an a different engine so probably not same behavior there.

Nothing extracted yet.