nx_shader_equivalence_gate_t290.nx source
↩ module page · 30 lines · 1749 B
1// Exact-output regression witness using the shared owned capture path.
2// Inputs pin both producers; equality does not establish physical rendering accuracy.
3import "nx_game_page_integrated_t73.nx"
4import "nx_gate_verdict.nx"
5func se_extent(path:*u8)->i64{
6 let fd:i64=sys_openat_rd(path);if fd<0{return -1}
7 let n:i64=sys_lseek(fd,0,2);sys_close(fd);return n
8}
9func se_retain(path:*u8,b:*NxBufOwned)->i64{
10 var n:i64=0;let prior:*u8=sys_read_file(path,&n)
11 if (prior as i64)>0{let same:i64=gpa_same(prior,n,b.buf,b.len);sys_free_file(prior,n);return same}
12 return fxc_create(path,b.buf,b.len)==b.len
13}
14func main(argc:i64,argv:*i64)->i64{
15 if argc!=7{gpe_puts("usage: reference reference-sha candidate candidate-sha command capture-path\n");return 2}
16 let c:*i64=gv_ctr()
17 let a:*NxBufOwned=rk_owned_new();let b:*NxBufOwned=rk_owned_new()
18 if (a as i64)<=0||(b as i64)<=0{return 3}
19 let an:i64=se_extent(argv[1] as *u8);let bn:i64=se_extent(argv[3] as *u8)
20 let ar:i64=gsb_capture_selected_owned(argv[1] as *u8,argv[2] as *u8,an,argv[5] as *u8,a,RK_WGSL_TMO_MS,0)
21 let br:i64=gsb_capture_selected_owned(argv[3] as *u8,argv[4] as *u8,bn,argv[5] as *u8,b,RK_WGSL_TMO_MS,0)
22 gv_check("both pinned producers fully captured",ar==0&&br==0&&a.len>0&&b.len>0,c)
23 var same:i64=0
24 if ar==0&&br==0&&a.len>0&&b.len>0{same=gpa_same(a.buf,a.len,b.buf,b.len)}
25 gv_check("entire emitted output byte-identical",same==1,c)
26 if br==0&&b.len>0{gv_check("candidate evidence retained including mismatches",se_retain(argv[6] as *u8,b)==1,c)}
27 gv_kv("reference_bytes",a.len);gv_kv("candidate_bytes",b.len)
28 rk_owned_close(a);rk_owned_close(b)
29 return gv_verdict("SHADER-EXACT-OUTPUT",c,"pinned command output only; independent GPU witnesses remain separately required")
30}