code wiki / _hdl_build / nx_swgpu_gate.nx

nx_swgpu_gate.nx source

↩ module page · 96 lines · 4761 B

1// nx_swgpu_gate.nx -- gate for the SOVEREIGN SOFTWARE GPU rendering a 3D CHARACTER (Path A R5 preview). 2// T1 the HUMANOID renders: a solid block of skin pixels at 512x384 3// T2 PER-PIXEL shading gradient: wide luminance range (lit -> shadow) = real shading, not flat 4// T3 FULL FIGURE (not a blob): skin pixels present in the TOP third (head) AND BOTTOM third (feet) AND middle 5// T4 determinism: two renders byte-identical (integer pipeline, VM-vettable) 6// T5 hi-res 512x384 + PNG knowledge/nx_swchar.png (the eyeball) + a lone sphere PNG nx_swgpu.png 7// license_tier: ORIGINAL expect_exit: 0 8import "nx_syscalls.nx" 9import "nx_png.nx" 10import "nx_swgpu.nx" 11 12func hw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 13func pn(v: i64) -> i64 { 14 let b: *u8 = sys_mmap(32) as *u8 15 var x: i64 = v 16 var neg: i64 = 0 17 if x < 0 { neg = 1; x = 0 - x } 18 var i: i64 = 31 19 if x == 0 { b[i] = 48 as u8; i = i - 1 } 20 while x > 0 { b[i] = (48 + x % 10) as u8; x = x / 10; i = i - 1 } 21 if neg == 1 { b[i] = 45 as u8; i = i - 1 } 22 sys_write(1, (b as i64 + i + 1) as *u8, 31 - i) 23 return 0 24} 25func is_skin(px: i64) -> i64 { let r: i64 = px & 255; let b: i64 = (px >> 16) & 255; if r >= b { return 1 } return 0 } 26func lum(px: i64) -> i64 { return (px & 255) + ((px >> 8) & 255) + ((px >> 16) & 255) } 27 28func main() -> i64 { 29 var fails: i64 = 0 30 let base: i64 = sys_mmap(swgpu_bytes()) as i64 31 sg_humanoid(base, 20) 32 sg_project(base, 500, 0 - 5) // slight yaw, camera 5 units back (bigger figure) 33 sg_render(base, 240, 182, 158) 34 let fb: *i64 = (base + fb_off()) as *i64 35 36 var skin: i64 = 0 37 var minl: i64 = 99999 38 var maxl: i64 = 0 39 var topthird: i64 = 0 40 var midthird: i64 = 0 41 var botthird: i64 = 0 42 var pi: i64 = 0 43 while pi < ww() * hh() { 44 if is_skin(fb[pi]) == 1 { 45 skin = skin + 1 46 let l: i64 = lum(fb[pi]) 47 if l < minl { minl = l } 48 if l > maxl { maxl = l } 49 let row: i64 = pi / ww() 50 if row < hh() / 3 { topthird = topthird + 1 } 51 else { if row < hh() * 2 / 3 { midthird = midthird + 1 } else { botthird = botthird + 1 } } 52 } 53 pi = pi + 1 54 } 55 // T1 56 var t1: i64 = 1 57 if skin < 12000 { t1 = 0 } 58 if skin > 130000 { t1 = 0 } 59 if t1 == 1 { hw("T1 PASS software GPU renders the HUMANOID: " as *u8); pn(skin); hw(" body px at 512x384\n" as *u8) } 60 else { hw("T1 FAIL skin=" as *u8); pn(skin); hw("\n" as *u8); fails = fails + 1 } 61 // T2 62 let span: i64 = maxl - minl 63 if span > 200 { hw("T2 PASS per-pixel shading gradient: lum " as *u8); pn(minl); hw(".." as *u8); pn(maxl); hw(" (span " as *u8); pn(span); hw(")\n" as *u8) } 64 else { hw("T2 FAIL flat span=" as *u8); pn(span); hw("\n" as *u8); fails = fails + 1 } 65 // T3 full figure 66 var t3: i64 = 1 67 if topthird < 400 { t3 = 0 } 68 if midthird < 2000 { t3 = 0 } 69 if botthird < 400 { t3 = 0 } 70 if t3 == 1 { hw("T3 PASS FULL figure: top(head)=" as *u8); pn(topthird); hw(" mid(torso)=" as *u8); pn(midthird); hw(" bot(legs)=" as *u8); pn(botthird); hw(" -- head-to-feet, not a blob\n" as *u8) } 71 else { hw("T3 FAIL top=" as *u8); pn(topthird); hw(" mid=" as *u8); pn(midthird); hw(" bot=" as *u8); pn(botthird); hw("\n" as *u8); fails = fails + 1 } 72 // T4 determinism 73 let base2: i64 = sys_mmap(swgpu_bytes()) as i64 74 sg_humanoid(base2, 20) 75 sg_project(base2, 500, 0 - 5) 76 sg_render(base2, 240, 182, 158) 77 let fb2: *i64 = (base2 + fb_off()) as *i64 78 var diff: i64 = 0 79 pi = 0 80 while pi < ww() * hh() { if fb[pi] != fb2[pi] { diff = diff + 1 } pi = pi + 1 } 81 if diff == 0 { hw("T4 PASS determinism: two humanoid renders byte-identical\n" as *u8) } 82 else { hw("T4 FAIL diff=" as *u8); pn(diff); hw("\n" as *u8); fails = fails + 1 } 83 // T5 PNG (character) + a lone sphere PNG for the record 84 write_png(fb, ww(), hh(), "knowledge/nx_swchar.png" as *u8) 85 let base3: i64 = sys_mmap(swgpu_bytes()) as i64 86 sg_sphere(base3, 32) 87 sg_project(base3, 600, 0 - 3) 88 sg_render(base3, 224, 150, 116) 89 write_png((base3 + fb_off()) as *i64, ww(), hh(), "knowledge/nx_swgpu.png" as *u8) 90 if ww() * hh() >= 76800 * 2 { hw("T5 PASS hi-res 512x384 + PNGs knowledge/nx_swchar.png (character) + nx_swgpu.png (sphere)\n" as *u8) } 91 else { hw("T5 FAIL res\n" as *u8); fails = fails + 1 } 92 93 if fails == 0 { hw("VERDICT GREEN: nx_swgpu 5/5 -- our SOFTWARE GPU renders a per-pixel-lit hi-res 3D CHARACTER (tiled, deterministic; the sovereign SOTA path, same pipeline targets the real GPU next)\n" as *u8) } 94 else { hw("VERDICT RED fails=" as *u8); pn(fails); hw("\n" as *u8) } 95 return fails 96}