diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-28 02:45:00 -0400 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-28 02:45:00 -0400 |
| commit | 3e48eedecf91f8f8d0917f8f78ce26a3d0482e5c (patch) | |
| tree | 5a5b4bf2932b7ea0d7467aa8916a37d73600aceb /src/shader_recompiler | |
| parent | 585e457172693730fe82f34a2ce513ac7cdc948d (diff) | |
nx2: title 4's cutscene scene renders; blit constants for fragment shaders
- Render area falls back to colour target 0 when the surface clip is unset
(Switch 2 titles may never program it); it feeds the synthesized blit block.
- BlitConstantsPass also covers fragment shaders: UV clamp rectangle 0..1
(0x30-0x3c) and zero dither bias.
- Debug: EDEN_NX2_SKIP_VS=<addr,...>, EDEN_NX2_TRACE_VS=<addr>,
EDEN_NX2_UPSCALE_SOURCE[_FORMAT], EDEN_NX2_TRACE_AFTER_UPSCALE,
EDEN_NX2_SAMPLE_AT, skipped-draw reasons, clear tracing.
Showing the raw HDR scene colour through the upscale fallback gives the
correct lit cockpit scene; the game's tonemap pass still outputs black.
Diffstat (limited to 'src/shader_recompiler')
| -rw-r--r-- | src/shader_recompiler/ir_opt/position_pass.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/shader_recompiler/ir_opt/position_pass.cpp b/src/shader_recompiler/ir_opt/position_pass.cpp index e68e175abc..4890346944 100644 --- a/src/shader_recompiler/ir_opt/position_pass.cpp +++ b/src/shader_recompiler/ir_opt/position_pass.cpp @@ -77,9 +77,10 @@ void PositionPass(Environment& env, IR::Program& program) { // Switch 2 fullscreen blit vertex shaders read a parameter block from constant bank 24 (lowered to // bank 17, which games never bind) that the console provides itself. For a blit covering the whole // render target it holds: texel size (0x0/0x4, again at 0x10/0x14), size (0x8/0xc), a UV scale of -// 1 (0x18/0x1c) and the integer source rectangle 0,0..W-1,H-1 (0x50-0x5c). +// 1 (0x18/0x1c), the UV clamp rectangle 0,0..1,1 (0x30-0x3c, read by the fragment shader), a zero +// dither bias (0x40-0x48) and the integer source rectangle 0,0..W-1,H-1 (0x50-0x5c). void BlitConstantsPass(Environment& env, IR::Program& program) { - if (env.ShaderStage() != Stage::VertexB) { + if (env.ShaderStage() != Stage::VertexB && env.ShaderStage() != Stage::Fragment) { return; } bool used{}; @@ -110,6 +111,8 @@ void BlitConstantsPass(Environment& env, IR::Program& program) { return ir.BitCast<IR::U32>(height); case 0x18: case 0x1c: + case 0x38: + case 0x3c: return ir.Imm32(0x3f800000U); case 0x58: return IR::U32{ir.ConvertFToU(32, ir.FPAdd(width, ir.Imm32(-1.0f)))}; |
