nx_normal_shader_gate_t290.nx source
↩ module page · 44 lines · 2931 B
1import "nx_wgsl.nx"
2import "nx_fsops_lib.nx"
3import "nx_gate_verdict.nx"
4func main(argc:i64,argv:*i64)->i64{
5 if argc!=3{return 2}
6 let c:*i64=gv_ctr()
7 gv_check("absent descriptor legacy admitted",ntb_normal_encoding_admit(0,0)==0,c)
8 gv_check("explicit native admitted",ntb_normal_encoding_admit(1,NTB_NORMAL_ENCODING_NATIVE_MID_SCALE)==1,c)
9 gv_check("explicit gltf admitted",ntb_normal_encoding_admit(1,NTB_NORMAL_ENCODING_GLTF_UNORM)==2,c)
10 gv_check("explicit zero refused",ntb_normal_encoding_admit(1,0)<0,c)
11 gv_check("explicit unknown refused",ntb_normal_encoding_admit(1,99)<0,c)
12 gv_check("undeclared contradictory ID refused",ntb_normal_encoding_admit(0,1)<0,c)
13 let m:*i64=sir_new()
14 sir_uniform(m,"uNrmEncoding",T_I32,0);sir_texture(m,"normalMap",T_TEX2F);sir_fragout(m,"fc",T_V4F,0)
15 let f:i64=sir_func(m,"main",T_VOID)
16 let uv:i64=ws_v1(m,T_V2F,ws_f(m,"0.5"))
17 let sample:i64=ws_sw(m,sir_texsample(m,sir_ident(m,"normalMap",T_TEX2F),uv),"xyz",T_V3F)
18 sir_stmt(m,f,sir_var(m,"rawNormal",T_V3F,sample))
19 let decoded:i64=cs_normal_decode_rgb(m,cs_v3(m,"rawNormal"),cs_i(m,"uNrmEncoding"))
20 gv_check("typed decoder expression",decoded>0&&m[M_REFUSE]==0,c)
21 sir_stmt(m,f,sir_assign(m,cs_v4(m,"fc"),ws_vt2(m,T_V4F,decoded,ws_f(m,"1.0"))))
22 let go:*u8=sys_mmap_try(WG_EMIT_CAP);let wo:*u8=sys_mmap_try(WG_EMIT_CAP)
23 let trace:*i64=sys_mmap_try(WG_TRACE_CAP*8) as *i64;let tn:*i64=sys_mmap_try(8) as *i64
24 if (go as i64)<=0||(wo as i64)<=0||(trace as i64)<=0||(tn as i64)<=0{return 3}
25 let gn:i64=glsl_emit_module(m,STAGE_FRAGMENT,go,WG_EMIT_CAP,trace,WG_TRACE_CAP,tn)
26 tn[0]=0;let wn:i64=wgsl_emit_module(m,STAGE_FRAGMENT,wo,WG_EMIT_CAP,trace,WG_TRACE_CAP,tn)
27 gv_check("GLSL decoder emitted",gn>0,c);gv_check("WGSL decoder emitted",wn>0,c)
28 if gn>0{gv_check("GLSL retained",fsx_write(argv[1] as *u8,go,gn)==gn,c)}
29 if wn>0{gv_check("WGSL retained",fsx_write(argv[2] as *u8,wo,wn)==wn,c)}
30 let full:*i64=sir_new()
31 gv_check("integrated cast fragment constructs",shsrc_cast_fs(full)==0,c)
32 tn[0]=0;let fgl:i64=glsl_emit_module(full,STAGE_FRAGMENT,go,WG_EMIT_CAP,trace,WG_TRACE_CAP,tn)
33 gv_check("integrated cast GLSL emits",fgl>0&&full[M_REFUSE]==0,c)
34 full[M_BINDGROUP]=1
35 tn[0]=0;let fwg:i64=wgsl_emit_module(full,STAGE_FRAGMENT,wo,WG_EMIT_CAP,trace,WG_TRACE_CAP,tn)
36 gv_check("integrated cast WGSL emits",fwg>0&&full[M_REFUSE]==0,c)
37 let layout:i64=wg_uniform_layout_k(full,go,0,WG_EMIT_CAP,"castf_struct_size=")
38 gv_check("integrated layout available",layout>0,c)
39 if layout>0{wg_puts(go)}
40 let bad:*i64=sir_new()
41 gv_check("wrong sample type refused",cs_normal_decode_rgb(bad,cs_v4(bad,"sample"),cs_i(bad,"encoding"))==0&&bad[M_REFUSE]!=0,c)
42 sys_munmap_direct(go,WG_EMIT_CAP);sys_munmap_direct(wo,WG_EMIT_CAP);sys_munmap_direct(trace as *u8,WG_TRACE_CAP*8);sys_munmap_direct(tn as *u8,8)
43 return gv_verdict("SHARED-NORMAL-SHADER",c,"descriptor ID admission and native shader emission; GPU draw separately required")
44}