Skip to content

SA RenderStack v3.2

Choose a tag to compare

@prematurely prematurely released this 14 Sep 16:34
· 5 commits to main since this release

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.