Skip to content

Nightcap v0.3.1

Choose a tag to compare

@github-actions github-actions released this 20 Sep 18:02
· 128 commits to main since this release
d982cd9

Added

  • Each release carries a DEB, an RPM, and a pacman package beside the
    AppImage, with a .sha256 for every file. They install /usr/bin/mocktail
    and conflict with each other and with upstream's mocktail package.
    Nightcap is in no distribution repository or the AUR; the recipes under
    packaging/aur/nightcap{,-bin,-git} build from this repository locally.
  • The AppStream metadata lists the Nightcap releases, so software centres
    show the release history instead of upstream's.

Fixed

  • ETC2 texture decoding no longer blocks the thread that submits the frame.
    Uploads decode on a background dispatcher and the submit carries a timeline
    semaphore wait, so the GPU waits for the texture instead of the render
    thread. Reading the application's compressed bytes moves to that dispatcher
    too whenever they are already mapped. In Blade Ball the worst
    vkQueueSubmit fell from 140ms to 1ms, its p99 from 4.9ms to 0.05ms, and
    the total time spent in submits from 2534ms to 309ms. Frame interval is
    unchanged: the remaining tail is the engine's own main-thread step. A device
    without the timelineSemaphore feature decodes inline as before, as does a
    submit whose pNext already sizes arrays by its semaphore counts.
  • The mouse pointer jumped when a right-click camera drag ended, and drifted
    to the viewport edge during one. The input router inferred pointer capture
    from SDL reporting zero absolute coordinates, which holds on X11 but not on
    Wayland, where the reported position accumulates the relative deltas and
    leaves the window. Motion, button, and wheel events now carry the window's
    relative mouse mode. The right-click camera fallback also only captures
    inside an experience, so the cursor stays free over the app surface.
  • Shutting the window down while an experience was starting or leaving could
    free the pointer capture owner underneath the thread using it. Callers off
    the SDL thread now hold a reference for the length of their call.
  • The TextBox caret did not move when a trailing space was typed in a
    single-line field. The final cluster rect SDL_ttf reports stops at the last
    inked glyph, so the laid-out width is used there instead. Wrapped layouts
    keep the clamp, because their width is the widest line rather than the last.
  • Every TextBox keystroke re-ran TTF_Init, a fontconfig sort, six
    TTF_OpenFont calls, and TTF_Quit on the render thread. The overlay holds
    its opened fonts and reopens them only when the Roblox font or the point
    size changes, keeping the current set when a reopen fails. Measured over 100
    rasters, 1.59ms to 0.12ms per keystroke.
  • Staged ETC2 copies now carry an explicit host-write barrier. A queue
    submission only makes host writes from before it visible to the device, and
    an asynchronous decode writes after the submit, so without the barrier those
    texels were not guaranteed to reach the copy that reads them.

Changed

  • docs/PERFORMANCE.md documents the GameMode settings to run with. A
    desiredgov=powersave in ~/.config/gamemode.ini overrides the packaged
    performance default and clocks the CPU down for the whole session while
    still reporting an active performance request.