nx_shader_arg_ownership_gate_t206.nx source
↩ module page · 33 lines · 2138 B
1import "nx_shader_ir_args_candidate_t206.nx"
2import "nx_gate_verdict.nx"
3func arg206_at(m:*i64,c:i64,index:i64)->i64 {
4 var a:i64=sir_get(m,c,SIR_A);var k:i64=0
5 while k<index && a!=0 {a=sir_get(m,a,SIR_NEXT);k=k+1}
6 return a
7}
8func main()->i64 {
9 let checks:*i64=gv_ctr();let m:*i64=sir_new()
10 let point:i64=sir_ident(m,"point",T_V3F)
11 let origin:i64=sir_ident(m,"origin",T_V3F)
12 let shared:i64=sir_bin(m,"-",point,origin,T_V3F)
13 let right:i64=sir_ident(m,"right",T_V3F)
14 let up:i64=sir_ident(m,"up",T_V3F)
15 let depth:i64=sir_ident(m,"depth",T_V3F)
16 let x:i64=sir_call(m,"dot",T_F32);sir_arg(m,x,shared);sir_arg(m,x,right)
17 let y:i64=sir_call(m,"dot",T_F32);sir_arg(m,y,shared);sir_arg(m,y,up)
18 let z:i64=sir_call(m,"dot",T_F32);sir_arg(m,z,shared);sir_arg(m,z,depth)
19 gv_check("first call retains right",sir_get(m,arg206_at(m,x,1),SIR_NAME)==sir_get(m,right,SIR_NAME),checks)
20 gv_check("second call retains up",sir_get(m,arg206_at(m,y,1),SIR_NAME)==sir_get(m,up,SIR_NAME),checks)
21 gv_check("third call retains depth",sir_get(m,arg206_at(m,z,1),SIR_NAME)==sir_get(m,depth,SIR_NAME),checks)
22 gv_check("source expression linkage unchanged",sir_get(m,shared,SIR_NEXT)==0,checks)
23 gv_check("argument occurrences own linkage",arg206_at(m,x,0)!=arg206_at(m,y,0) && arg206_at(m,y,0)!=arg206_at(m,z,0),checks)
24 let pair:i64=sir_ctor(m,T_V2F);sir_arg(m,pair,x);sir_arg(m,pair,x)
25 gv_check("repeated argument does not self-cycle",arg206_at(m,pair,0)!=arg206_at(m,pair,1) && arg206_at(m,pair,2)==0,checks)
26 gv_check("nested expression children preserved",sir_get(m,arg206_at(m,pair,0),SIR_A)==sir_get(m,x,SIR_A),checks)
27 let integer:i64=sir_lit_u(m,"7")
28 let unary:i64=sir_ctor(m,T_U32);sir_arg(m,unary,integer)
29 gv_check("expression metadata preserved",sir_get(m,arg206_at(m,unary,0),SIR_A)==SIR_LIT_USUFFIX,checks)
30 gv_check("source call linkage unchanged",sir_get(m,x,SIR_NEXT)==0,checks)
31 gv_check("arity remains exact",arg206_at(m,x,2)==0 && arg206_at(m,y,2)==0 && arg206_at(m,z,2)==0,checks)
32 return gv_verdict("shader-argument-ownership",checks,"structural IR regression; emitted pixels and full producer resource qualification separate")
33}