# bo3b/3dmigoto architecture

> Architecture diagram of the GitHub repository bo3b/3dmigoto, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-03). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bo3b/3dmigoto
- Repository: https://github.com/bo3b/3dmigoto

## Overview

#### Purpose and runtime

3Dmigoto is a native Windows Direct3D interception/modding system, originally for stereoscopic-effect fixes and now general DX11 game modding. It is built as a Visual Studio C++ solution (`StereovisionHacks.sln`) and deployed beside a target game as replacement/wrapper DLLs plus `d3dx.ini` and `ShaderFixes`. Primary runtime targets are injected/loaded D3D9, D3D10, D3D11, DXGI, D3DCompiler, and NVAPI DLL facades.

#### DLL entry and API interception

Versioned wrapper projects expose expected Direct3D compiler/API DLL exports and forward or intercept calls:
- `DirectX11/DLLMainHook.cpp`, `DirectX11/D3D11Wrapper.cpp`, `DirectX11/d3d11Wrapper.def`
- `DirectX9/d3d9Wrapper.cpp`, `DirectX9/DLLMainHookDX9.cpp`
- `DirectX10/d3d10Wrapper.cpp`, `DirectXGI/DXGIWrapper.cpp`

For D3DCompiler variants, thin DLL projects (`D3DCompiler_39/Main.h`, `D3DCompiler_43/Main.h`) use shared wrapping logic in `D3DCompiler/d3dcWrapper.cpp`. This boundary receives game API calls and establishes interception before calls reach the real graphics runtime.

#### D3D device/context proxy layer

The central DX11 path wraps DXGI, devices, and immediate/deferred contexts, allowing calls and COM objects to be observed or replaced:
- `DirectX11/HackerDXGI.cpp`, `DirectX11/HackerDevice.cpp`, `DirectX11/HackerContext.cpp`
- `DirectX11/HookedDXGI.cpp`, `DirectX11/HookedDevice.cpp`, `DirectX11/HookedContext.cpp`

The analogous DX9 layer consists of hook/proxy implementations for the D3D object, device, swap chain, resources, and shaders, such as `DirectX9/HookedD9.cpp`, `DirectX9/HookedDeviceDX9.cpp`, and `DirectX9/HookedSwapChain.cpp`. The key control flow is game render call → wrapper/proxy → analysis, matching, override logic → underlying Direct3D call.

#### Render inspection, hunting, and overrides

Per-API “hunting” and frame-analysis components identify draw calls/resources and support capture or diagnosis:
- `DirectX11/Hunting.cpp`, `DirectX11/FrameAnalysis.cpp`, `DirectX11/DrawCallInfo.h`
- `DirectX9/Hunting.cpp`, `DirectX9/FrameAnalysis.cpp`, `DirectX9/DrawCallInfo.h`

Override components apply configured changes to rendering state and resources:
- `DirectX11/Override.cpp`, `DirectX11/ResourceHash.cpp`, `DirectX11/ShaderRegex.cpp`
- `DirectX9/Override.cpp`, `DirectX9/ResourceHash.cpp`, `DirectX9/ShaderRegex.cpp`

Hashes and optional shader-regex matching form the selection boundary between intercepted game assets and user-authored replacements.

#### Shader pipeline

The repository can decode DirectX shader bytecode, extract reflection/signatures, decompile to HLSL, and assemble shaders:
- `BinaryDecompiler/decode.cpp`, `BinaryDecompiler/reflect.cpp`, `BinaryDecompiler/include/hlslcc.h`
- `HLSLDecompiler/DecompileHLSL.cpp`, `HLSLDecompiler/cmd_Decompiler/cmd_Decompiler.cpp`
- `D3D_Shaders/Assembler.cpp`, `D3D_Shaders/SignatureParser.cpp`

Runtime interception can dump/identify shaders, while replacement shader sources in deployment directories are compiled/consumed to alter selected draw behavior. `TestShaders` holds broad bytecode/HLSL compatibility fixtures and real-game examples.

#### User interaction and presentation

In-process input, overlay, cursor, and command-list subsystems provide runtime controls and visual feedback:
- `DirectX11/input.cpp`, `DirectX11/Overlay.cpp`, `DirectX11/CommandList.cpp`
- `DirectX9/Input.cpp`, `DirectX9/Overlay.cpp`, `DirectX9/CommandList.cpp`

These operate inside the hooked game render loop rather than as a separate application.

#### External integrations and dependencies

The code targets Windows desktop, DirectX 9–11/DXGI, MSVC C++14-era projects, and NVIDIA driver/stereo APIs. NVAPI is wrapped by `NVAPI/DllMain.cpp` and used by DX paths including `DirectX11/nvprofile.cpp`; headers/libs are vendored under `ThirdPartyLibs/nvapi-lib`. Other material bundled dependencies are Nektra hooking (`ThirdPartyLibs/Nektra-lib/NktHookLib.h`), DirectXTK for graphics/UI support, PCRE2 for regex matching, and hardware CRC32C (`crc32c-hw-1.0.5/src/crc32c.cpp`).

Main entry points: [`DirectX11/HookedContext.cpp`](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/HookedContext.cpp) (DX11 device/context proxies), [`DirectX9/HookedDeviceDX9.cpp`](https://github.com/bo3b/3dmigoto/blob/master/DirectX9/HookedDeviceDX9.cpp) (DX9 device proxies), [`DirectX11/Override.cpp`](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/Override.cpp) (Render overrides), [`DirectX11/D3D11Wrapper.cpp`](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/D3D11Wrapper.cpp) (DX11 DLL facade)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Injection &amp; DLL facades"]
  node_dx11_facade["DX11 DLL facade<br/>wrapper DLL<br/>[D3D11Wrapper.cpp]"]
  node_dx9_facade["DX9 DLL facade<br/>wrapper DLL<br/>[d3d9Wrapper.cpp]"]
  node_dx10_dxgi_facades["DX10/DXGI facades<br/>wrapper DLLs<br/>[d3d10Wrapper.cpp]"]
  node_compiler_facades["D3DCompiler facades<br/>wrapper DLLs<br/>[d3dcWrapper.cpp]"]
end

subgraph group_runtime["Hooked render runtime"]
  node_dx11_proxies{{"DX11 device/context proxies<br/>COM proxy layer<br/>[HookedContext.cpp]"}}
  node_dx9_proxies{{"DX9 device proxies<br/>COM proxy layer"}}
  node_inspection["Hunting &amp; frame analysis<br/>render inspection<br/>[FrameAnalysis.cpp]"]
  node_overrides["Render overrides<br/>override engine<br/>[Override.cpp]"]
  node_selection["Hash &amp; regex matching<br/>asset selection<br/>[ResourceHash.cpp]"]
  node_ui_controls["Overlay, input &amp; commands<br/>in-process UI<br/>[Overlay.cpp]"]
end

subgraph group_shader["Shader tooling"]
  node_shader_decode["Bytecode decode &amp; reflection<br/>shader analysis<br/>[decode.cpp]"]
  node_hlsl_decompiler["HLSL decompiler<br/>shader conversion<br/>[DecompileHLSL.cpp]"]
  node_shader_assembler["Shader assembler<br/>shader compiler<br/>[Assembler.cpp]"]
end

subgraph group_integration["External integrations"]
  node_nvapi["NVAPI wrapper<br/>driver API facade<br/>[DllMain.cpp]"]
  node_hook_library["Nektra hook library<br/>hooking dependency<br/>[NktHookLib.h]"]
end

node_game["Target game<br/>host process"]
node_shader_fixes["ShaderFixes<br/>deployed shader assets"]
node_real_d3d["Real Direct3D runtime<br/>Windows graphics APIs"]

node_game -->|"loads"| node_dx11_facade
node_game -->|"loads"| node_dx9_facade
node_game -->|"loads"| node_dx10_dxgi_facades
node_game -->|"loads"| node_compiler_facades
node_dx11_facade -->|"creates proxies"| node_dx11_proxies
node_dx10_dxgi_facades -->|"hooks DXGI path"| node_dx11_proxies
node_dx9_facade -->|"creates proxies"| node_dx9_proxies
node_dx11_proxies -->|"observes draw calls"| node_inspection
node_dx9_proxies -->|"observes draw calls"| node_inspection
node_inspection -->|"identifies assets"| node_selection
node_selection -->|"selects changes"| node_overrides
node_shader_fixes -->|"provides replacements"| node_overrides
node_overrides -->|"alters DX11 calls"| node_dx11_proxies
node_overrides -->|"alters DX9 calls"| node_dx9_proxies
node_dx11_proxies -->|"drives render-loop UI"| node_ui_controls
node_dx11_proxies -->|"forwards calls"| node_real_d3d
node_dx9_proxies -->|"forwards calls"| node_real_d3d
node_compiler_facades -.->|"captures bytecode"| node_shader_decode
node_shader_decode -->|"decoded shader data"| node_hlsl_decompiler
node_shader_decode -->|"signatures"| node_shader_assembler
node_hlsl_decompiler -.->|"produces editable HLSL"| node_shader_fixes
node_shader_assembler -.->|"produces replacement bytecode"| node_shader_fixes
node_dx11_proxies -->|"uses driver APIs"| node_nvapi
node_dx11_facade -.->|"uses hooks"| node_hook_library

click node_dx11_facade "https://github.com/bo3b/3dmigoto/blob/master/DirectX11/D3D11Wrapper.cpp"
click node_dx9_facade "https://github.com/bo3b/3dmigoto/blob/master/DirectX9/d3d9Wrapper.cpp"
click node_dx10_dxgi_facades "https://github.com/bo3b/3dmigoto/blob/master/DirectX10/d3d10Wrapper.cpp"
click node_compiler_facades "https://github.com/bo3b/3dmigoto/blob/master/D3DCompiler/d3dcWrapper.cpp"
click node_dx11_proxies "https://github.com/bo3b/3dmigoto/blob/master/DirectX11/HookedContext.cpp"
click node_dx9_proxies "https://github.com/bo3b/3dmigoto/blob/master/DirectX9/HookedDeviceDX9.cpp"
click node_inspection "https://github.com/bo3b/3dmigoto/blob/master/DirectX11/FrameAnalysis.cpp"
click node_overrides "https://github.com/bo3b/3dmigoto/blob/master/DirectX11/Override.cpp"
click node_selection "https://github.com/bo3b/3dmigoto/blob/master/DirectX11/ResourceHash.cpp"
click node_ui_controls "https://github.com/bo3b/3dmigoto/blob/master/DirectX11/Overlay.cpp"
click node_shader_decode "https://github.com/bo3b/3dmigoto/blob/master/BinaryDecompiler/decode.cpp"
click node_hlsl_decompiler "https://github.com/bo3b/3dmigoto/blob/master/HLSLDecompiler/DecompileHLSL.cpp"
click node_shader_assembler "https://github.com/bo3b/3dmigoto/blob/master/D3D_Shaders/Assembler.cpp"
click node_nvapi "https://github.com/bo3b/3dmigoto/blob/master/NVAPI/DllMain.cpp"
click node_hook_library "https://github.com/bo3b/3dmigoto/blob/master/ThirdPartyLibs/Nektra-lib/NktHookLib.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dx11_facade,node_dx9_facade,node_dx10_dxgi_facades,node_compiler_facades toneBlue
class node_dx11_proxies,node_dx9_proxies,node_inspection,node_overrides,node_selection,node_ui_controls toneAmber
class node_shader_decode,node_hlsl_decompiler,node_shader_assembler toneMint
class node_nvapi,node_hook_library toneRose
class node_game,node_shader_fixes,node_real_d3d toneNeutral
```

## Components

### Injection & DLL facades

Replacement DLLs loaded by the target game.

- [DX11 DLL facade](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/D3D11Wrapper.cpp): wrapper DLL · Exports D3D11 entry points and establishes hooks. · `DirectX11/D3D11Wrapper.cpp`
- [DX9 DLL facade](https://github.com/bo3b/3dmigoto/blob/master/DirectX9/d3d9Wrapper.cpp): wrapper DLL · Exports and intercepts D3D9 calls. · `DirectX9/d3d9Wrapper.cpp`
- [DX10/DXGI facades](https://github.com/bo3b/3dmigoto/blob/master/DirectX10/d3d10Wrapper.cpp): wrapper DLLs · Intercept DirectX 10 and DXGI API boundaries. · `DirectX10/d3d10Wrapper.cpp`
- [D3DCompiler facades](https://github.com/bo3b/3dmigoto/blob/master/D3DCompiler/d3dcWrapper.cpp): wrapper DLLs · Versioned compiler DLLs share interception logic. · `D3DCompiler/d3dcWrapper.cpp`

### Hooked render runtime

In-process interception, inspection, and render changes.

- [DX11 device/context proxies](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/HookedContext.cpp): COM proxy layer · Wraps DXGI, devices, and immediate or deferred contexts. · `DirectX11/HookedContext.cpp`
- [DX9 device proxies](https://github.com/bo3b/3dmigoto/blob/master/DirectX9/HookedDeviceDX9.cpp): COM proxy layer · Wraps D3D objects, devices, swap chains, resources, and shaders. · `DirectX9/HookedDeviceDX9.cpp`
- [Hunting & frame analysis](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/FrameAnalysis.cpp): render inspection · Identifies draw calls and supports capture and diagnosis. · `DirectX11/FrameAnalysis.cpp`
- [Render overrides](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/Override.cpp): override engine · Changes selected rendering state and resources. · `DirectX11/Override.cpp`
- [Hash & regex matching](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/ResourceHash.cpp): asset selection · Matches intercepted resources and shaders to configured replacements. · `DirectX11/ResourceHash.cpp`
- [Overlay, input & commands](https://github.com/bo3b/3dmigoto/blob/master/DirectX11/Overlay.cpp): in-process UI · Provides runtime controls and visual feedback in the render loop. · `DirectX11/Overlay.cpp`

### Shader tooling

Shader decoding, decompilation, and assembly pipeline.

- [Bytecode decode & reflection](https://github.com/bo3b/3dmigoto/blob/master/BinaryDecompiler/decode.cpp): shader analysis · Extracts shader structure, reflection, and signatures. · `BinaryDecompiler/decode.cpp`
- [HLSL decompiler](https://github.com/bo3b/3dmigoto/blob/master/HLSLDecompiler/DecompileHLSL.cpp): shader conversion · Converts decoded shaders to HLSL. · `HLSLDecompiler/DecompileHLSL.cpp`
- [Shader assembler](https://github.com/bo3b/3dmigoto/blob/master/D3D_Shaders/Assembler.cpp): shader compiler · Assembles shaders and parses signatures. · `D3D_Shaders/Assembler.cpp`

### External integrations

- [NVAPI wrapper](https://github.com/bo3b/3dmigoto/blob/master/NVAPI/DllMain.cpp): driver API facade · Connects runtime paths to NVIDIA driver and stereo APIs. · `NVAPI/DllMain.cpp`
- [Nektra hook library](https://github.com/bo3b/3dmigoto/blob/master/ThirdPartyLibs/Nektra-lib/NktHookLib.h): hooking dependency · Provides low-level API hooking support. · `ThirdPartyLibs/Nektra-lib/NktHookLib.h`

### Other components

- **Target game**: host process · Loads deployed replacement DLLs.
- **ShaderFixes**: deployed shader assets · User-authored replacement shaders consumed at runtime.
- **Real Direct3D runtime**: Windows graphics APIs · Underlying D3D9–11 and DXGI implementation.

## Connections

- Target game → DX11 DLL facade: loads
- Target game → DX9 DLL facade: loads
- Target game → DX10/DXGI facades: loads
- Target game → D3DCompiler facades: loads
- DX11 DLL facade → DX11 device/context proxies: creates proxies
- DX10/DXGI facades → DX11 device/context proxies: hooks DXGI path
- DX9 DLL facade → DX9 device proxies: creates proxies
- DX11 device/context proxies → Hunting & frame analysis: observes draw calls
- DX9 device proxies → Hunting & frame analysis: observes draw calls
- Hunting & frame analysis → Hash & regex matching: identifies assets
- Hash & regex matching → Render overrides: selects changes
- ShaderFixes → Render overrides: provides replacements
- Render overrides → DX11 device/context proxies: alters DX11 calls
- Render overrides → DX9 device proxies: alters DX9 calls
- DX11 device/context proxies → Overlay, input & commands: drives render-loop UI
- DX11 device/context proxies → Real Direct3D runtime: forwards calls
- DX9 device proxies → Real Direct3D runtime: forwards calls
- D3DCompiler facades → Bytecode decode & reflection: captures bytecode
- Bytecode decode & reflection → HLSL decompiler: decoded shader data
- Bytecode decode & reflection → Shader assembler: signatures
- HLSL decompiler → ShaderFixes: produces editable HLSL
- Shader assembler → ShaderFixes: produces replacement bytecode
- DX11 device/context proxies → NVAPI wrapper: uses driver APIs
- DX11 DLL facade → Nektra hook library: uses hooks
