acdream/tools/cdb/vm2-detail-caps.cdb
Erik fe085cadaa 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>
2026-08-22 18:23:27 +02:00

43 lines
2.1 KiB
Text

* 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