code wiki / (root) / nx_material_normal_shader_gate_t301.nx

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}