nx_scene_light_emitter_canonical_gate_t364.nx source
↩ module page · 59 lines · 2388 B
1import "nx_cast_shader_src.nx"
2import "nx_gate_verdict.nx"
3static gsb_failed:i64
4func gpe_ap(out: *u8, pos: i64, s: *u8) -> i64 {
5 var k: i64 = 0
6 var p: i64 = pos
7 while s[k] != (0 as u8) { out[p] = s[k]; p = p + 1; k = k + 1 }
8 return p
9}
10
11struct GpeSceneWriter { output:i64, capacity:i64, position:i64, failed:i64 }
12func gpe_scene_light_recipe_emit(out:*u8,pos:i64)->i64{
13 let extent:i64=__size_of(GpeSceneWriter)
14 let w:*i64=sys_mmap_try(extent) as *i64
15 if (w as i64)<=0{gsb_failed=1;return pos}
16 w[0]=0;w[1]=0;w[2]=0;w[3]=0
17 var p:i64=pos
18 var b:*u8=0 as *u8
19 var bytes:i64=0
20 if cs_scene_light_recipe_write(w)!=0||w[2]<=0||w[2]>=GLW_I64_MAX{gsb_failed=1}
21 if gsb_failed==0{
22 let n:i64=w[2];bytes=n+1;b=sys_mmap_try(bytes)
23 if (b as i64)<=0{gsb_failed=1}
24 if gsb_failed==0{
25 w[0]=b as i64;w[1]=n;w[2]=0;w[3]=0
26 if cs_scene_light_recipe_write(w)!=0||w[2]!=n{gsb_failed=1}
27 if gsb_failed==0{
28 b[n]=0 as u8
29 p=gpe_ap(out,pos,"const NX_SCENE_LIGHT_RECIPE=Object.freeze(")
30 p=gpe_ap(out,p,b);p=gpe_ap(out,p,");\n")
31 }
32 }
33 }
34 if (b as i64)>0{if sys_munmap_direct(b,bytes)!=0{gsb_failed=1}}
35 if sys_munmap_direct(w as *u8,extent)!=0{gsb_failed=1}
36 return p
37}
38
39func main(argc:i64,argv:*i64)->i64{
40 let ctr:*i64=gv_ctr()
41 let extent:i64=__size_of(GpeSceneWriter)
42 let w:*i64=sys_mmap_try(extent) as *i64
43 if (w as i64)<=0{return 3}
44 w[0]=0;w[1]=0;w[2]=0;w[3]=0
45 if cs_scene_light_recipe_write(w)!=0{return 4}
46 let n:i64=w[2]
47 let total:i64=n+glw_len("const NX_SCENE_LIGHT_RECIPE=Object.freeze(")+glw_len(");\n")
48 let b:*u8=sys_mmap_try(total+1)
49 if (b as i64)<=0{sys_munmap_direct(w as *u8,extent);return 5}
50 let p:i64=gpe_scene_light_recipe_emit(b,0)
51 gv_check("measured writer ABI extent",extent==4*__size_of(i64),ctr)
52 gv_check("exact recipe emission and cleanup",gsb_failed==0&&p==total,ctr)
53 gv_check("emitted declaration delimiters",b[0]==(99 as u8)&&b[p-1]==(10 as u8),ctr)
54 gsb_failed=1;b[0]=71 as u8
55 gv_check("prior failure preserved without output",gpe_scene_light_recipe_emit(b,0)==0&&gsb_failed==1&&b[0]==(71 as u8),ctr)
56 gv_check("direct output release",sys_munmap_direct(b,total+1)==0,ctr)
57 gv_check("direct descriptor release",sys_munmap_direct(w as *u8,extent)==0,ctr)
58 return gv_verdict("SCENE-EMITTER-OWNERSHIP",ctr,"Measured descriptor, direct fallible mapping and matched release; kernel ENOMEM and munmap failure not fault-injected")
59}