You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
Custom Discord presence. integrations.discord_rpc.text.title replaces the
name in "Playing Nightcap", and integrations.discord_rpc.images sets the
large and small icons and their hover text. Text and image fields accept {place_name}, {place_icon}, and {creator_name}. A field that expands
an empty placeholder is left out, and text.state: "" hides the state line.
The default Discord card now matches Sober: the title is "Roblox", the
details line is "Playing ", the state is "by ", and
the Roblox badge sits inside the experience icon. The creator comes from the
same Roblox games request that already fetches the experience name. With show_place_name: false the creator is hidden too, so the card shows only
the title and timer.
--profile <file> writes a Chrome-format trace of the Vulkan adapter's
work: presents, GPU waits, submits, ETC2 texture decode, and pipeline and
shader creation. Open it in ui.perfetto.dev. docs/BENCHMARKING.md
describes the benchmark runs, and scripts/summarize_profile_trace.py
turns traces into a before and after table.
Fixed
Texture uploads stalled the frame they were submitted on. ETC2 batches
decoded on worker threads but were then resampled one upload at a time on
the submitting thread, which at the default 4x upscale is sixteen times the
decoded texels. Resampling now runs on the same worker pool, in two passes so
mip level 0 still resolves before the mips built from it. In a 70k-part
place the worst vkQueueSubmit fell from 167ms to 92ms.
Most ETC2 batches decoded on a single thread. Workers were created and
joined per batch, so the parallel floor had to cover that cost and sat at a
1024x1024 image; batches under it ran on the caller, which was 54% of all
decode time in a 70k-part place. Decode workers are now a persistent pool,
and the floor drops to a 128x128 image. Mean decode time in that place fell
from 8.2ms to 4.7ms, and 11.8ms before both texture fixes.
On CPUs with a wide core-speed spread, Feral GameMode pinned the process to
the few fastest cores, concentrating Roblox's worker pool onto them instead
of spreading it. With performance.gamemode: auto, a request that narrows
the CPU affinity is now released again, which releases the pin. Set pin_cores=no in ~/.config/gamemode.ini to keep GameMode without the
pinning, or performance.gamemode: on to accept it. See docs/PERFORMANCE.md.
With show_place_name: false, Discord no longer shows the experience
thumbnail or its name on hover.
The host main thread no longer spins on the engine's message pump, which
cost about half a core and 146,000 empty calls a second. It now rests 100 µs
between polls: sleeping when the governor is performance, parking the
core with TPAUSE on CPUs that have it, spinning otherwise. With GameMode
setting the governor, process CPU in a 60k-part place fell from 216% to
107% at the same 120 fps. MOCKTAIL_ENGINE_PUMP_REST forces a mode; see docs/PERFORMANCE.md.
ETC2 uploads with a bufferRowLength or bufferImageHeight larger than
the image read the padded rows as packed data and decoded garbage.
ETC2 resampling created and joined worker threads on every batch. It now
runs on the persistent decode pool.
A failed trace write left the profile writer thread waking every 250 ms
for the rest of the session. It now exits.
The --profile trace gains a pump slice for the engine's main-thread
step.