code wiki / (root) / nx_shader_arg_ownership_gate_t206.nx

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}