code wiki / (root) / nx_cast_trace_diagnostic_t290.nx

nx_cast_trace_diagnostic_t290.nx source

↩ module page · 29 lines · 1706 B

1import "nx_wgsl.nx" 2import "nx_gate_verdict.nx" 3func ptd_stage(stage:i64)->i64{ 4 let a:*i64=sir_new();let b:*i64=sir_new() 5 if stage==STAGE_VERTEX{shsrc_cast_vs(a);shsrc_cast_vs(b)}else{shsrc_cast_fs(a);shsrc_cast_fs(b);b[M_BINDGROUP]=1} 6 let ga:*i64=sys_mmap(WG_TRACE_CAP*8) as *i64;let wa:*i64=sys_mmap(WG_TRACE_CAP*8) as *i64 7 let gn:*i64=sys_mmap(8) as *i64;let wn:*i64=sys_mmap(8) as *i64;let out:*u8=sys_mmap(WG_EMIT_CAP) 8 let gr:i64=glsl_emit_module(a,stage,out,WG_EMIT_CAP,ga,WG_TRACE_CAP,gn) 9 let wr:i64=wgsl_emit_module(b,stage,out,WG_EMIT_CAP,wa,WG_TRACE_CAP,wn) 10 gv_kv("stage",stage);gv_kv("gl_rc",gr);gv_kv("wg_rc",wr);gv_kv("gl_trace_count",gn[0]);gv_kv("wg_trace_count",wn[0]) 11 let gc:*i64=sys_mmap(a[M_NCOUNT]*8) as *i64;let wc:*i64=sys_mmap(b[M_NCOUNT]*8) as *i64 12 var i:i64=0;var first:i64=0-1 13 while i<gn[0]{if ga[i]>0{if ga[i]<a[M_NCOUNT]{gc[ga[i]]=gc[ga[i]]+1}};i=i+1} 14 i=0;while i<wn[0]{if wa[i]>0{if wa[i]<b[M_NCOUNT]{wc[wa[i]]=wc[wa[i]]+1}};i=i+1} 15 i=0 16 while i<gn[0]{if i<wn[0]{if ga[i]!=wa[i]{first=i;break}};i=i+1} 17 gv_kv("first_order_difference",first) 18 if first>=0{gv_kv("gl_first_id",ga[first]);gv_kv("wg_first_id",wa[first]);gv_kv("gl_first_kind",sir_get(a,ga[first],SIR_KIND));gv_kv("wg_first_kind",sir_get(b,wa[first],SIR_KIND))} 19 var unequal:i64=0;i=1 20 while i<a[M_NCOUNT]{ 21 if gc[i]!=wc[i]{ 22 unequal=unequal+1 23 if unequal<=5{gv_kv("unequal_node",i);gv_kv("node_kind",sir_get(a,i,SIR_KIND));gv_kv("gl_visits",gc[i]);gv_kv("wg_visits",wc[i]);wg_puts("node_name=");wg_puts(sir_cstr(a,sir_get(a,i,SIR_NAME)));wg_puts("\n")} 24 };i=i+1 25 } 26 gv_kv("unequal_node_visit_counts",unequal) 27 return 0 28} 29func main()->i64{ptd_stage(STAGE_VERTEX);ptd_stage(STAGE_FRAGMENT);return 0}