code wiki / (root) / nx_material_cast_gate_t302.nx

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}