nx_gltf_pose_packet_gate_t316.nx source
↩ module page · 33 lines · 2572 B
1import "nx_gltf_pose_packet_t316.nx"
2import "nx_syscalls.nx"
3func gpat_put(s:*u8)->i64{var n:i64=0;while s[n]!=0 as u8{n=n+1};return sys_write(1,s,n)}
4func main(argc:i64,argv:*i64)->i64{
5 if argc<1||argc>3{return 2}
6 var packet_path:*u8="knowledge/fixtures/gltf_pose_packet_t316_v1.bin"
7 var reference_path:*u8="knowledge/fixtures/gltf_pose_reference_t316_v1.bin"
8 if argc==3{packet_path=argv[1] as *u8;reference_path=argv[2] as *u8}
9 let probe_len:*i64=sys_mmap(16) as *i64;let probe:*i64=sys_read_file(packet_path,probe_len) as *i64
10 if probe_len[0]<=0{packet_path="buildroot/knowledge/fixtures/gltf_pose_packet_t316_v1.bin";reference_path="buildroot/knowledge/fixtures/gltf_pose_reference_t316_v1.bin"}else{sys_free_file(probe,probe_len[0])}
11 let ps:*i64=sys_mmap(16) as *i64;let p:*i64=sys_read_file(packet_path,ps) as *i64
12 let rs:*i64=sys_mmap(16) as *i64;let ref:*i64=sys_read_file(reference_path,rs) as *i64
13 if (p as i64)<=0||(ref as i64)<=0||ps[0]%8!=0||rs[0]%8!=0||ps[0]<160||rs[0]<16{return 2}
14 let pw:i64=ps[0]/8;let samples:i64=ref[0];let joints:i64=ref[1];let ow:i64=joints*16
15 if joints!=p[4]||samples<=0||samples>(rs[0]/8-2)/(ow+1)||rs[0]/8!=2+samples*(ow+1){return 2}
16 let ww:i64=gltf_pose_work_words(p[3]);if ww<=0{return 2}
17 let work:*i64=sys_mmap(ww*8) as *i64;let out:*i64=sys_mmap(ow*8) as *i64
18 var i:i64=0;while i<samples{let pos:i64=2+i*(ow+1);let time:i64=ref[pos]
19 let rc:i64=gpa_frame(p,pw,time,0,work,ww,out,ow);if rc!=joints{gpat_put("POSE-REFERENCE evaluator refused\n");return 3}
20 var j:i64=0;while j<ow{if out[j]!=ref[pos+1+j]{gpat_put("POSE-REFERENCE matrix mismatch\n");return 4};j=j+1};i=i+1
21 }
22 if gpa_frame(p,pw,p[6],1,work,ww,out,ow)!=joints{return 5}
23 i=0;while i<ow{if out[i]!=ref[3+i]{gpat_put("POSE-LOOP duration mismatch\n");return 5};i=i+1}
24 let pos:i64=2+(ow+1);if gpa_frame(p,pw,p[6]+ref[pos],1,work,ww,out,ow)!=joints{return 5}
25 i=0;while i<ow{if out[i]!=ref[pos+1+i]{gpat_put("POSE-LOOP offset mismatch\n");return 5};i=i+1}
26 if gpa_frame(p,pw,-1,0,work,ww,out,ow)>=0{return 6}
27 if gpa_frame(p,pw,0,0,work,ww-1,out,ow)>=0{return 6}
28 if gpa_frame(p,pw,0,0,work,ww,out,ow-1)>=0{return 6}
29 let saved:i64=p[p[9]];p[p[9]]=0;let bad:i64=gpa_frame(p,pw,0,0,work,ww,out,ow);p[p[9]]=saved;if bad>=0{return 6}
30 let track:i64=p[15];let oldoff:i64=p[track+4];p[track+4]=pw;let badspan:i64=gpa_frame(p,pw,0,0,work,ww,out,ow);p[track+4]=oldoff;if badspan>=0{return 6}
31 gpat_put("GLTF-PACKET PASS native full-source matrices exact at all reference times; duration and offset wrap exact; five negative boundaries refused\n")
32 return 0
33}