nx_material_cast_gate_t302.nx source
↩ module page · 41 lines · 2527 B
1import "nx_cast_shader_src.nx"
2import "nx_wgsl.nx"
3import "nx_fsops_lib.nx"
4import "nx_gate_verdict.nx"
5func mc_emit(m:*i64,stage:i64,g:*u8,w:*u8,c:*i64)->i64{
6 let out:*u8=sys_mmap_try(WG_EMIT_CAP);let tr:*i64=sys_mmap_try(WG_TRACE_CAP*8) as *i64
7 if (out as i64)<=0||(tr as i64)<=0{return 2}
8 var tn:i64=0;let gn:i64=glsl_emit_module(m,stage,out,WG_EMIT_CAP,tr,WG_TRACE_CAP,&tn)
9 gv_check("full canonical composed GLSL emits",gn>0&&m[M_REFUSE]==0,c)
10 if gn>0{gv_check("GLSL retained",fsx_write(g,out,gn)==gn,c)}
11 tn=0;if stage==STAGE_FRAGMENT{m[M_BINDGROUP]=1};let wn:i64=wgsl_emit_module(m,stage,out,WG_EMIT_CAP,tr,WG_TRACE_CAP,&tn)
12 gv_check("full canonical composed WGSL emits",wn>0&&m[M_REFUSE]==0,c)
13 if wn>0{gv_check("WGSL retained",fsx_write(w,out,wn)==wn,c)}
14 sys_munmap_direct(out,WG_EMIT_CAP);sys_munmap_direct(tr as *u8,WG_TRACE_CAP*8);return 0
15}
16func mc_layout(m:*i64,path:*u8,c:*i64)->i64{
17 let out:*u8=sys_mmap_try(WG_EMIT_CAP);if (out as i64)<=0{return 2}
18 let size:i64=wg_uniform_layout_k(m,out,0,WG_EMIT_CAP,"uniform_size=")
19 if size<=0{sys_munmap_direct(out,WG_EMIT_CAP);return 3}
20 let n:i64=sir_slen(out);gv_check("native uniform layout retained",fsx_write(path,out,n)==n,c)
21 sys_munmap_direct(out,WG_EMIT_CAP);return 0
22}
23func main(argc:i64,argv:*i64)->i64{
24 if argc!=5&&argc!=7{return 2};let c:*i64=gv_ctr()
25 let v:*i64=sir_new();let vr:i64=shsrc_cast_vs(v)
26 gv_check("canonical vertex composition",vr==0,c)
27 let ta:i64=wg_decl_named(v,K_ATTRIB,"aT");let tv:i64=wg_decl_named(v,K_VARY,"vT");let st:i64=wg_decl_named(v,K_VARY,"vSt")
28 if ta>0&&tv>0&&st>0{
29 gv_check("tangent does not alias existing varying",sir_get(v,tv,SIR_A)>sir_get(v,st,SIR_A),c)
30 gv_kv("tangent_attribute_location",sir_get(v,ta,SIR_A));gv_kv("tangent_varying_location",sir_get(v,tv,SIR_A))
31 }else{gv_check("tangent declarations present",0,c)}
32 if vr==0{mc_emit(v,STAGE_VERTEX,argv[1] as *u8,argv[2] as *u8,c)}
33 let f:*i64=sir_new();let fr:i64=shsrc_cast_fs(f)
34 gv_check("canonical lit fragment composition",fr==0,c)
35 let ft:i64=wg_decl_named(f,K_VARY,"vT")
36 if ft>0&&tv>0{gv_check("vertex fragment tangent locations agree",sir_get(f,ft,SIR_A)==sir_get(v,tv,SIR_A),c)}
37 gv_check("normal scale explicit uniform",wg_decl_named(f,K_UNIFORM,"uNrmScale")>0,c)
38 if fr==0{mc_emit(f,STAGE_FRAGMENT,argv[3] as *u8,argv[4] as *u8,c)}
39 if argc==7{mc_layout(v,argv[5] as *u8,c);mc_layout(f,argv[6] as *u8,c)}
40 return gv_verdict("material-cast-composition",c,"Native composed full cast only; no mapped asset draw or page handoff qualification")
41}