nx_fragment_depth_gate_t192.nx source
↩ module page · 53 lines · 2511 B
1import "nx_wgsl_depth_candidate_t192.nx"
2import "nx_gate_verdict.nx"
3func fd_emit(m:*i64,stage:i64,dialect:i64)->i64{
4 let b:*u8=sys_mmap(WG_EMIT_CAP)
5 let tr:*i64=sys_mmap(WG_TRACE_CAP*8) as *i64
6 let tn:*i64=sys_mmap(8) as *i64
7 if dialect==1{return wgsl_emit_module(m,stage,b,WG_EMIT_CAP,tr,WG_TRACE_CAP,tn)}
8 return glsl_emit_module(m,stage,b,WG_EMIT_CAP,tr,WG_TRACE_CAP,tn)
9}
10func fd_case(mode:i64)->*i64{
11 let m:*i64=sir_new()
12 sir_fragout(m,"fc" as *u8,T_V4F,0)
13 var name:*u8="main"
14 if mode==1{name="helper"}
15 let f:i64=sir_func(m,name,T_VOID)
16 let color:i64=sir_ctor(m,T_V4F)
17 sir_arg(m,color,sir_lit(m,"1.0" as *u8,T_F32))
18 var depth:i64=sir_lit(m,"0.5" as *u8,T_F32)
19 if mode==2{depth=sir_lit(m,"1" as *u8,T_I32)}
20 let ret:i64=sir_return_depth(m,color,depth)
21 if mode==3{
22 sir_stmt(m,f,sir_if(m,sir_lit(m,"true" as *u8,T_BOOL),ret,sir_return(m,color)))
23 }else{if mode==4{
24 sir_stmt(m,f,sir_if(m,sir_lit(m,"true" as *u8,T_BOOL),ret,0))
25 }else{sir_stmt(m,f,ret)}}
26 return m
27}
28func fd_dump(m:*i64,dialect:i64)->i64{
29 let b:*u8=sys_mmap(WG_EMIT_CAP)
30 let tr:*i64=sys_mmap(WG_TRACE_CAP*8) as *i64
31 let tn:*i64=sys_mmap(8) as *i64
32 var n:i64=0
33 if dialect==1{n=wgsl_emit_module(m,STAGE_FRAGMENT,b,WG_EMIT_CAP,tr,WG_TRACE_CAP,tn)}else{n=glsl_emit_module(m,STAGE_FRAGMENT,b,WG_EMIT_CAP,tr,WG_TRACE_CAP,tn)}
34 if n<=0{return n}
35 if sys_write(1,b,n)!=n{return -1}
36 return n
37}
38func main()->i64{
39 let c:*i64=gv_ctr()
40 gv_check("emit actual WGSL browser fixture",fd_dump(fd_case(0),1)>0,c)
41 gv_check("emit actual GLSL browser fixture",fd_dump(fd_case(0),0)>0,c)
42 gv_check("valid WGSL depth output",fd_emit(fd_case(0),STAGE_FRAGMENT,1)>0,c)
43 gv_check("valid GLSL depth output",fd_emit(fd_case(0),STAGE_FRAGMENT,0)>0,c)
44 gv_check("WGSL helper depth refused",fd_emit(fd_case(1),STAGE_FRAGMENT,1)<0,c)
45 gv_check("GLSL helper depth refused",fd_emit(fd_case(1),STAGE_FRAGMENT,0)<0,c)
46 gv_check("WGSL nonfloat depth refused",fd_emit(fd_case(2),STAGE_FRAGMENT,1)<0,c)
47 gv_check("GLSL nonfloat depth refused",fd_emit(fd_case(2),STAGE_FRAGMENT,0)<0,c)
48 gv_check("mixed return missing depth refused",fd_emit(fd_case(3),STAGE_FRAGMENT,1)<0,c)
49 gv_check("fallthrough missing depth refused",fd_emit(fd_case(4),STAGE_FRAGMENT,1)<0,c)
50 gv_check("vertex depth refused",fd_emit(fd_case(0),STAGE_VERTEX,1)<0,c)
51 gv_check("compute depth refused",fd_emit(fd_case(0),STAGE_COMPUTE,1)<0,c)
52 return gv_verdict("fragment-depth" as *u8,c,"typed dual-backend output and stage/path refusals; browser qualification still required" as *u8)
53}