render parity unit G: 40250 tiling selection + verbatim STP terrain

- PythonApplication::Create mirrors 40250 :1196-1251 (SOFTWARE_TILING cfg,
  auto tiling IsFastTNL ? HTP : STP, MinLOD on !IsFastTNL)
- RecordingDevice caps: VertexShaderVersion 1.1 + CLIPTLVERTS (fast T&L -> HTP)
- MapOutdoorRenderSTP.cpp replaced by the full 40250 source (native gate only)
- native_render XYZRHW: fix inverted screen->NDC Y, negative rhw clip,
  no texture transform on TL vertices, specular-alpha vertex fog (capture v9)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-28 13:54:11 +09:00
co-authored by Claude Opus 5.5
parent 91ce13c3cf
commit 863f3771af
10 changed files with 864 additions and 66 deletions
@@ -5,81 +5,97 @@
"contracts": [],
"functions": {
"CMapOutdoor::__RenderTerrain_RenderSoftwareTransformPatch": {
"status": "DIVERGENT",
"status": "NEEDS_LIVE",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__RenderTerrain_RenderSoftwareTransformPatch"
],
"note": "No-op: the Godot terrain adapter draws the height-field (PORT-PLAN §3)."
"note": "Verbatim 40250 body plus an early return when IsNativeTerrainRenderEnabled() is false (Godot terrain adapter path, PORT-PLAN §3), same gate as HTP. Reached only with SOFTWARE_TILING 1 or a non-fast-T&L device. Fake-server STP frame matches HTP layout; pixel parity vs a 40250 STP frame not verified."
},
"CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "NEEDS_LIVE",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat"
],
"note": "Drawn via XYZRHW through RecordingDevice/native_render (fixed 2026-09-28: pretransformed Y mapping, negative-rhw clip, specular-alpha vertex fog); fake-server frame with SOFTWARE_TILING forced matches the HTP layout; pixel parity vs a 40250 STP frame not verified."
},
"CMapOutdoor::__SoftwareTransformPatch_RenderPatchNone": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "NEEDS_LIVE",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RenderPatchNone"
],
"note": "Drawn via XYZRHW through RecordingDevice/native_render (fixed 2026-09-28: pretransformed Y mapping, negative-rhw clip, specular-alpha vertex fog); fake-server frame with SOFTWARE_TILING forced matches the HTP layout; pixel parity vs a 40250 STP frame not verified."
},
"CMapOutdoor::__SoftwareTransformPatch_ApplyStaticShadowRenderState": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_ApplyStaticShadowRenderState"
]
},
"CMapOutdoor::__SoftwareTransformPatch_ApplyDynamicShadowRenderState": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_ApplyDynamicShadowRenderState"
]
},
"CMapOutdoor::__SoftwareTransformPatch_ApplyFogShadowRenderState": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_ApplyFogShadowRenderState"
]
},
"CMapOutdoor::__SoftwareTransformPatch_RestoreStaticShadowRenderState": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RestoreStaticShadowRenderState"
]
},
"CMapOutdoor::__SoftwareTransformPatch_RestoreDynamicShadowRenderState": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RestoreDynamicShadowRenderState"
]
},
"CMapOutdoor::__SoftwareTransformPatch_RestoreFogShadowRenderState": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RestoreFogShadowRenderState"
]
},
"CMapOutdoor::__SoftwareTransformPatch_ApplyRenderState": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_ApplyRenderState"
]
},
"CMapOutdoor::__SoftwareTransformPatch_RestoreRenderState": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RestoreRenderState"
]
},
"CMapOutdoor::__SoftwareTransformPatch_BuildPipeline": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_BuildPipeline"
]
},
"CMapOutdoor::__SoftwareTransformPatch_SetTransform": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_SetTransform"
]
},
"CMapOutdoor::__SoftwareTransformPatch_SetSplatStream": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_SetSplatStream"
]
},
"CMapOutdoor::__SoftwareTransformPatch_SetShadowStream": {
"status": "DIVERGENT",
"impl": [],
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
"status": "PORTED",
"impl": [
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_SetShadowStream"
]
},
"CMapOutdoor::__SoftwareTransformPatch_Initialize": {
"status": "PORTED",