nx_texr_boundary_gate_t285.nx source
↩ module page · 78 lines · 3764 B
1// nx_texr_boundary_gate_t285.nx -- Validates TEXR boundary gate structures for correct header and data integrity checks.
2import "nx_syscalls.nx"
3import "nx_nxa_texbake_region_lib.nx"
4// Exercise the adopted validator through its canonical regional owner.
5const TV_TOC_WORDS:i64=8
6const TV_SETS:i64=2
7static tv_pass:i64
8static tv_total:i64
9func tv_check(ok:i64,name:*u8)->i64{
10 tv_total=tv_total+1
11 if ok==1{tv_pass=tv_pass+1;nt_outs("PASS ")}else{nt_outs("FAIL ")}
12 nt_outs(name);nt_outs("\n");return ok
13}
14func tv_words()->i64{
15 let bytes:i64=TV_SETS*NTR_NMAPS
16 return TV_TOC_WORDS+NTR_HDR_WORDS+NTR_JOINT_WORDS+TV_SETS*(NTR_SET_META+NTR_NMAPS*NTR_MAPREC)+(bytes+NTR_WORD-1)/NTR_WORD
17}
18func tv_seal(w:*i64)->i64{
19 w[7]=nxa_check2(1,((w as i64)+TV_TOC_WORDS*NTR_WORD) as *i64,w[6])
20 w[3]=nxa_check2(1,((w as i64)+4*NTR_WORD) as *i64,4)
21 return 0
22}
23func tv_reset(w:*i64)->i64{
24 var i:i64=0;while i<tv_words(){w[i]=0;i=i+1}
25 w[0]=nxa_magic();w[1]=NXA_VER;w[2]=1;w[4]=nxa_tag4("TEXR");w[5]=TV_TOC_WORDS*NTR_WORD;w[6]=tv_words()-TV_TOC_WORDS
26 let o:i64=TV_TOC_WORDS;let stride:i64=NTR_SET_META+NTR_NMAPS*NTR_MAPREC
27 w[o+NTR_W_NSETS]=TV_SETS;w[o+NTR_W_RES]=2048;w[o+NTR_W_MODEL]=NTR_MODEL_SPECGLOSS
28 w[o+NTR_W_NMAPS]=NTR_NMAPS;w[o+NTR_W_MPX]=480;w[o+NTR_W_MREP]=24000;w[o+NTR_W_RANGE]=NTR_DISP_RANGE_UM
29 w[o+NTR_W_NJ]=1;w[o+NTR_W_SETW]=stride;w[o+NTR_W_JW]=NTR_JOINT_WORDS;w[o+NTR_W_VER]=NTR_VERSION
30 w[o+NTR_W_BLOBW]=(TV_SETS*NTR_NMAPS+NTR_WORD-1)/NTR_WORD
31 var s:i64=0
32 while s<TV_SETS{
33 let at:i64=o+NTR_HDR_WORDS+NTR_JOINT_WORDS+s*stride
34 w[at+NTR_S_REGION]=s
35 var m:i64=0;while m<NTR_NMAPS{let p:i64=at+NTR_SET_META+m*NTR_MAPREC;w[p]=m;w[p+1]=s*NTR_NMAPS+m;w[p+2]=1;m=m+1}
36 s=s+1
37 }
38 return tv_seal(w)
39}
40func tv_mutate(w:*i64,index:i64,value:i64,expected:i64,name:*u8)->i64{
41 tv_reset(w);w[index]=value;tv_seal(w)
42 return tv_check((ntr_texr_find(w as *u8,tv_words()*NTR_WORD)==expected) as i64,name)
43}
44func main(argc:i64,argv:*i64)->i64{
45 let w:*i64=sys_mmap_try(tv_words()*NTR_WORD) as *i64
46 if (w as i64)<=0{return 1}
47 tv_reset(w)
48 tv_check((ntr_texr_find(w as *u8,tv_words()*NTR_WORD)==TV_TOC_WORDS) as i64,"valid bounded records; PNG decoding deliberately separate")
49 let o:i64=TV_TOC_WORDS
50 let at:i64=o+NTR_HDR_WORDS+NTR_JOINT_WORDS
51 let rec:i64=at+NTR_SET_META
52 tv_mutate(w,o+NTR_W_VER,NTR_VERSION+1,0-2,"future TEXR version refused")
53 tv_mutate(w,o+NTR_W_NJ,9223372036854775807,0-3,"oversized joint count before multiplication")
54 tv_mutate(w,o+NTR_W_NSETS,0-1,0-3,"negative set count")
55 tv_mutate(w,o+NTR_W_SETW,9223372036854775807,0-3,"invalid record stride")
56 tv_mutate(w,o+NTR_W_BLOBW,9223372036854775807,0-3,"invalid blob extent")
57 tv_mutate(w,rec+1,0-1,0-3,"negative map offset")
58 tv_mutate(w,rec+1,9223372036854775807,0-3,"oversized map offset")
59 tv_mutate(w,rec+2,9223372036854775807,0-3,"oversized map length")
60 tv_mutate(w,rec+2,0,0-3,"empty map")
61 tv_mutate(w,rec,NTR_NMAPS,0-3,"wrong map identity")
62 tv_mutate(w,at+NTR_SET_META+NTR_NMAPS*NTR_MAPREC+NTR_S_REGION,0,0-3,"duplicate region")
63 tv_mutate(w,o+NTR_W_RES,0,0-3,"zero resolution")
64 tv_reset(w);w[6]=NTR_HDR_WORDS-1;tv_seal(w)
65 tv_check((ntr_texr_find(w as *u8,tv_words()*NTR_WORD)==(0-3)) as i64,"short TEXR header")
66 tv_reset(w)
67 tv_check((ntr_texr_find(w as *u8,tv_words()*NTR_WORD-1)==(0-3)) as i64,"truncated container")
68 if argc>1{
69 let size:*i64=sys_mmap_try(NTR_WORD) as *i64
70 if (size as i64)<=0{return 1}
71 let b:*u8=sys_read_file(argv[1] as *u8,size)
72 if (b as i64)<=0{return 1}
73 tv_check((ntr_texr_find(b,size[0])==(0-1)) as i64,"current resident reports absent TEXR")
74 }
75 nt_outs("TEXR-BOUNDARY ");nt_outn(tv_pass);nt_outs("/");nt_outn(tv_total);nt_outs("\n")
76 if sys_munmap_direct(w as *u8,tv_words()*NTR_WORD)!=0{return 1}
77 if tv_pass!=tv_total{return 1};return 0
78}