nx_material_normal_shader_gate_t301.nx source
↩ module page · 40 lines · 2840 B
1import "nx_material_normal_shader_candidate_t301.nx"
2import "nx_fsops_lib.nx"
3import "nx_gate_verdict.nx"
4func mn_emit(m:*i64,stage:i64,g:*u8,w:*u8,c:*i64)->i64{
5 let out:*u8=sys_mmap_try(WG_EMIT_CAP);let tr:*i64=sys_mmap_try(WG_TRACE_CAP*8) as *i64
6 var tn:i64=0
7 if (out as i64)<=0||(tr as i64)<=0{return 1}
8 let gn:i64=glsl_emit_module(m,stage,out,WG_EMIT_CAP,tr,WG_TRACE_CAP,&tn)
9 gv_check("native GLSL emits",gn>0&&m[M_REFUSE]==0,c)
10 if gn>0{gv_check("GLSL artifact retained",fsx_write(g,out,gn)==gn,c)}
11 tn=0;let wn:i64=wgsl_emit_module(m,stage,out,WG_EMIT_CAP,tr,WG_TRACE_CAP,&tn)
12 gv_check("native WGSL emits",wn>0&&m[M_REFUSE]==0,c)
13 if wn>0{gv_check("WGSL artifact retained",fsx_write(w,out,wn)==wn,c)}
14 if stage==STAGE_FRAGMENT{let n:i64=wg_uniform_layout_k(m,out,0,WG_EMIT_CAP,"fixture_size=");if n>0{sys_write(1,out,n)}}
15 sys_munmap_direct(out,WG_EMIT_CAP);sys_munmap_direct(tr as *u8,WG_TRACE_CAP*8);return 0
16}
17func main(argc:i64,argv:*i64)->i64{
18 if argc!=5{return 2};let c:*i64=gv_ctr()
19 let m:*i64=sir_new();sir_uniform(m,"uNormal",T_V3F,0);sir_uniform(m,"uTangent",T_V4F,0)
20 sir_uniform(m,"uScale",T_F32,0);sir_uniform(m,"uEncoding",T_I32,0);sir_uniform(m,"uOn",T_I32,0)
21 sir_texture(m,"uNormalMap",T_TEX2F);sir_fragout(m,"fc",T_V4F,0)
22 cs_material_unit_decl(m);cs_material_mapped_normal_decl(m)
23 let f:i64=sir_func(m,"main",T_VOID)
24 let sample:i64=ws_sw(m,sir_texsample(m,sir_ident(m,"uNormalMap",T_TEX2F),ws_v1(m,T_V2F,ws_f(m,"0.5"))),"xyz",T_V3F)
25 ws_st(m,f,sir_var(m,"materialTexel",T_V3F,sample))
26 let decoded:i64=cs_normal_decode_rgb(m,cs_v3(m,"materialTexel"),cs_i(m,"uEncoding"))
27 let mapped:i64=cs_material_mapped_call(m,cs_v3(m,"uNormal"),cs_v4(m,"uTangent"),decoded,cs_fl(m,"uScale"))
28 gv_check("typed mapped call constructed",mapped>0&&m[M_REFUSE]==0,c)
29 let selected:i64=sir_select(m,cs_ieq(m,"uOn","1"),mapped,ws_c1(m,"materialUnit",cs_v3(m,"uNormal"),T_V3F),T_V3F)
30 ws_st(m,f,ws_set(m,cs_v4(m,"fc"),ws_vt2(m,T_V4F,selected,ws_f(m,"1.0"))))
31 mn_emit(m,STAGE_FRAGMENT,argv[1] as *u8,argv[2] as *u8,c)
32 let v:*i64=sir_new();sir_attrib(v,"aPosition",T_V2F,0);let vf:i64=sir_func(v,"main",T_VOID)
33 ws_st(v,vf,ws_set(v,sir_builtin(v,"position",T_V4F),ws_v4(v,ws_sw(v,sir_ident(v,"aPosition",T_V2F),"x",T_F32),ws_sw(v,sir_ident(v,"aPosition",T_V2F),"y",T_F32),ws_f(v,"0.0"),ws_f(v,"1.0"))))
34 mn_emit(v,STAGE_VERTEX,argv[3] as *u8,argv[4] as *u8,c)
35 let bad:*i64=sir_new()
36 gv_check("missing typed input refuses",cs_material_mapped_call(bad,0,0,0,0)==0&&bad[M_REFUSE]!=0,c)
37 let wrong:*i64=sir_new()
38 gv_check("wrong tangent type refuses",cs_material_mapped_call(wrong,cs_v3(wrong,"n"),cs_v3(wrong,"t"),cs_v3(wrong,"d"),cs_fl(wrong,"s"))==0&&wrong[M_REFUSE]!=0,c)
39 return gv_verdict("material-normal-ir",c,"Shared native IR helper only; actual imported lit integration and shader draw require separate evidence")
40}