code wiki / (root) / nx_gltf_sampler_descriptor_gate_t283.nx

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}