research(vm2): retail runs SINGLE-PASS detail texturing - the #226 port targets the fallback
Live cdb read on the PDB-paired retail client (owner's AMD GPU): m_caps.bCanDoSinglePassDetailing = 1, trysinglepass = 1, MaxSimultaneousTextures = 8, bTexOpDotProduct3 = 1, LandscapeDetailTextures = 0, EnvironmentDetailTextures = 1, landscape/object detail surfaces null, building/environment non-null, tiling 4 everywhere. So retail's detail combine on modern hardware is the texture-stage path in D3DPolyRender::SetSurface (stage0 alpha PREMODULATE, stage1 colour BLENDCURRENTALPHA): lerp(base*diffuse, detail.rgb, detail.a*diffuse.a) - a mild DARKENING (~-10% mid-tones with 0x06006D58), not the DSTCOLOR+INVSRCALPHA brightening that Campaign AR ported and that the 2026-08-21 findings doc + AR review both analysed. Those described the fallback for adapters without D3DTEXOPCAPS_PREMODULATE; the reviewer's guess that consumer drivers rarely advertised it was wrong. VM1 now carries the re-port (SRCALPHA+INVSRCALPHA, detail.rgb / detail.a*diffuseAlpha, neutral at a==0) together with the fade removal. No distance fade exists on either path. Scripts are read-only attaches with no breakpoints. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
4dbbe8fead
commit
fe085cadaa
6 changed files with 228 additions and 4 deletions
7
tools/cdb/vm2-detail-caps-runner.ps1
Normal file
7
tools/cdb/vm2-detail-caps-runner.ps1
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Campaign VM slice VM2 runner. Retail acclient.exe (2013 PDB-paired build) must be running and in-world.
|
||||
$cdb = "C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe"
|
||||
$script = "$PSScriptRoot\vm2-detail-caps.cdb"
|
||||
$p = Get-Process -Name acclient -ErrorAction SilentlyContinue
|
||||
if (-not $p) { Write-Error "acclient.exe is not running"; exit 1 }
|
||||
Write-Host "attaching to acclient pid $($p.Id) ..."
|
||||
& $cdb -pn acclient.exe -cf $script *>&1 | Tee-Object -FilePath "$PSScriptRoot\..\..\artifacts\vm2\vm2-detail-caps.console.log"
|
||||
43
tools/cdb/vm2-detail-caps.cdb
Normal file
43
tools/cdb/vm2-detail-caps.cdb
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
* Campaign VM slice VM2 - which detail-texturing path does retail run on this GPU?
|
||||
* Read-only: attach, dump the capability + detail state, detach. No breakpoints.
|
||||
.logopen C:\Users\erikn\source\repos\acdream\.claude\worktrees\peaceful-blackburn-5333f0\artifacts\vm2\vm2-detail-caps.log
|
||||
.sympath C:\Users\erikn\source\repos\acdream\refs
|
||||
.symopt+ 0x40
|
||||
.reload /f acclient.exe
|
||||
.echo === module / pdb identity ===
|
||||
lmv m acclient
|
||||
.echo === symbol resolution ===
|
||||
x acclient!RenderDevice::render_device
|
||||
x acclient!Render::*detail*
|
||||
x acclient!Render::m_RenderPrefs
|
||||
x acclient!trysinglepass
|
||||
.echo === THE ANSWER: single-pass detailing capability ===
|
||||
?? acclient!RenderDevice::render_device->m_caps.bCanDoSinglePassDetailing
|
||||
?? acclient!RenderDevice::render_device->m_caps.bTexOpDotProduct3
|
||||
?? acclient!RenderDevice::render_device->m_caps.bTexOpBumpEnvMap
|
||||
?? acclient!RenderDevice::render_device->m_caps.MaxSimultaneousTextures
|
||||
?? acclient!RenderDevice::render_device->m_caps.MaxTextureBlendStages
|
||||
.echo === raw D3D caps (TextureOpCaps: 0x8000 = BLENDCURRENTALPHA, 0x10000 = PREMODULATE, 0x4000 = DOTPRODUCT3) ===
|
||||
?? acclient!RenderDevice::render_device->m_D3DCaps.TextureOpCaps
|
||||
?? acclient!RenderDevice::render_device->m_D3DCaps.MaxSimultaneousTextures
|
||||
?? acclient!RenderDevice::render_device->m_D3DCaps.MaxTextureBlendStages
|
||||
?? acclient!RenderDevice::render_device->m_D3DCaps.PixelShaderVersion
|
||||
.echo === full m_caps dump ===
|
||||
dt acclient!RenderDevice poi(acclient!RenderDevice::render_device) m_caps.
|
||||
.echo === trysinglepass global ===
|
||||
dd acclient!trysinglepass L1
|
||||
.echo === detail category state (null = category off) ===
|
||||
?? acclient!Render::landscape_detail_surface
|
||||
?? acclient!Render::building_detail_surface
|
||||
?? acclient!Render::environment_detail_surface
|
||||
?? acclient!Render::object_detail_surface
|
||||
?? acclient!Render::landscape_detail_tiling
|
||||
?? acclient!Render::building_detail_tiling
|
||||
?? acclient!Render::environment_detail_tiling
|
||||
?? acclient!Render::object_detail_tiling
|
||||
?? acclient!Render::curr_detail_src_blend
|
||||
?? acclient!Render::curr_detail_dst_blend
|
||||
?? acclient!Render::m_RenderPrefs.EnvironmentDetailTextures
|
||||
.echo === done, detaching ===
|
||||
.logclose
|
||||
qd
|
||||
11
tools/cdb/vm2-trysinglepass.cdb
Normal file
11
tools/cdb/vm2-trysinglepass.cdb
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
.logopen C:\Users\erikn\source\repos\acdream\.claude\worktrees\peaceful-blackburn-5333f0\artifacts\vm2\vm2-trysinglepass.log
|
||||
.sympath C:\Users\erikn\source\repos\acdream\refs
|
||||
.reload /f acclient.exe
|
||||
.echo === trysinglepass candidates (decomp: 00820e40 / 00835c04 / 00835c10, all init 1) ===
|
||||
dd 00820e40 L1
|
||||
dd 00835c04 L1
|
||||
dd 00835c10 L1
|
||||
.echo === RenderPrefs ===
|
||||
dt acclient!Render::m_RenderPrefs
|
||||
.logclose
|
||||
qd
|
||||
Loading…
Add table
Add a link
Reference in a new issue