Repository navigation
SA RenderStack v3.2
The ProperShaders render-state guard now lives in the bridge.
What changed
Migration. ProperShadersRenderStateGuard.{h,cpp} and ProperShadersStateRing.{h,cpp} are added under src/bridge/legacy/ and activated from BridgeDirect3D9::CreateDevice. They wrap three ProperShaders patch sites and re-synchronise RenderWare's alpha-test states onto the D3D9 device around the scene render.
Vtable fix. SetRenderState is now resolved from its own IDirect3DDevice9 vtable slot 57. The original code resolved both the set and get entries from slot 58, which made every device-side "set" call a no-op GetRenderState.
Patch sites re-audited for the 2026-07-03 ProperShaders build (1,534,592 bytes, .text CRC32 0x526DBD01):
| Patch site | Old RVA | New RVA |
|---|---|---|
| RenderScene entry | PS+0x1ED80 |
PS+0x25880 |
| RenderFadingEntities | PS+0x1ED60 |
PS+0x25591 |
| main-scene state restore | PS+0x1EAB0 |
PS+0x25BEB |
| phaseAlternate capture | PS+0x153CE4 |
PS+0x16BFF8 |
The RenderScene prologue grew from 5 to 6 bytes (55 8B EC 83 E4 F8); the trampoline steals the complete 6-byte prologue.
Configuration. [ProperShadersRenderStateGuard] and [ProperShadersStateRing] in BridgeD3D9.ini.
Asset
d3d9.dll — the bridge proxy, built from this tag. It loads the D3D9 backend from backend/dxvk-gta at runtime; that backend is not included.
Verification status
Builds clean (0 warnings, 0 errors). Bridge and DXVK export verification passes for both the build artifact and the deployed file.
In-game verification pending.
Requires
FLA++ v1.11 or later. FLA++ no longer contains the guard, so this side has sole ownership, and the text-hash gate accepts exactly the 2026-07-03 ProperShaders build.
Provenance
d3d9.dll built with VS 18 Build Tools (v145), C++23, Win32 Release.