nx_gsplat_res_gate.nx
buildroot/runtime/nx_gsplat_res_gate.nx
about
nx_gsplat_res_gate.nx -- THE VIEWPORT IS A PARAMETER, AND HERE IS THE PROOF.
WHY THIS GATE EXISTS. Until 2026-08-23 nx_gsplat rendered at a COMPILE-TIME 512x384 = 196,608 px.
Every stage read the module consts GW/GH/GHW/GHH/GFOCAL, so the rasterizer -- and every "second
renderer" the three-stage decomposition exists to enable, nx_gsplat_tile_lib included -- could only
ever emit a postage stamp. A beauty-tier frame is 1920x1080 (10.55x the pixels). The ceiling was
never a graphics limit; it was five constants, and the inner stages (gs_blend_rect's stride_w,
gs_resolve's npx) were ALREADY viewport-agnostic. This gate holds the widening honest in BOTH
directions: the historic frame must be untouched, and the wide frame must actually be wide.
THE TEETH A PLAUSIBLE-BUT-WRONG IMPLEMENTATION FAILS:
T4 is the ANTI-VACUITY tooth. An implementation that accepts w/h and IGNORES them still renders
512x384 and passes every "it rendered something" check. It cannot pass T4, which requires lit
pixels at an index BEYOND the entire historic framebuffer -- a region that does not exist in a
512x384 render -- and a lit-count ratio no unwidened renderer can reach (its ratio is exactly 1).
T1 is the NEUTRALITY control: the historic entry point and the _at entry point at the historic
viewport must produce BYTE-IDENTICAL frames. Widening that disturbs the incumbent is a revert.
T5/T6 are the FOV pair, asked both directions, because a derivation nobody can falsify is a guess.
gs_focal_for(h) scales focal by h/GH, which holds tan(vfov/2) constant. T5 requires the derived
focal to preserve the vertical angle; T6 requires the UNSCALED focal to BREAK it. A tooth that
only ever sees the right answer has not tested the derivation.
NOTE ON ASPECT: focal scaling preserves the VERTICAL field of view. 512x384 is 4:3 and 1920x1080 is
16:9, so the HORIZONTAL extent legitimately widens -- exactly as a real camera does when the gate is
opened wider. That is why T5 measures the vertical axis: it is the axis the derivation claims.
license_tier: ORIGINAL expect_exit: 0
dependencies 4 imports · 0 importers
imports: nx_syscalls.nxnx_itrig.nxnx_gsplat.nxnx_gate_verdict.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 33 | const RG_GRID: i64 = 8 |
| 34 | const RG_NG: i64 = 64 // RG_GRID squared |
| 35 | const RG_BW: i64 = 1920 // the operator's stated beauty-tier bar |
| 36 | const RG_BH: i64 = 1080 |
| 37 | const RG_CAMZ: i64 = 30 |
| 38 | const RG_RTAN: i64 = 250 |
| 39 | const RG_XSPAN: i64 = 10000 |
| 40 | const RG_YSPAN: i64 = 8000 |
| 41 | const RG_PROBE_Y: i64 = 8000 // the vertical probe point for the FOV teeth |
| 42 | const RG_W64: i64 = 8 |
| 43 | const RG_RATIO_FLOOR: i64 = 2 // see T4: the DERIVED ratio is 10.55; an unwidened renderer |
functions
| 48 | func rg_abs(v: i64) -> i64 { if v < 0 { return 0 - v } return v } called by 1: main |
| 51 | func rg_scene(gauss: *i64) -> i64 |
| 66 | func rg_render(gauss: *i64, ng: i64, w: i64, h: i64, focal: i64, fb: *i64, historic: i64) -> i64 |
| 88 | func rg_lit(fb: *i64, from: i64, to: i64) -> i64 called by 1: main |
| 94 | func rg_same(a: *i64, b: *i64, n: i64) -> i64 called by 1: main |
| 100 | func main() -> i64 |