nx_gltf_sampler_descriptor_gate_t283.nx source
↩ module page · 58 lines · 4843 B
1import "nx_gltf_render_descriptor_candidate_t181.nx"
2import "nx_fs_create_lib.nx"
3// Synthetic material GLBs test the actual native preparation boundary.
4// Four BIN bytes are a structural image fixture, not a decoded PNG qualification.
5func ng_fixture_texture(label:*u8,material:*u8,texture:*u8,imageExpected:i64)->i64{
6 let pre:*u8="{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":4}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":4}],\"images\":[{\"bufferView\":0,\"mimeType\":\"image/png\"}],\"textures\":["
7 let middle:*u8="],\"samplers\":[{\"magFilter\":9728,\"minFilter\":9728,\"wrapS\":33071,\"wrapT\":33648}],\"materials\":["
8 let post:*u8="]}";let pn:i64=gll_slen(pre);let mn:i64=gll_slen(material);let en:i64=gll_slen(post)
9 let tn:i64=gll_slen(texture);let dn:i64=gll_slen(middle);let jn:i64=pn+tn+dn+mn+en;let pad:i64=gll_align4(jn);let total:i64=28+pad+4
10 let src:*u8=sys_mmap_try(total);if (src as i64)==0{return 1}
11 glp_u32(src,0,1179937895);glp_u32(src,4,2);glp_u32(src,8,total);glp_u32(src,12,pad);glp_u32(src,16,1313821514)
12 var i:i64=0;while i<pn{src[20+i]=pre[i];i=i+1};i=0;while i<tn{src[20+pn+i]=texture[i];i=i+1};i=0;while i<dn{src[20+pn+tn+i]=middle[i];i=i+1};i=0;while i<mn{src[20+pn+tn+dn+i]=material[i];i=i+1};i=0;while i<en{src[20+pn+tn+dn+mn+i]=post[i];i=i+1};i=jn;while i<pad{src[20+i]=32 as u8;i=i+1}
13 glp_u32(src,20+pad,4);glp_u32(src,24+pad,5130562);glp_u32(src,28+pad,0)
14 let cb:i64=GLD_CONTEXT_WORDS*__size_of(i64);let cx:*i64=sys_mmap_try(cb) as *i64
15 if (cx as i64)==0{sys_munmap_direct(src,total);return 1}
16 i=0;while i<GLD_CONTEXT_WORDS{cx[i]=0;i=i+1}
17 var rc:i64=gltf_view_open(src,total,cx);let wb:i64=4*__size_of(i64);let w:*i64=sys_mmap_try(wb) as *i64
18 if (w as i64)==0{gltf_view_close(cx);sys_munmap_direct(cx as *u8,cb);sys_munmap_direct(src,total);return 1}
19 i=0;while i<4{w[i]=0;i=i+1}
20 let mat:i64=0
21 if rc==0{if imageExpected!=0{let ir:i64=gpd_image(w,cx,0);if imageExpected==1{if ir!=0||w[3]!=0{rc=-8}}else{if ir==0{rc=-8}};i=0;while i<4{w[i]=0;i=i+1}}}
22 if rc==0{rc=gpd_material(w,cx,mat)}
23 let n:i64=w[2];var out:*u8=0 as *u8
24 if rc==0&&w[3]==0&&n>0{
25 out=sys_mmap_try(n);if (out as i64)==0{rc=-7}else{
26 w[0]=out as i64;w[1]=n;w[2]=0;w[3]=0;rc=gpd_material(w,cx,mat)
27 if rc==0&&w[3]==0&&w[2]==n{
28 fsx_puts("{\"case\":\"");fsx_puts(label);fsx_puts("\",\"sourceBytes\":");fsx_putn(total);fsx_puts(",\"material\":");sys_write(1,out,n);fsx_puts("}\n")
29 }else{rc=-1}
30 }
31 }else{rc=-1}
32 if (out as i64)!=0{sys_munmap_direct(out,n)};sys_munmap_direct(w as *u8,wb);gltf_view_close(cx);sys_munmap_direct(cx as *u8,cb);sys_munmap_direct(src,total);return rc
33}
34func ng_fixture(label:*u8,material:*u8)->i64{return ng_fixture_texture(label,material,"{\"source\":0}",1)}
35func main()->i64{
36 var rc:i64=0
37 rc=rc+ng_fixture("absent","{}")
38 rc=rc+ng_fixture("default","{\"normalTexture\":{\"index\":0}}")
39 rc=rc+ng_fixture("negative-scale","{\"normalTexture\":{\"index\":0,\"scale\":-0.5}}")
40 rc=rc+ng_fixture("zero-scale","{\"normalTexture\":{\"index\":0,\"scale\":0}}")
41 rc=rc+ng_fixture("uv1","{\"normalTexture\":{\"index\":0,\"texCoord\":1}}")
42 rc=rc+ng_fixture("transform","{\"normalTexture\":{\"index\":0,\"extensions\":{\"KHR_texture_transform\":{\"rotation\":0.5}}}}")
43 rc=rc+ng_fixture("unknown-extension","{\"normalTexture\":{\"index\":0,\"extensions\":{\"UNKNOWN_normal\":{}}}}")
44 rc=rc+ng_fixture("string-scale","{\"normalTexture\":{\"index\":0,\"scale\":\"1\"}}")
45 rc=rc+ng_fixture("huge-scale","{\"normalTexture\":{\"index\":0,\"scale\":1e300}}")
46 rc=rc+ng_fixture("missing-image","{\"normalTexture\":{\"index\":1}}")
47 rc=rc+ng_fixture("negative-index","{\"normalTexture\":{\"index\":-1}}")
48 rc=rc+ng_fixture("null-normal","{\"normalTexture\":null}")
49 rc=rc+ng_fixture("null-uv","{\"normalTexture\":{\"index\":0,\"texCoord\":null}}")
50 rc=rc+ng_fixture_texture("sampler-null","{\"normalTexture\":{\"index\":0}}","{\"source\":0,\"sampler\":null}",-1)
51 rc=rc+ng_fixture_texture("sampler-string","{\"normalTexture\":{\"index\":0}}","{\"source\":0,\"sampler\":\"0\"}",-1)
52 rc=rc+ng_fixture_texture("sampler-negative","{\"normalTexture\":{\"index\":0}}","{\"source\":0,\"sampler\":-1}",-1)
53 rc=rc+ng_fixture_texture("sampler-index0","{\"normalTexture\":{\"index\":0}}","{\"source\":0,\"sampler\":0}",1)
54 rc=rc+ng_fixture_texture("sampler-out-of-range","{\"normalTexture\":{\"index\":0}}","{\"source\":0,\"sampler\":1}",-1)
55 rc=rc+ng_fixture_texture("sampler-fraction","{\"normalTexture\":{\"index\":0}}","{\"source\":0,\"sampler\":0.5}",-1)
56 if ntb_normal_encoding_admit(0,0)!=0||ntb_normal_encoding_admit(1,99)>=0||ntb_normal_encoding_admit(0,2)>=0||ntb_normal_encoding_admit(1,1)!=1||ntb_normal_encoding_admit(1,2)!=2{rc=-1}
57 if rc!=0{fsx_puts("NORMAL-DESCRIPTOR FAIL\n");return 1};fsx_puts("NORMAL-DESCRIPTOR native-fixtures-emitted admission-controls-PASS\n");return 0
58}