Skip to content

3.19.2

Latest

Choose a tag to compare

@suprepupre suprepupre released this 08 Sep 22:47
· 113 commits to main since this release

wow_optimize 3.19.2

Unzip into your World of Warcraft folder, next to Wow.exe. Run
wow_optimize_launcher.exe, press MAX PERFORMANCE, press LAUNCH WOW.


The launcher

Two presets and a switch for bug reports.

MAX PERFORMANCE everything that makes the game faster
DEFAULT what a fresh install runs
EVERYTHING OFF the game as it ships, with the DLL loaded and doing nothing

EVERYTHING OFF is the first thing to try when something looks wrong. If the
problem is still there with it pressed, it is not us.

Every switch carries a mark and sits under a heading that says what the run
below it is for:

[+] makes it faster          [!] not proven yet
[=] stability and fixes      [.] logging
[?] diagnostics, costs frames
[-] changes how it looks or sounds
[x] tried, didn't help

Hover any switch to read what was measured about it. LOGGING: NORMAL / FULL
turns the recorders on when something is wrong and off again when it is not.


Faster

Fourteen of the twenty Direct3D hooks stay out of the vtable. The two that
skip redundant work are kept, along with the four that shadows and the device
lifecycle need. The rest could only count, and what they counted has been
answered on two different clients: 430 million render states, 601 million
sampler states and 1.2 billion texture binds, none of them redundant. That is
about five thousand fewer detours every frame. Draw Call Census puts them all
back when you want the numbers.

string.match decides on the pattern before it reads the string. A pattern
none of the fast paths handles goes straight to the game, so the subject is no
longer walked byte by byte, up to four kilobytes of it, to reach a comparison
that was never going to match.

Batch the Game's File Writes and Reuse Compiled Scripts are on by
default. One measured loading screen ran 1576 ms with 49 ms of it reading files;
another spent 2470 ms inside 593,557 nine-byte writes, and 2128 ms inside the
Lua compiler.


Fixed

Shadows that did not refresh and flickered, reported by prince [SANC] and
Sicsoo. Setting a render target resets the viewport, and the render state cache
skipped the SetViewport that put it back, so the shadow pass drew into the
wrong rectangle. On by default, so this was everyone.

Wrong vertex layout after a vertex declaration. Setting a declaration clears
the FVF; the FVF cache kept skipping the call that put it back.

The quality governor pulled your view distance down when you zoned. It read
the end of a loading screen as slow gameplay, halved particle density and cut
farclip, then put both back a minute later. It ignores loading screens now.

Two worker threads started every session for a queue nothing writes to.

Three megabytes of address space came back. The log ring reserved four
megabytes for lines that are about a hundred and fifty characters long. That
space is in the low 2GB, where the game allocates from, and where running out is
what garbles SavedVariables names.

The matrix hook counter printed a negative number. Fifteen counters were
signed 32-bit and the matrix multiply takes about four thousand calls a frame.

Several other counters and reports that were lying, including four render
state filters that skipped nothing at all over 206 million calls, and a
primitive count that went down between reports.


New

Reuse Compiled Scripts Between Sessions. A measured loading screen spends
2128 ms inside the game's Lua compiler. Only 260 ms of that is text the session
had already compiled. The rest is text this session had never seen, and saw the
last time the game ran. This writes the compiled form to
Cache\wow_optimize_bytecode.bin and reads it back on the next launch. Off by
default.

The game can write that form and has no code to read it back, so the reading is
ours. Every script rebuilt from the file is compared against a real compile of
the same text, field by field, into every nested function, each constant by
type, value and addon ownership. That runs for the first 2000 of them and one in
every 256 after, and the whole store switches off for good the first time two of
them differ.

Model Animation Stride holds a distant model's skeleton for a frame instead
of re-solving every bone. Its materials, particles and attached items keep
animating, and nothing within 45 yards is ever held. Off by default.

M2 Matrix Slot Copy (SSE2) replaces three blocks in the model animation
update that move matrices one float at a time. No arithmetic, so the bytes
written are the bytes read. Off by default.

Draw Call Merging was built, measured and removed. 2.4% of 293 million draw
calls could be merged, merging exactly those worked, and the frame rate fell.


If something is wrong

Send Logs\wow_optimize_<date>_<time>.log.

Every report in it opens with [Wrong]: the modules that were asked to run and
did not, each with the line it printed. A switch you left off is not counted
there. That is usually the whole answer.

If you can, press LOGGING: FULL first, play until the problem happens, then
send the log. It turns on the profiler and the counters that record what the
game was doing, so the file can say where the time went.

Please send the whole file rather than an excerpt, and do not trim the first
lines: they carry the build, your settings and what did not install.


If you want to measure something rather than report a bug

Tick A/B Test a Feature under General, and tick the features you want
compared. One session that alternates a feature on and off compares the same
zone, the same addons and the same machine against itself.

Play somewhere the processor is busy: a raid, a battleground, a crowded city.
Standing in a field the game waits on the graphics card, a saving inside the
frame changes no frame time, and the report says so instead of giving you
numbers.