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}