typegpu 0.2.0 → 0.3.0-alpha.1

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  ![TypeGPU (light mode)](/apps/typegpu-docs/public/typegpu-logo-light.svg#gh-light-mode-only)
4
4
 
5
5
 
6
- [Website](https://docs.swmansion.com/TypeGPU) — [Documentation](https://docs.swmansion.com/TypeGPU/guides/getting-started)
6
+ [Website](https://docs.swmansion.com/TypeGPU) — [Documentation](https://docs.swmansion.com/TypeGPU/getting-started)
7
7
 
8
8
  </div>
9
9
 
@@ -15,7 +15,7 @@
15
15
 
16
16
  ## Documentation
17
17
 
18
- We created a set of guides and tutorials to get you up and running fast. Check out our [Official Docs](https://docs.swmansion.com/TypeGPU/guides/getting-started)!
18
+ We created a set of guides and tutorials to get you up and running fast. Check out our [Official Docs](https://docs.swmansion.com/TypeGPU/getting-started)!
19
19
 
20
20
  ## What's next?
21
21
 
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var Ve=Object.defineProperty,De=Object.defineProperties;var Fe=Object.getOwnPropertyDescriptors;var we=Object.getOwnPropertySymbols;var Se=Object.prototype.hasOwnProperty,Ce=Object.prototype.propertyIsEnumerable;var Q=(e,r,n)=>r in e?Ve(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n,lr= exports.a =(e,r)=>{for(var n in r||(r={}))Se.call(r,n)&&Q(e,n,r[n]);if(we)for(var n of we(r))Ce.call(r,n)&&Q(e,n,r[n]);return e},mr= exports.b =(e,r)=>De(e,Fe(r));var a=(e,r,n)=>(Q(e,typeof r!="symbol"?r+"":r,n),n);var _typedbinary = require('typed-binary'); var _typedbinary2 = _interopRequireDefault(_typedbinary);var X=0;function pr(e){X++;try{return e()}finally{X--}}var f=()=>X>0;var Le={type:"bool"},We=e=>f()?`u32(${e})`:typeof e=="boolean"?e?1:0:Number.isInteger(e)?((e<0||e>4294967295)&&console.warn(`u32 value ${e} overflowed`),(e&4294967295)>>>0):Math.max(0,Math.min(4294967295,Math.floor(e))),Y= exports.v =Object.assign(We,{type:"u32"}),Be=e=>{if(f())return`i32(${e})`;if(typeof e=="boolean")return e?1:0;if(Number.isInteger(e))return(e<-2147483648||e>2147483647)&&console.warn(`i32 value ${e} overflowed`),(e|0)&4294967295;let r=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,r))},Z= exports.w =Object.assign(Be,{type:"i32"}),Ne=e=>{if(f())return`f32(${e})`;if(typeof e=="boolean")return e?1:0;let r=new Float32Array(1);return r[0]=e,r[0]},ee= exports.x =Object.assign(Ne,{type:"f32"}),Ee=e=>{if(f())return`f16(${e})`;if(typeof e=="boolean")return e?1:0;let r=new ArrayBuffer(2);return _typedbinary2.default.f16.write(new _typedbinary2.default.BufferWriter(r),e),_typedbinary2.default.f16.read(new _typedbinary2.default.BufferReader(r))},Pe= exports.y =Object.assign(Ee,{type:"f16"});var Ie=["bool","f32","f16","i32","u32","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","mat2x2f","mat3x3f","mat4x4f","struct","array","atomic","decorated"];function W(e){return Ie.includes(e==null?void 0:e.type)}function B(e){return(e==null?void 0:e.type)==="array"}function N(e){return(e==null?void 0:e.type)==="struct"}function Me(e){return(e==null?void 0:e.type)==="atomic"}function E(e){return(e==null?void 0:e.type)==="@align"}function P(e){return(e==null?void 0:e.type)==="@size"}function re(e){return(e==null?void 0:e.type)==="@location"}function ne(e){return(e==null?void 0:e.type)==="@builtin"}function d(e){return(e==null?void 0:e.type)==="decorated"}var $e=e=>new te(e),te=class{constructor(r){this.propTypes=r;a(this,"_label");a(this,"type","struct");a(this,"~repr");a(this,"~exotic")}get label(){return this._label}$name(r){return this._label=r,this}};var b=(e,r)=>{let n=r-1,t=~n;return e&n?(e&t)+r:e};var ze=["uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10-10-10-2"];var Re=["loose-struct","loose-array","loose-decorated",...ze];function K(e){return Re.includes(e==null?void 0:e.type)}function w(e){return(e==null?void 0:e.type)==="loose-array"}function z(e){return(e==null?void 0:e.type)==="loose-struct"}function c(e){return(e==null?void 0:e.type)==="loose-decorated"}function g(e){var r,n;return(n=(r=e.attribs)==null?void 0:r.find(E))==null?void 0:n.value}function ge(e){var r,n;return(n=(r=e.attribs)==null?void 0:r.find(P))==null?void 0:n.value}function hr(e){var r,n;return(n=(r=e.attribs)==null?void 0:r.find(re))==null?void 0:n.value}function Ue(e){return W(e)||K(e)}function T(e){let r={"~repr":void 0,type:e.type};return Object.assign((...t)=>{var s;let o=t;if(f())return`${r.type}(${o.join(", ")})`;if(o.length<=1)return e.makeFromScalar((s=o[0])!=null?s:0);if(o.length===e.length)return e.make(...o);throw new Error(`'${e.type}' constructor called with invalid number of arguments.`)},r)}var I=class{constructor(r,n){this.x=r;this.y=n;a(this,"length",2)}*[Symbol.iterator](){yield this.x,yield this.y}get 0(){return this.x}get 1(){return this.y}set 0(r){this.x=r}set 1(r){this.y=r}resolve(){return`${this.kind}(${this.x}, ${this.y})`}},v=class e extends I{constructor(){super(...arguments);a(this,"kind","vec2f")}make2(n,t){return new e(n,t)}make3(n,t,o){return new k(n,t,o)}make4(n,t,o,s){return new F(n,t,o,s)}},A=class e extends I{constructor(){super(...arguments);a(this,"kind","vec2i")}make2(n,t){return new e(n,t)}make3(n,t,o){return new V(n,t,o)}make4(n,t,o,s){return new S(n,t,o,s)}},h=class e extends I{constructor(){super(...arguments);a(this,"kind","vec2u")}make2(n,t){return new e(n,t)}make3(n,t,o){return new D(n,t,o)}make4(n,t,o,s){return new C(n,t,o,s)}},M=class{constructor(r,n,t){this.x=r;this.y=n;this.z=t;a(this,"length",3)}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}get 0(){return this.x}get 1(){return this.y}get 2(){return this.z}set 0(r){this.x=r}set 1(r){this.y=r}set 2(r){this.z=r}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z})`}},k=class e extends M{constructor(){super(...arguments);a(this,"kind","vec3f")}make2(n,t){return new v(n,t)}make3(n,t,o){return new e(n,t,o)}make4(n,t,o,s){return new F(n,t,o,s)}},V=class e extends M{constructor(){super(...arguments);a(this,"kind","vec3i")}make2(n,t){return new A(n,t)}make3(n,t,o){return new e(n,t,o)}make4(n,t,o,s){return new S(n,t,o,s)}},D=class e extends M{constructor(){super(...arguments);a(this,"kind","vec3u")}make2(n,t){return new h(n,t)}make3(n,t,o){return new e(n,t,o)}make4(n,t,o,s){return new C(n,t,o,s)}},O=class{constructor(r,n,t,o){this.x=r;this.y=n;this.z=t;this.w=o;a(this,"length",4)}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}get 0(){return this.x}get 1(){return this.y}get 2(){return this.z}get 3(){return this.w}set 0(r){this.x=r}set 1(r){this.y=r}set 2(r){this.z=r}set 3(r){this.w=r}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z}, ${this.w})`}},F=class e extends O{constructor(){super(...arguments);a(this,"kind","vec4f")}make2(n,t){return new v(n,t)}make3(n,t,o){return new k(n,t,o)}make4(n,t,o,s){return new e(n,t,o,s)}},S=class e extends O{constructor(){super(...arguments);a(this,"kind","vec4i")}make2(n,t){return new A(n,t)}make3(n,t,o){return new V(n,t,o)}make4(n,t,o,s){return new e(n,t,o,s)}},C=class e extends O{constructor(){super(...arguments);a(this,"kind","vec4u")}make2(n,t){return new h(n,t)}make3(n,t,o){return new D(n,t,o)}make4(n,t,o,s){return new e(n,t,o,s)}},i={get:(e,r)=>{if(typeof r=="symbol"||!Number.isNaN(Number.parseInt(r)))return Reflect.get(e,r);let n=e,t=new Array(r.length),o=0;for(let s of r){switch(s){case"x":t[o]=n.x;break;case"y":t[o]=n.y;break;case"z":t[o]=n.z;break;case"w":t[o]=n.w;break;default:return Reflect.get(n,r)}o++}return r.length===4?new Proxy(n.make4(t[0],t[1],t[2],t[3]),i):r.length===3?new Proxy(n.make3(t[0],t[1],t[2]),i):r.length===2?new Proxy(n.make2(t[0],t[1]),i):Reflect.get(e,r)}},p= exports.z =T({type:"vec2f",length:2,make:(e,r)=>new Proxy(new v(e,r),i),makeFromScalar:e=>new Proxy(new v(e,e),i)}),$= exports.A =T({type:"vec2i",length:2,make:(e,r)=>new Proxy(new A(e,r),i),makeFromScalar:e=>new Proxy(new A(e,e),i)}),R= exports.B =T({type:"vec2u",length:2,make:(e,r)=>new Proxy(new h(e,r),i),makeFromScalar:e=>new Proxy(new h(e,e),i)}),U= exports.C =T({type:"vec3f",length:3,make:(e,r,n)=>new Proxy(new k(e,r,n),i),makeFromScalar:e=>new Proxy(new k(e,e,e),i)}),oe= exports.D =T({type:"vec3i",length:3,make:(e,r,n)=>new Proxy(new V(e,r,n),i),makeFromScalar:e=>new Proxy(new V(e,e,e),i)}),ae= exports.E =T({type:"vec3u",length:3,make:(e,r,n)=>new Proxy(new D(e,r,n),i),makeFromScalar:e=>new Proxy(new D(e,e,e),i)}),x= exports.F =T({type:"vec4f",length:4,make:(e,r,n,t)=>new Proxy(new F(e,r,n,t),i),makeFromScalar:e=>new Proxy(new F(e,e,e,e),i)}),_= exports.G =T({type:"vec4i",length:4,make:(e,r,n,t)=>new Proxy(new S(e,r,n,t),i),makeFromScalar:e=>new Proxy(new S(e,e,e,e),i)}),j= exports.H =T({length:4,type:"vec4u",make:(e,r,n,t)=>new Proxy(new C(e,r,n,t),i),makeFromScalar:e=>new Proxy(new C(e,e,e,e),i)});var u=class{constructor(r){this.type=r;a(this,"~repr")}},_e={uint8x2:R,uint8x4:j,sint8x2:$,sint8x4:_,unorm8x2:p,unorm8x4:x,snorm8x2:p,snorm8x4:x,uint16x2:R,uint16x4:j,sint16x2:$,sint16x4:_,unorm16x2:p,unorm16x4:x,snorm16x2:p,snorm16x4:x,float16x2:p,float16x4:x,float32:ee,float32x2:p,float32x3:U,float32x4:x,uint32:Y,uint32x2:R,uint32x3:ae,uint32x4:j,sint32:Z,sint32x2:$,sint32x3:oe,sint32x4:_,"unorm10-10-10-2":x},ve= exports.I =Object.keys(_e),Lr= exports.J =new u("uint8x2"),Wr= exports.K =new u("uint8x4"),Br= exports.L =new u("sint8x2"),Nr= exports.M =new u("sint8x4"),Er= exports.N =new u("unorm8x2"),Pr= exports.O =new u("unorm8x4"),Ir= exports.P =new u("snorm8x2"),Mr= exports.Q =new u("snorm8x4"),Or= exports.R =new u("uint16x2"),$r= exports.S =new u("uint16x4"),Rr= exports.T =new u("sint16x2"),Ur= exports.U =new u("sint16x4"),_r= exports.V =new u("unorm16x2"),jr= exports.W =new u("unorm16x4"),Gr= exports.X =new u("snorm16x2"),Kr= exports.Y =new u("snorm16x4"),Hr= exports.Z =new u("float16x2"),Jr= exports._ =new u("float16x4"),qr= exports.$ =new u("float32"),Qr= exports.aa =new u("float32x2"),Xr= exports.ba =new u("float32x3"),Yr= exports.ca =new u("float32x4"),Zr= exports.da =new u("uint32"),en= exports.ea =new u("uint32x2"),rn= exports.fa =new u("uint32x3"),nn= exports.ga =new u("uint32x4"),tn= exports.ha =new u("sint32"),on= exports.ia =new u("sint32x2"),an= exports.ja =new u("sint32x3"),sn= exports.ka =new u("sint32x4"),un= exports.la =new u("unorm10-10-10-2");var je={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2i:8,vec2u:8,vec3f:16,vec3i:16,vec3u:16,vec4f:16,vec4i:16,vec4u:16,mat2x2f:8,mat3x3f:16,mat4x4f:16};function Ge(e){var t,o,s;let r=e==null?void 0:e.type,n=je[r];if(n!==void 0)return n;if(N(e))return Object.values(e.propTypes).map(l).reduce((y,be)=>y>be?y:be);if(B(e))return l(e.elementType);if(z(e)){let y=Object.values(e.propTypes)[0];return y&&(t=g(y))!=null?t:1}if(w(e))return(o=g(e.elementType))!=null?o:1;if(d(e)||c(e))return(s=g(e))!=null?s:l(e.inner);if(ve.includes(r))return 1;throw new Error(`Cannot determine alignment of data: ${JSON.stringify(e)}`)}function Ke(e){var r,n;if(z(e)){let t=Object.values(e.propTypes)[0];return t?L(t):1}return w(e)?L(e.elementType):c(e)?(r=g(e))!=null?r:L(e.inner):(n=g(e))!=null?n:1}var Ae=new WeakMap,he=new WeakMap;function l(e){let r=Ae.get(e);return r===void 0&&(r=Ge(e),Ae.set(e,r)),r}function L(e){let r=he.get(e);return r===void 0&&(r=Ke(e),he.set(e,r)),r}function He(e){return l(e)}var Je={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2i:8,vec2u:8,vec3f:12,vec3i:12,vec3u:12,vec4f:16,vec4i:16,vec4u:16,mat2x2f:16,mat3x3f:48,mat4x4f:64,uint8x2:2,uint8x4:4,sint8x2:2,sint8x4:4,unorm8x2:2,unorm8x4:4,snorm8x2:2,snorm8x4:4,uint16x2:4,uint16x4:8,sint16x2:4,sint16x4:8,unorm16x2:4,unorm16x4:8,snorm16x2:4,snorm16x4:8,float16x2:4,float16x4:8,float32:4,float32x2:8,float32x3:12,float32x4:16,uint32:4,uint32x2:8,uint32x3:12,uint32x4:16,sint32:4,sint32x2:8,sint32x3:12,sint32x4:16,"unorm10-10-10-2":4};function qe(e){let r=0;for(let n of Object.values(e.propTypes)){if(Number.isNaN(r))throw new Error("Only the last property of a struct can be unbounded");if(r=b(r,l(n)),r+=m(n),Number.isNaN(r)&&n.type!=="array")throw new Error("Cannot nest unbounded struct within another struct")}return b(r,l(e))}function Qe(e){let r=0;for(let n of Object.values(e.propTypes)){let t=L(n);r=b(r,t),r+=m(n)}return r}function Xe(e){var n;let r=Je[e==null?void 0:e.type];if(r!==void 0)return r;if(N(e))return qe(e);if(z(e))return Qe(e);if(B(e)){if(e.elementCount===0)return Number.NaN;let t=l(e.elementType);return b(m(e.elementType),t)*e.elementCount}if(w(e)){let t=L(e.elementType);return b(m(e.elementType),t)*e.elementCount}if(d(e)||c(e))return(n=ge(e))!=null?n:m(e.inner);throw new Error(`Cannot determine size of data: ${e}`)}var ke=new WeakMap;function m(e){let r=ke.get(e);return r===void 0&&(r=Xe(e),ke.set(e,r)),r}function Ye(e){return m(e)}var Ze=(e,r)=>new se(e,r),se=class{constructor(r,n){this.elementType=r;this.elementCount=n;a(this,"type","array");a(this,"~repr");a(this,"~exotic");if(Number.isNaN(m(r)))throw new Error("Cannot nest runtime sized arrays.")}};var er=(e,r)=>new ue(e,r),ue=class{constructor(r,n){this.elementType=r;this.elementCount=n;a(this,"type","loose-array");a(this,"~repr")}};var rr=e=>new ie(e),ie=class{constructor(r){this.propTypes=r;a(this,"type","loose-struct");a(this,"~repr")}};function de(e){let r={"~repr":void 0,type:e.type,label:e.type};return Object.assign((...t)=>{let o=[];for(let s of t)if(typeof s=="number")o.push(s);else for(let y=0;y<s.length;++y)o.push(s[y]);for(let s=o.length;s<e.columns*e.rows;++s)o.push(0);return e.makeFromElements(...o)},r)}var ye=class{constructor(...r){a(this,"columns");a(this,"length",4);this.columns=[this.makeColumn(r[0],r[1]),this.makeColumn(r[2],r[3])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[1].x}get 3(){return this.columns[1].y}set 0(r){this.columns[0].x=r}set 1(r){this.columns[0].y=r}set 2(r){this.columns[1].x=r}set 3(r){this.columns[1].y=r}},xe=class extends ye{constructor(){super(...arguments);a(this,"kind","mat2x2f")}makeColumn(n,t){return p(n,t)}},le=class{constructor(...r){a(this,"columns");a(this,"length",12);this.columns=[this.makeColumn(r[0],r[1],r[2]),this.makeColumn(r[3],r[4],r[5]),this.makeColumn(r[6],r[7],r[8])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[0].z}get 3(){return 0}get 4(){return this.columns[1].x}get 5(){return this.columns[1].y}get 6(){return this.columns[1].z}get 7(){return 0}get 8(){return this.columns[2].x}get 9(){return this.columns[2].y}get 10(){return this.columns[2].z}get 11(){return 0}set 0(r){this.columns[0].x=r}set 1(r){this.columns[0].y=r}set 2(r){this.columns[0].z=r}set 3(r){}set 4(r){this.columns[1].x=r}set 5(r){this.columns[1].y=r}set 6(r){this.columns[1].z=r}set 7(r){}set 8(r){this.columns[2].x=r}set 9(r){this.columns[2].y=r}set 10(r){this.columns[2].z=r}set 11(r){}},me=class extends le{constructor(){super(...arguments);a(this,"kind","mat3x3f")}makeColumn(n,t,o){return U(n,t,o)}},ce=class{constructor(...r){a(this,"columns");a(this,"length",16);this.columns=[this.makeColumn(r[0],r[1],r[2],r[3]),this.makeColumn(r[4],r[5],r[6],r[7]),this.makeColumn(r[8],r[9],r[10],r[11]),this.makeColumn(r[12],r[13],r[14],r[15])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[0].z}get 3(){return this.columns[0].w}get 4(){return this.columns[1].x}get 5(){return this.columns[1].y}get 6(){return this.columns[1].z}get 7(){return this.columns[1].w}get 8(){return this.columns[2].x}get 9(){return this.columns[2].y}get 10(){return this.columns[2].z}get 11(){return this.columns[2].w}get 12(){return this.columns[3].x}get 13(){return this.columns[3].y}get 14(){return this.columns[3].z}get 15(){return this.columns[3].w}set 0(r){this.columns[0].x=r}set 1(r){this.columns[0].y=r}set 2(r){this.columns[0].z=r}set 3(r){this.columns[0].w=r}set 4(r){this.columns[1].x=r}set 5(r){this.columns[1].y=r}set 6(r){this.columns[1].z=r}set 7(r){this.columns[1].w=r}set 8(r){this.columns[2].x=r}set 9(r){this.columns[2].y=r}set 10(r){this.columns[2].z=r}set 11(r){this.columns[2].w=r}set 12(r){this.columns[3].x=r}set 13(r){this.columns[3].y=r}set 14(r){this.columns[3].z=r}set 15(r){this.columns[3].w=r}},pe=class extends ce{constructor(){super(...arguments);a(this,"kind","mat4x4f")}makeColumn(n,t,o,s){return x(n,t,o,s)}},nr= exports.Aa =de({type:"mat2x2f",rows:2,columns:2,makeFromElements:(...e)=>new xe(...e)}),tr= exports.Ba =de({type:"mat3x3f",rows:3,columns:3,makeFromElements:(...e)=>new me(...e)}),or= exports.Ca =de({type:"mat4x4f",rows:4,columns:4,makeFromElements:(...e)=>new pe(...e)});function ar(e){return e.kind==="mat3x3f"?[e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]]:Array.from({length:e.length}).map((r,n)=>e[n])}function sr(e){return new Te(e)}var Te=class{constructor(r){this.inner=r;a(this,"type","atomic");a(this,"~repr")}};function fe(e,r){return d(e)?new J(e.inner,[r,...e.attribs]):c(e)?new q(e.inner,[r,...e.attribs]):K(e)?new q(e,[r]):new J(e,[r])}function ur(e,r){return fe(r,{type:"@align",value:e})}function ir(e,r){return fe(r,{type:"@size",value:e})}function yr(e,r){return fe(r,{type:"@location",value:e})}function xr(e){return(d(e)||c(e))&&e.attribs.find(ne)!==void 0}function Pn(e){return!d(e)&&!c(e)?"":e.attribs.map(r=>`${r.type}(${r.value}) `).join("")}var H=class{constructor(r,n){this.inner=r;this.attribs=n;a(this,"~repr");var s,y;let t=(s=n.find(E))==null?void 0:s.value,o=(y=n.find(P))==null?void 0:y.value;if(t!==void 0){if(t<=0)throw new Error(`Custom data alignment must be a positive number, got: ${t}.`);if(Math.log2(t)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${t}.`);if(W(this.inner)&&t%l(this.inner)!==0)throw new Error(`Custom alignment has to be a multiple of the standard data alignment. Got: ${t}, expected multiple of: ${l(this.inner)}.`)}if(o!==void 0){if(o<m(this.inner))throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${o}, expected at least: ${m(this.inner)}.`);if(o<=0)throw new Error(`Custom data size must be a positive number. Got: ${o}.`)}}},J=class extends H{constructor(){super(...arguments);a(this,"type","decorated")}},q=class extends H{constructor(){super(...arguments);a(this,"type","loose-decorated")}};exports.a = lr; exports.b = mr; exports.c = a; exports.d = W; exports.e = B; exports.f = N; exports.g = Me; exports.h = E; exports.i = P; exports.j = re; exports.k = ne; exports.l = d; exports.m = K; exports.n = w; exports.o = z; exports.p = c; exports.q = hr; exports.r = Ue; exports.s = pr; exports.t = f; exports.u = Le; exports.v = Y; exports.w = Z; exports.x = ee; exports.y = Pe; exports.z = p; exports.A = $; exports.B = R; exports.C = U; exports.D = oe; exports.E = ae; exports.F = x; exports.G = _; exports.H = j; exports.I = ve; exports.J = Lr; exports.K = Wr; exports.L = Br; exports.M = Nr; exports.N = Er; exports.O = Pr; exports.P = Ir; exports.Q = Mr; exports.R = Or; exports.S = $r; exports.T = Rr; exports.U = Ur; exports.V = _r; exports.W = jr; exports.X = Gr; exports.Y = Kr; exports.Z = Hr; exports._ = Jr; exports.$ = qr; exports.aa = Qr; exports.ba = Xr; exports.ca = Yr; exports.da = Zr; exports.ea = en; exports.fa = rn; exports.ga = nn; exports.ha = tn; exports.ia = on; exports.ja = an; exports.ka = sn; exports.la = un; exports.ma = l; exports.na = L; exports.oa = He; exports.pa = m; exports.qa = Ye; exports.ra = ur; exports.sa = ir; exports.ta = yr; exports.ua = xr; exports.va = Pn; exports.wa = $e; exports.xa = Ze; exports.ya = er; exports.za = rr; exports.Aa = nr; exports.Ba = tr; exports.Ca = or; exports.Da = ar; exports.Ea = sr;
2
+ //# sourceMappingURL=chunk-CKSBATTP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/numeric.ts","../src/gpuMode.ts","../src/data/wgslTypes.ts","../src/data/struct.ts","../src/mathUtils.ts","../src/shared/vertexFormat.ts","../src/data/dataTypes.ts","../src/data/vector.ts","../src/data/vertexFormatData.ts","../src/data/alignmentOf.ts","../src/data/sizeOf.ts","../src/data/array.ts","../src/data/looseArray.ts","../src/data/looseStruct.ts","../src/data/matrix.ts","../src/data/atomic.ts","../src/data/attributes.ts"],"names":["bin","gpuDepth","onGPU","callback","inGPUMode","bool","u32Cast","v","u32","i32Cast","value","i32","f32Cast","arr","f32","f16Cast","f16","wgslTypeLiterals","isWgslData","isWgslArray","schema","isWgslStruct","isAtomic","isAlignAttrib","isSizeAttrib","isLocationAttrib","isBuiltinAttrib","isDecorated","struct","props","TgpuStructImpl","propTypes","__publicField","label","roundUp","modulo","bitMask","invBitMask","vertexFormats","looseTypeLiterals","isLooseData","data","isLooseArray","isLooseStruct","isLooseDecorated","getCustomAlignment","_a","_b","getCustomSize","getCustomLocation","isData","makeVecSchema","options","VecSchema","args","values","vec2Impl","x","y","vec2fImpl","_vec2fImpl","z","vec3fImpl","w","vec4fImpl","vec2iImpl","_vec2iImpl","vec3iImpl","vec4iImpl","vec2uImpl","_vec2uImpl","vec3uImpl","vec4uImpl","vec3Impl","_vec3fImpl","_vec3iImpl","_vec3uImpl","vec4Impl","_vec4fImpl","_vec4iImpl","_vec4uImpl","vecProxyHandler","target","prop","targetAsVec4","idx","char","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","TgpuVertexFormatDataImpl","type","formatToWGSLType","packedFormats","uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10_10_10_2","knownAlignmentMap","computeAlignment","_c","dataType","knownAlignment","alignmentOf","a","b","firstProp","computeCustomAlignment","customAlignmentOf","cachedAlignments","cachedCustomAlignments","alignment","PUBLIC_alignmentOf","knownSizesMap","sizeOfStruct","size","property","sizeOf","sizeOfLooseStruct","computeSize","knownSize","cachedSizes","PUBLIC_sizeOf","arrayOf","elementType","elementCount","TgpuArrayImpl","looseArrayOf","count","LooseArrayImpl","looseStruct","properties","LooseStructImpl","createMatSchema","MatSchema","elements","arg","i","mat2x2Impl","mat2x2fImpl","e0","e1","mat3x3Impl","_","mat3x3fImpl","mat4x4Impl","mat4x4fImpl","mat2x2f","mat3x3f","mat4x4f","matToArray","mat","atomic","AtomicImpl","inner","attribute","attrib","DecoratedImpl","LooseDecoratedImpl","align","location","isBuiltin","getAttributesString","field","BaseDecoratedImpl","attribs","alignAttrib","sizeAttrib"],"mappings":"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","sourcesContent":["import bin from 'typed-binary';\nimport { inGPUMode } from '../gpuMode';\nimport type { Bool, F16, F32, I32, U32 } from './wgslTypes';\n\n/**\n * A schema that represents a boolean value. (equivalent to `bool` in WGSL)\n */\nexport const bool: Bool = {\n type: 'bool',\n} as Bool;\n\n/**\n * Unsigned 32-bit integer schema representing a single WGSL u32 value.\n */\nexport type NativeU32 = U32 & { '~exotic': U32 } & ((\n v: number | boolean,\n ) => number);\n\nconst u32Cast = (v: number | boolean) => {\n if (inGPUMode()) {\n return `u32(${v})` as unknown as number;\n }\n\n if (typeof v === 'boolean') {\n return v ? 1 : 0;\n }\n if (Number.isInteger(v)) {\n if (v < 0 || v > 0xffffffff) {\n console.warn(`u32 value ${v} overflowed`);\n }\n const value = v & 0xffffffff;\n return value >>> 0;\n }\n return Math.max(0, Math.min(0xffffffff, Math.floor(v)));\n};\n\n/**\n * A schema that represents an unsigned 32-bit integer value. (equivalent to `u32` in WGSL)\n *\n * Can also be called to cast a value to an u32 in accordance with WGSL casting rules.\n *\n * @example\n * const value = u32(3.14); // 3\n * @example\n * const value = u32(-1); // 4294967295\n * @example\n * const value = u32(-3.1); // 0\n */\nexport const u32: NativeU32 = Object.assign(u32Cast, {\n type: 'u32',\n}) as NativeU32;\n\n/**\n * Signed 32-bit integer schema representing a single WGSL i32 value.\n */\nexport type NativeI32 = I32 & { '~exotic': I32 } & ((\n v: number | boolean,\n ) => number);\n\nconst i32Cast = (v: number | boolean) => {\n if (inGPUMode()) {\n return `i32(${v})` as unknown as number;\n }\n\n if (typeof v === 'boolean') {\n return v ? 1 : 0;\n }\n if (Number.isInteger(v)) {\n if (v < -0x80000000 || v > 0x7fffffff) {\n console.warn(`i32 value ${v} overflowed`);\n }\n const value = v | 0;\n return value & 0xffffffff;\n }\n // round towards zero\n const value = v < 0 ? Math.ceil(v) : Math.floor(v);\n return Math.max(-0x80000000, Math.min(0x7fffffff, value));\n};\n\n/**\n * A schema that represents a signed 32-bit integer value. (equivalent to `i32` in WGSL)\n *\n * Can also be called to cast a value to an i32 in accordance with WGSL casting rules.\n *\n * @example\n * const value = i32(3.14); // 3\n * @example\n * const value = i32(-3.9); // -3\n * @example\n * const value = i32(10000000000) // 1410065408\n */\nexport const i32: NativeI32 = Object.assign(i32Cast, {\n type: 'i32',\n}) as NativeI32;\n\n/**\n * 32-bit float schema representing a single WGSL f32 value.\n */\nexport type NativeF32 = F32 & { '~exotic': F32 } & ((\n v: number | boolean,\n ) => number);\n\nconst f32Cast = (v: number | boolean) => {\n if (inGPUMode()) {\n return `f32(${v})` as unknown as number;\n }\n if (typeof v === 'boolean') {\n return v ? 1 : 0;\n }\n const arr = new Float32Array(1);\n arr[0] = v;\n return arr[0];\n};\n\n/**\n * A schema that represents a 32-bit float value. (equivalent to `f32` in WGSL)\n *\n * Can also be called to cast a value to an f32.\n *\n * @example\n * const value = f32(true); // 1\n */\nexport const f32: NativeF32 = Object.assign(f32Cast, {\n type: 'f32',\n}) as NativeF32;\n\n/**\n * 16-bit float schema representing a single WGSL f16 value.\n */\nexport type NativeF16 = F16 & { '~exotic': F16 } & ((\n v: number | boolean,\n ) => number);\n\nconst f16Cast = (v: number | boolean) => {\n if (inGPUMode()) {\n // TODO: make usage of f16() in GPU mode check for feature availability and throw if not available\n return `f16(${v})` as unknown as number;\n }\n if (typeof v === 'boolean') {\n return v ? 1 : 0;\n }\n const arr = new ArrayBuffer(2);\n bin.f16.write(new bin.BufferWriter(arr), v);\n return bin.f16.read(new bin.BufferReader(arr));\n};\n\n/**\n * A schema that represents a 16-bit float value. (equivalent to `f16` in WGSL)\n *\n * Can also be called to cast a value to an f16.\n *\n * @example\n * const value = f16(true); // 1\n * @example\n * const value = f16(21877.5); // 21872\n */\nexport const f16: NativeF16 = Object.assign(f16Cast, {\n type: 'f16',\n}) as NativeF16;\n","let gpuDepth = 0;\n\nexport function onGPU<T>(callback: () => T): T {\n gpuDepth++;\n try {\n return callback();\n } finally {\n gpuDepth--;\n }\n}\n\nexport const inGPUMode = () => gpuDepth > 0;\n","import type { Infer, InferRecord } from '../shared/repr';\n\nexport interface NumberArrayView {\n readonly length: number;\n [n: number]: number;\n}\n\nexport interface BaseWgslData {\n type: string;\n /** Type-token, not available at runtime */\n readonly '~repr': unknown;\n}\n\n// #region Instance Types\n\ninterface Swizzle2<T2, T3, T4> {\n readonly xx: T2;\n readonly xy: T2;\n readonly yx: T2;\n readonly yy: T2;\n\n readonly xxx: T3;\n readonly xxy: T3;\n readonly xyx: T3;\n readonly xyy: T3;\n readonly yxx: T3;\n readonly yxy: T3;\n readonly yyx: T3;\n readonly yyy: T3;\n\n readonly xxxx: T4;\n readonly xxxy: T4;\n readonly xxyx: T4;\n readonly xxyy: T4;\n readonly xyxx: T4;\n readonly xyxy: T4;\n readonly xyyx: T4;\n readonly xyyy: T4;\n readonly yxxx: T4;\n readonly yxxy: T4;\n readonly yxyx: T4;\n readonly yxyy: T4;\n readonly yyxx: T4;\n readonly yyxy: T4;\n readonly yyyx: T4;\n readonly yyyy: T4;\n}\n\ninterface Swizzle3<T2, T3, T4> extends Swizzle2<T2, T3, T4> {\n readonly xz: T2;\n readonly yz: T2;\n readonly zx: T2;\n readonly zy: T2;\n readonly zz: T2;\n\n readonly xxz: T3;\n readonly xyz: T3;\n readonly xzx: T3;\n readonly xzy: T3;\n readonly xzz: T3;\n readonly yxz: T3;\n readonly yyz: T3;\n readonly yzx: T3;\n readonly yzy: T3;\n readonly yzz: T3;\n readonly zxx: T3;\n readonly zxy: T3;\n readonly zxz: T3;\n readonly zyx: T3;\n readonly zyy: T3;\n readonly zyz: T3;\n readonly zzx: T3;\n readonly zzy: T3;\n readonly zzz: T3;\n\n readonly xxxz: T4;\n readonly xxyz: T4;\n readonly xxzx: T4;\n readonly xxzy: T4;\n readonly xxzz: T4;\n readonly xyxz: T4;\n readonly xyyz: T4;\n readonly xyzx: T4;\n readonly xyzy: T4;\n readonly xyzz: T4;\n readonly xzxx: T4;\n readonly xzxy: T4;\n readonly xzxz: T4;\n readonly xzyx: T4;\n readonly xzyy: T4;\n readonly xzyz: T4;\n readonly xzzx: T4;\n readonly xzzy: T4;\n readonly xzzz: T4;\n readonly yxxz: T4;\n readonly yxyz: T4;\n readonly yxzx: T4;\n readonly yxzy: T4;\n readonly yxzz: T4;\n readonly yyxz: T4;\n readonly yyyz: T4;\n readonly yyzx: T4;\n readonly yyzy: T4;\n readonly yyzz: T4;\n readonly yzxx: T4;\n readonly yzxy: T4;\n readonly yzxz: T4;\n readonly yzyx: T4;\n readonly yzyy: T4;\n readonly yzyz: T4;\n readonly yzzx: T4;\n readonly yzzy: T4;\n readonly yzzz: T4;\n readonly zxxx: T4;\n readonly zxxy: T4;\n readonly zxxz: T4;\n readonly zxyx: T4;\n readonly zxyy: T4;\n readonly zxyz: T4;\n readonly zxzx: T4;\n readonly zxzy: T4;\n readonly zxzz: T4;\n readonly zyxx: T4;\n readonly zyxy: T4;\n readonly zyxz: T4;\n readonly zyyx: T4;\n readonly zyyy: T4;\n readonly zyyz: T4;\n readonly zyzx: T4;\n readonly zyzy: T4;\n readonly zyzz: T4;\n readonly zzxx: T4;\n readonly zzxy: T4;\n readonly zzxz: T4;\n readonly zzyx: T4;\n readonly zzyy: T4;\n readonly zzyz: T4;\n readonly zzzx: T4;\n readonly zzzy: T4;\n readonly zzzz: T4;\n}\n\ninterface Swizzle4<T2, T3, T4> extends Swizzle3<T2, T3, T4> {\n readonly yw: T2;\n readonly zw: T2;\n readonly wx: T2;\n readonly wy: T2;\n readonly wz: T2;\n readonly ww: T2;\n\n readonly xxw: T3;\n readonly xyw: T3;\n readonly xzw: T3;\n readonly xwx: T3;\n readonly xwy: T3;\n readonly xwz: T3;\n readonly xww: T3;\n readonly yxw: T3;\n readonly yyw: T3;\n readonly yzw: T3;\n readonly ywx: T3;\n readonly ywy: T3;\n readonly ywz: T3;\n readonly yww: T3;\n readonly zxw: T3;\n readonly zyw: T3;\n readonly zzw: T3;\n readonly zwx: T3;\n readonly zwy: T3;\n readonly zwz: T3;\n readonly zww: T3;\n readonly wxx: T3;\n readonly wxz: T3;\n readonly wxy: T3;\n readonly wyy: T3;\n readonly wyz: T3;\n readonly wzz: T3;\n readonly wwx: T3;\n readonly wwy: T3;\n readonly wwz: T3;\n readonly www: T3;\n\n readonly xxxw: T4;\n readonly xxyw: T4;\n readonly xxzw: T4;\n readonly xxwx: T4;\n readonly xxwy: T4;\n readonly xxwz: T4;\n readonly xxww: T4;\n readonly xyxw: T4;\n readonly xyyw: T4;\n readonly xyzw: T4;\n readonly xywx: T4;\n readonly xywy: T4;\n readonly xywz: T4;\n readonly xyww: T4;\n readonly xzxw: T4;\n readonly xzyw: T4;\n readonly xzzw: T4;\n readonly xzwx: T4;\n readonly xzwy: T4;\n readonly xzwz: T4;\n readonly xzww: T4;\n readonly xwxx: T4;\n readonly xwxy: T4;\n readonly xwxz: T4;\n readonly xwyy: T4;\n readonly xwyz: T4;\n readonly xwzz: T4;\n readonly xwwx: T4;\n readonly xwwy: T4;\n readonly xwwz: T4;\n readonly xwww: T4;\n readonly yxxw: T4;\n readonly yxyw: T4;\n readonly yxzw: T4;\n readonly yxwx: T4;\n readonly yxwy: T4;\n readonly yxwz: T4;\n readonly yxww: T4;\n readonly yyxw: T4;\n readonly yyyw: T4;\n readonly yyzw: T4;\n readonly yywx: T4;\n readonly yywy: T4;\n readonly yywz: T4;\n readonly yyww: T4;\n readonly yzxw: T4;\n readonly yzyw: T4;\n readonly yzzw: T4;\n readonly yzwx: T4;\n readonly yzwy: T4;\n readonly yzwz: T4;\n readonly yzww: T4;\n readonly ywxx: T4;\n readonly ywxy: T4;\n readonly ywxz: T4;\n readonly ywxw: T4;\n readonly ywyy: T4;\n readonly ywyz: T4;\n readonly ywzz: T4;\n readonly ywwx: T4;\n readonly ywwy: T4;\n readonly ywwz: T4;\n readonly ywww: T4;\n readonly zxxw: T4;\n readonly zxyw: T4;\n readonly zxzw: T4;\n readonly zxwx: T4;\n readonly zxwy: T4;\n readonly zxwz: T4;\n readonly zxww: T4;\n readonly zyxw: T4;\n readonly zyyw: T4;\n readonly zyzw: T4;\n readonly zywx: T4;\n readonly zywy: T4;\n readonly zywz: T4;\n readonly zyww: T4;\n readonly zzxw: T4;\n readonly zzyw: T4;\n readonly zzzw: T4;\n readonly zzwx: T4;\n readonly zzwy: T4;\n readonly zzwz: T4;\n readonly zzww: T4;\n readonly zwxx: T4;\n readonly zwxy: T4;\n readonly zwxz: T4;\n readonly zwxw: T4;\n readonly zwyy: T4;\n readonly zwyz: T4;\n readonly zwzz: T4;\n readonly zwwx: T4;\n readonly zwwy: T4;\n readonly zwwz: T4;\n readonly zwww: T4;\n readonly wxxx: T4;\n readonly wxxy: T4;\n readonly wxxz: T4;\n readonly wxxw: T4;\n readonly wxyx: T4;\n readonly wxyy: T4;\n readonly wxyz: T4;\n readonly wxyw: T4;\n readonly wxzx: T4;\n readonly wxzy: T4;\n readonly wxzz: T4;\n readonly wxzw: T4;\n readonly wxwx: T4;\n readonly wxwy: T4;\n readonly wxwz: T4;\n readonly wxww: T4;\n readonly wyxx: T4;\n readonly wyxy: T4;\n readonly wyxz: T4;\n readonly wyxw: T4;\n readonly wyyy: T4;\n readonly wyyz: T4;\n readonly wyzw: T4;\n readonly wywx: T4;\n readonly wywy: T4;\n readonly wywz: T4;\n readonly wyww: T4;\n readonly wzxx: T4;\n readonly wzxy: T4;\n readonly wzxz: T4;\n readonly wzxw: T4;\n readonly wzyy: T4;\n readonly wzyz: T4;\n readonly wzzy: T4;\n readonly wzzw: T4;\n readonly wzwx: T4;\n readonly wzwy: T4;\n readonly wzwz: T4;\n readonly wzww: T4;\n readonly wwxx: T4;\n readonly wwxy: T4;\n readonly wwxz: T4;\n readonly wwxw: T4;\n readonly wwyy: T4;\n readonly wwyz: T4;\n readonly wwzz: T4;\n readonly wwwx: T4;\n readonly wwwy: T4;\n readonly wwwz: T4;\n readonly wwww: T4;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec2f or vec2<f32>.\n * A vector with 2 elements of type f32\n */\nexport interface v2f extends NumberArrayView, Swizzle2<v2f, v3f, v4f> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec2f';\n x: number;\n y: number;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec2i or vec2<i32>.\n * A vector with 2 elements of type i32\n */\nexport interface v2i extends NumberArrayView, Swizzle2<v2i, v3i, v4i> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec2i';\n x: number;\n y: number;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec2u or vec2<u32>.\n * A vector with 2 elements of type u32\n */\nexport interface v2u extends NumberArrayView, Swizzle2<v2u, v3u, v4u> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec2u';\n x: number;\n y: number;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec3f or vec3<f32>.\n * A vector with 3 elements of type f32\n */\nexport interface v3f extends NumberArrayView, Swizzle3<v2f, v3f, v4f> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec3f';\n x: number;\n y: number;\n z: number;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec3i or vec3<i32>.\n * A vector with 3 elements of type i32\n */\nexport interface v3i extends NumberArrayView, Swizzle3<v2i, v3i, v4i> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec3i';\n x: number;\n y: number;\n z: number;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec3u or vec3<u32>.\n * A vector with 3 elements of type u32\n */\nexport interface v3u extends NumberArrayView, Swizzle3<v2u, v3u, v4u> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec3u';\n x: number;\n y: number;\n z: number;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec4f or vec4<f32>.\n * A vector with 4 elements of type f32\n */\nexport interface v4f extends NumberArrayView, Swizzle4<v2f, v3f, v4f> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec4f';\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec4i or vec4<i32>.\n * A vector with 4 elements of type i32\n */\nexport interface v4i extends NumberArrayView, Swizzle4<v2i, v3i, v4i> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec4i';\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec4u or vec4<u32>.\n * A vector with 4 elements of type u32\n */\nexport interface v4u extends NumberArrayView, Swizzle4<v2u, v3u, v4u> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec4u';\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\nexport interface matBase<TColumn> extends NumberArrayView {\n readonly columns: readonly TColumn[];\n}\n\n/**\n * Interface representing its WGSL matrix type counterpart: mat2x2\n * A matrix with 2 rows and 2 columns, with elements of type `TColumn`\n */\nexport interface mat2x2<TColumn> extends matBase<TColumn> {\n readonly length: 4;\n [n: number]: number;\n}\n\n/**\n * Interface representing its WGSL matrix type counterpart: mat2x2f or mat2x2<f32>\n * A matrix with 2 rows and 2 columns, with elements of type d.f32\n */\nexport interface m2x2f extends mat2x2<v2f> {\n readonly kind: 'mat2x2f';\n}\n\n/**\n * Interface representing its WGSL matrix type counterpart: mat3x3\n * A matrix with 3 rows and 3 columns, with elements of type `TColumn`\n */\nexport interface mat3x3<TColumn> extends matBase<TColumn> {\n readonly length: 12;\n [n: number]: number;\n}\n\n/**\n * Interface representing its WGSL matrix type counterpart: mat3x3f or mat3x3<f32>\n * A matrix with 3 rows and 3 columns, with elements of type d.f32\n */\nexport interface m3x3f extends mat3x3<v3f> {\n readonly kind: 'mat3x3f';\n}\n\n/**\n * Interface representing its WGSL matrix type counterpart: mat4x4\n * A matrix with 4 rows and 4 columns, with elements of type `TColumn`\n */\nexport interface mat4x4<TColumn> extends matBase<TColumn> {\n readonly length: 16;\n [n: number]: number;\n}\n\n/**\n * Interface representing its WGSL matrix type counterpart: mat4x4f or mat4x4<f32>\n * A matrix with 4 rows and 4 columns, with elements of type d.f32\n */\nexport interface m4x4f extends mat4x4<v4f> {\n readonly kind: 'mat4x4f';\n}\n\n// #endregion\n\n// #region WGSL Schema Types\n\n/**\n * Boolean schema representing a single WGSL bool value.\n * Cannot be used inside buffers as it is not host-shareable.\n */\nexport interface Bool {\n readonly type: 'bool';\n readonly '~repr': boolean;\n}\n\nexport interface F32 {\n readonly type: 'f32';\n /** Type-token, not available at runtime */\n readonly '~repr': number;\n}\n\nexport interface F16 {\n readonly type: 'f16';\n /** Type-token, not available at runtime */\n readonly '~repr': number;\n}\n\nexport interface I32 {\n readonly type: 'i32';\n /** Type-token, not available at runtime */\n readonly '~repr': number;\n}\n\nexport interface U32 {\n readonly type: 'u32';\n /** Type-token, not available at runtime */\n readonly '~repr': number;\n}\n\nexport interface Vec2f {\n readonly type: 'vec2f';\n /** Type-token, not available at runtime */\n readonly '~repr': v2f;\n}\n\nexport interface Vec2i {\n readonly type: 'vec2i';\n /** Type-token, not available at runtime */\n readonly '~repr': v2i;\n}\n\nexport interface Vec2u {\n readonly type: 'vec2u';\n /** Type-token, not available at runtime */\n readonly '~repr': v2u;\n}\n\nexport interface Vec3f {\n readonly type: 'vec3f';\n /** Type-token, not available at runtime */\n readonly '~repr': v3f;\n}\n\nexport interface Vec3i {\n readonly type: 'vec3i';\n /** Type-token, not available at runtime */\n readonly '~repr': v3i;\n}\n\nexport interface Vec3u {\n readonly type: 'vec3u';\n /** Type-token, not available at runtime */\n readonly '~repr': v3u;\n}\n\nexport interface Vec4f {\n readonly type: 'vec4f';\n /** Type-token, not available at runtime */\n readonly '~repr': v4f;\n}\n\nexport interface Vec4i {\n readonly type: 'vec4i';\n /** Type-token, not available at runtime */\n readonly '~repr': v4i;\n}\n\nexport interface Vec4u {\n readonly type: 'vec4u';\n /** Type-token, not available at runtime */\n readonly '~repr': v4u;\n}\n\nexport interface Mat2x2f {\n readonly type: 'mat2x2f';\n /** Type-token, not available at runtime */\n readonly '~repr': m2x2f;\n}\n\nexport interface Mat3x3f {\n readonly type: 'mat3x3f';\n /** Type-token, not available at runtime */\n readonly '~repr': m3x3f;\n}\n\nexport interface Mat4x4f {\n readonly type: 'mat4x4f';\n /** Type-token, not available at runtime */\n readonly '~repr': m4x4f;\n}\n\nexport interface WgslStruct<\n TProps extends Record<string, BaseWgslData> = Record<string, BaseWgslData>,\n> {\n readonly type: 'struct';\n readonly label?: string | undefined;\n readonly propTypes: TProps;\n /** Type-token, not available at runtime */\n readonly '~repr': InferRecord<TProps>;\n}\n\nexport interface WgslArray<TElement = BaseWgslData> {\n readonly type: 'array';\n readonly elementCount: number;\n readonly elementType: TElement;\n /** Type-token, not available at runtime */\n readonly '~repr': Infer<TElement>[];\n}\n\n/**\n * Schema representing the `atomic<...>` WGSL data type.\n */\nexport interface Atomic<TInner extends U32 | I32 = U32 | I32> {\n readonly type: 'atomic';\n readonly inner: TInner;\n /** Type-token, not available at runtime */\n readonly '~repr': Infer<TInner>;\n}\n\nexport interface Align<T extends number> {\n readonly type: '@align';\n readonly value: T;\n}\n\nexport interface Size<T extends number> {\n readonly type: '@size';\n readonly value: T;\n}\n\nexport interface Location<T extends number> {\n readonly type: '@location';\n readonly value: T;\n}\n\nexport interface Builtin<T extends string> {\n readonly type: '@builtin';\n readonly value: T;\n}\n\nexport interface Decorated<\n TInner extends BaseWgslData = BaseWgslData,\n TAttribs extends unknown[] = unknown[],\n> {\n readonly type: 'decorated';\n readonly inner: TInner;\n readonly attribs: TAttribs;\n /** Type-token, not available at runtime */\n readonly '~repr': Infer<TInner>;\n}\n\nexport const wgslTypeLiterals = [\n 'bool',\n 'f32',\n 'f16',\n 'i32',\n 'u32',\n 'vec2f',\n 'vec2i',\n 'vec2u',\n 'vec3f',\n 'vec3i',\n 'vec3u',\n 'vec4f',\n 'vec4i',\n 'vec4u',\n 'mat2x2f',\n 'mat3x3f',\n 'mat4x4f',\n 'struct',\n 'array',\n 'atomic',\n 'decorated',\n] as const;\n\nexport type WgslTypeLiteral = (typeof wgslTypeLiterals)[number];\n\nexport type AnyWgslData =\n | Bool\n | F32\n | F16\n | I32\n | U32\n | Vec2f\n | Vec2i\n | Vec2u\n | Vec3f\n | Vec3i\n | Vec3u\n | Vec4f\n | Vec4i\n | Vec4u\n | Mat2x2f\n | Mat3x3f\n | Mat4x4f\n | WgslStruct\n | WgslArray\n | Atomic\n | Decorated;\n\n// #endregion\n\nexport function isWgslData(value: unknown): value is AnyWgslData {\n return wgslTypeLiterals.includes((value as AnyWgslData)?.type);\n}\n\n/**\n * Checks whether passed in value is an array schema,\n * as opposed to, e.g., a looseArray schema.\n *\n * Array schemas can be used to describe uniform and storage buffers,\n * whereas looseArray schemas cannot.\n *\n * @example\n * isWgslArray(d.arrayOf(d.u32, 4)) // true\n * isWgslArray(d.looseArrayOf(d.u32, 4)) // false\n * isWgslArray(d.vec3f) // false\n */\nexport function isWgslArray<T extends WgslArray>(\n schema: T | unknown,\n): schema is T {\n return (schema as T)?.type === 'array';\n}\n\n/**\n * Checks whether passed in value is a struct schema,\n * as opposed to, e.g., a looseStruct schema.\n *\n * Struct schemas can be used to describe uniform and storage buffers,\n * whereas looseStruct schemas cannot.\n *\n * @example\n * isWgslStruct(d.struct({ a: d.u32 })) // true\n * isWgslStruct(d.looseStruct({ a: d.u32 })) // false\n * isWgslStruct(d.vec3f) // false\n */\nexport function isWgslStruct<T extends WgslStruct>(\n schema: T | unknown,\n): schema is T {\n return (schema as T)?.type === 'struct';\n}\n\n/**\n * Checks whether the passed in value is an atomic schema.\n *\n * @example\n * isAtomic(d.atomic(d.u32)) // true\n * isAtomic(d.u32) // false\n */\nexport function isAtomic<T extends Atomic<U32 | I32>>(\n schema: T | unknown,\n): schema is T {\n return (schema as T)?.type === 'atomic';\n}\n\nexport function isAlignAttrib<T extends Align<number>>(\n value: unknown | T,\n): value is T {\n return (value as T)?.type === '@align';\n}\n\nexport function isSizeAttrib<T extends Size<number>>(\n value: unknown | T,\n): value is T {\n return (value as T)?.type === '@size';\n}\n\nexport function isLocationAttrib<T extends Location<number>>(\n value: unknown | T,\n): value is T {\n return (value as T)?.type === '@location';\n}\n\nexport function isBuiltinAttrib<T extends Builtin<string>>(\n value: unknown | T,\n): value is T {\n return (value as T)?.type === '@builtin';\n}\n\nexport function isDecorated<T extends Decorated>(\n value: unknown | T,\n): value is T {\n return (value as T)?.type === 'decorated';\n}\n","import type { TgpuNamable } from '../namable';\nimport type { InferRecord } from '../shared/repr';\nimport type { Prettify } from '../shared/utilityTypes';\nimport type { ExoticRecord } from './exotic';\nimport type { AnyWgslData, BaseWgslData, WgslStruct } from './wgslTypes';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Struct schema constructed via `d.struct` function.\n *\n * Responsible for handling reading and writing struct values\n * between binary and JS representation. Takes into account\n * the `byteAlignment` requirement of its members.\n */\nexport interface TgpuStruct<TProps extends Record<string, BaseWgslData>>\n extends WgslStruct<TProps>,\n TgpuNamable {\n readonly '~exotic': WgslStruct<ExoticRecord<TProps>>;\n}\n\n/**\n * Creates a struct schema that can be used to construct GPU buffers.\n * Ensures proper alignment and padding of properties (as opposed to a `d.looseStruct` schema).\n * The order of members matches the passed in properties object.\n *\n * @example\n * const CircleStruct = d.struct({ radius: d.f32, pos: d.vec3f });\n *\n * @param props Record with `string` keys and `TgpuData` values,\n * each entry describing one struct member.\n */\nexport const struct = <TProps extends Record<string, AnyWgslData>>(\n props: TProps,\n): TgpuStruct<Prettify<ExoticRecord<TProps>>> =>\n new TgpuStructImpl(props as ExoticRecord<TProps>);\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuStructImpl<TProps extends Record<string, AnyWgslData>>\n implements TgpuStruct<TProps>\n{\n private _label: string | undefined;\n\n public readonly type = 'struct';\n /** Type-token, not available at runtime */\n public readonly '~repr'!: InferRecord<TProps>;\n /** Type-token, not available at runtime */\n public readonly '~exotic'!: WgslStruct<ExoticRecord<TProps>>;\n\n constructor(public readonly propTypes: TProps) {}\n\n get label() {\n return this._label;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n}\n","/**\n * @param value\n * @param modulo has to be power of 2\n */\nexport const roundUp = (value: number, modulo: number) => {\n const bitMask = modulo - 1;\n const invBitMask = ~bitMask;\n return (value & bitMask) === 0 ? value : (value & invBitMask) + modulo;\n};\n","export const vertexFormats = [\n 'uint8x2',\n 'uint8x4',\n 'sint8x2',\n 'sint8x4',\n 'unorm8x2',\n 'unorm8x4',\n 'snorm8x2',\n 'snorm8x4',\n 'uint16x2',\n 'uint16x4',\n 'sint16x2',\n 'sint16x4',\n 'unorm16x2',\n 'unorm16x4',\n 'snorm16x2',\n 'snorm16x4',\n 'float16x2',\n 'float16x4',\n 'float32',\n 'float32x2',\n 'float32x3',\n 'float32x4',\n 'uint32',\n 'uint32x2',\n 'uint32x3',\n 'uint32x4',\n 'sint32',\n 'sint32x2',\n 'sint32x3',\n 'sint32x4',\n 'unorm10-10-10-2',\n] as const;\n\nexport type VertexFormat = (typeof vertexFormats)[number];\n\nexport const kindToDefaultFormatMap = {\n f32: 'float32',\n vec2f: 'float32x2',\n vec3f: 'float32x3',\n vec4f: 'float32x4',\n u32: 'uint32',\n vec2u: 'uint32x2',\n vec3u: 'uint32x3',\n vec4u: 'uint32x4',\n i32: 'sint32',\n vec2i: 'sint32x2',\n vec3i: 'sint32x3',\n vec4i: 'sint32x4',\n} as const;\n\nexport type KindToDefaultFormatMap = typeof kindToDefaultFormatMap;\n\nexport interface TgpuVertexAttrib<TFormat extends VertexFormat = VertexFormat> {\n readonly format: TFormat;\n readonly offset: number;\n}\n\nexport type AnyVertexAttribs =\n | Record<string, TgpuVertexAttrib>\n | TgpuVertexAttrib;\n\n/**\n * All vertex attribute formats that can be interpreted as\n * an single or multi component u32 in a shader.\n * https://www.w3.org/TR/webgpu/#vertex-formats\n */\ntype U32CompatibleFormats =\n | TgpuVertexAttrib<'uint8x2'>\n | TgpuVertexAttrib<'uint8x4'>\n | TgpuVertexAttrib<'uint16x2'>\n | TgpuVertexAttrib<'uint16x4'>\n | TgpuVertexAttrib<'uint32'>\n | TgpuVertexAttrib<'uint32x2'>\n | TgpuVertexAttrib<'uint32x3'>\n | TgpuVertexAttrib<'uint32x4'>;\n\n/**\n * All vertex attribute formats that can be interpreted as\n * an single or multi component i32 in a shader.\n * https://www.w3.org/TR/webgpu/#vertex-formats\n */\ntype I32CompatibleFormats =\n | TgpuVertexAttrib<'sint8x2'>\n | TgpuVertexAttrib<'sint8x4'>\n | TgpuVertexAttrib<'sint16x2'>\n | TgpuVertexAttrib<'sint16x4'>\n | TgpuVertexAttrib<'sint32'>\n | TgpuVertexAttrib<'sint32x2'>\n | TgpuVertexAttrib<'sint32x3'>\n | TgpuVertexAttrib<'sint32x4'>;\n\n/**\n * All vertex attribute formats that can be interpreted as\n * an single or multi component f32 in a shader.\n * https://www.w3.org/TR/webgpu/#vertex-formats\n */\ntype F32CompatibleFormats =\n | TgpuVertexAttrib<'unorm8x2'>\n | TgpuVertexAttrib<'unorm8x4'>\n | TgpuVertexAttrib<'snorm8x2'>\n | TgpuVertexAttrib<'snorm8x4'>\n | TgpuVertexAttrib<'unorm16x2'>\n | TgpuVertexAttrib<'unorm16x4'>\n | TgpuVertexAttrib<'snorm16x2'>\n | TgpuVertexAttrib<'snorm16x4'>\n | TgpuVertexAttrib<'float16x2'>\n | TgpuVertexAttrib<'float16x4'>\n | TgpuVertexAttrib<'float32'>\n | TgpuVertexAttrib<'float32x2'>\n | TgpuVertexAttrib<'float32x3'>\n | TgpuVertexAttrib<'float32x4'>\n | TgpuVertexAttrib<'unorm10-10-10-2'>;\n\n/**\n * All vertex attribute formats that can be interpreted as\n * an single or multi component f16 in a shader. (same as f32)\n * https://www.w3.org/TR/webgpu/#vertex-formats\n */\ntype F16CompatibleFormats = F32CompatibleFormats;\n\nexport type KindToAcceptedAttribMap = {\n u32: U32CompatibleFormats;\n vec2u: U32CompatibleFormats;\n vec3u: U32CompatibleFormats;\n vec4u: U32CompatibleFormats;\n\n i32: I32CompatibleFormats;\n vec2i: I32CompatibleFormats;\n vec3i: I32CompatibleFormats;\n vec4i: I32CompatibleFormats;\n\n f16: F16CompatibleFormats;\n vec2h: F16CompatibleFormats;\n vec3h: F16CompatibleFormats;\n vec4h: F16CompatibleFormats;\n\n f32: F32CompatibleFormats;\n vec2f: F32CompatibleFormats;\n vec3f: F32CompatibleFormats;\n vec4f: F32CompatibleFormats;\n};\n","import type { Infer, InferRecord } from '../shared/repr';\nimport { vertexFormats } from '../shared/vertexFormat';\nimport type { PackedData } from './vertexFormatData';\nimport * as wgsl from './wgslTypes';\n\n/**\n * Array schema constructed via `d.looseArrayOf` function.\n *\n * Useful for defining vertex buffers.\n * Elements in the schema are not aligned in respect to their `byteAlignment`,\n * unless they are explicitly decorated with the custom align attribute\n * via `d.align` function.\n */\nexport interface LooseArray<\n TElement extends wgsl.BaseWgslData = wgsl.BaseWgslData,\n> {\n readonly type: 'loose-array';\n readonly elementCount: number;\n readonly elementType: TElement;\n readonly '~repr': Infer<TElement>[];\n}\n\n/**\n * Struct schema constructed via `d.looseStruct` function.\n *\n * Useful for defining vertex buffers, as the standard layout restrictions do not apply.\n * Members are not aligned in respect to their `byteAlignment`,\n * unless they are explicitly decorated with the custom align attribute\n * via `d.align` function.\n */\nexport interface LooseStruct<\n TProps extends Record<string, wgsl.BaseWgslData> = Record<\n string,\n wgsl.BaseWgslData\n >,\n> {\n readonly type: 'loose-struct';\n readonly propTypes: TProps;\n readonly '~repr': InferRecord<TProps>;\n}\n\nexport interface LooseDecorated<\n TInner extends wgsl.BaseWgslData = wgsl.BaseWgslData,\n TAttribs extends unknown[] = unknown[],\n> {\n readonly type: 'loose-decorated';\n readonly inner: TInner;\n readonly attribs: TAttribs;\n readonly '~repr': Infer<TInner>;\n}\n\nconst looseTypeLiterals = [\n 'loose-struct',\n 'loose-array',\n 'loose-decorated',\n ...vertexFormats,\n] as const;\n\nexport type LooseTypeLiteral = (typeof looseTypeLiterals)[number];\n\nexport type AnyLooseData =\n | LooseArray\n | LooseStruct\n | LooseDecorated\n | PackedData;\n\nexport function isLooseData(data: unknown): data is AnyLooseData {\n return looseTypeLiterals.includes((data as AnyLooseData)?.type);\n}\n\n/**\n * Checks whether the passed in value is a loose-array schema,\n * as opposed to, e.g., a regular array schema.\n *\n * Array schemas can be used to describe uniform and storage buffers,\n * whereas looseArray schemas cannot. Loose arrays are useful for\n * defining vertex buffers instead.\n *\n * @example\n * isLooseArray(d.arrayOf(d.u32, 4)) // false\n * isLooseArray(d.looseArrayOf(d.u32, 4)) // true\n * isLooseArray(d.vec3f) // false\n */\nexport function isLooseArray<T extends LooseArray>(\n schema: T | unknown,\n): schema is T {\n return (schema as LooseArray)?.type === 'loose-array';\n}\n\n/**\n * Checks whether passed in value is a looseStruct schema,\n * as opposed to, e.g., a struct schema.\n *\n * Struct schemas can be used to describe uniform and storage buffers,\n * whereas looseStruct schemas cannot. Loose structs are useful for\n * defining vertex buffers instead.\n *\n * @example\n * isLooseStruct(d.struct({ a: d.u32 })) // false\n * isLooseStruct(d.looseStruct({ a: d.u32 })) // true\n * isLooseStruct(d.vec3f) // false\n */\nexport function isLooseStruct<T extends LooseStruct>(\n schema: T | unknown,\n): schema is T {\n return (schema as T)?.type === 'loose-struct';\n}\n\nexport function isLooseDecorated<T extends LooseDecorated>(\n value: T | unknown,\n): value is T {\n return (value as T)?.type === 'loose-decorated';\n}\n\nexport function getCustomAlignment(\n data: wgsl.BaseWgslData,\n): number | undefined {\n return (data as unknown as wgsl.Decorated | LooseDecorated).attribs?.find(\n wgsl.isAlignAttrib,\n )?.value;\n}\n\nexport function getCustomSize(data: wgsl.BaseWgslData): number | undefined {\n return (data as unknown as wgsl.Decorated | LooseDecorated).attribs?.find(\n wgsl.isSizeAttrib,\n )?.value;\n}\n\nexport function getCustomLocation(data: wgsl.BaseWgslData): number | undefined {\n return (data as unknown as wgsl.Decorated | LooseDecorated).attribs?.find(\n wgsl.isLocationAttrib,\n )?.value;\n}\n\nexport function isData(value: unknown): value is AnyData {\n return wgsl.isWgslData(value) || isLooseData(value);\n}\n\nexport type AnyData = wgsl.AnyWgslData | AnyLooseData;\n","import { inGPUMode } from '../gpuMode';\nimport type {\n Vec2f,\n Vec2i,\n Vec2u,\n Vec3f,\n Vec3i,\n Vec3u,\n Vec4f,\n Vec4i,\n Vec4u,\n v2f,\n v2i,\n v2u,\n v3f,\n v3i,\n v3u,\n v4f,\n v4i,\n v4u,\n} from './wgslTypes';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<TType extends string, TValue> {\n type: TType;\n length: number;\n make: (...args: number[]) => TValue;\n makeFromScalar: (value: number) => TValue;\n}\n\ntype VecSchemaBase<TValue> = {\n readonly type: string;\n readonly '~repr': TValue;\n};\n\nfunction makeVecSchema<TType extends string, TValue>(\n options: VecSchemaOptions<TType, TValue>,\n): VecSchemaBase<TValue> & ((...args: number[]) => TValue) {\n const VecSchema: VecSchemaBase<TValue> = {\n /** Type-token, not available at runtime */\n '~repr': undefined as unknown as TValue,\n type: options.type,\n };\n\n const construct = (...args: number[]): TValue => {\n const values = args; // TODO: Allow users to pass in vectors that fill part of the values.\n\n if (inGPUMode()) {\n return `${VecSchema.type}(${values.join(', ')})` as unknown as TValue;\n }\n\n if (values.length <= 1) {\n return options.makeFromScalar(values[0] ?? 0);\n }\n\n if (values.length === options.length) {\n return options.make(...values);\n }\n\n throw new Error(\n `'${options.type}' constructor called with invalid number of arguments.`,\n );\n };\n\n return Object.assign(construct, VecSchema);\n}\n\nabstract class vec2Impl {\n public readonly length = 2;\n abstract readonly kind: `vec2${'f' | 'u' | 'i'}`;\n\n [n: number]: number;\n\n constructor(\n public x: number,\n public y: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n }\n\n get [0]() {\n return this.x;\n }\n\n get [1]() {\n return this.y;\n }\n\n set [0](value: number) {\n this.x = value;\n }\n\n set [1](value: number) {\n this.y = value;\n }\n\n resolve(): string {\n return `${this.kind}(${this.x}, ${this.y})`;\n }\n}\n\nclass vec2fImpl extends vec2Impl {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): v2f {\n return new vec2fImpl(x, y) as unknown as v2f;\n }\n\n make3(x: number, y: number, z: number): v3f {\n return new vec3fImpl(x, y, z) as unknown as v3f;\n }\n\n make4(x: number, y: number, z: number, w: number): v4f {\n return new vec4fImpl(x, y, z, w) as unknown as v4f;\n }\n}\n\nclass vec2iImpl extends vec2Impl {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): v2i {\n return new vec2iImpl(x, y) as unknown as v2i;\n }\n\n make3(x: number, y: number, z: number): v3i {\n return new vec3iImpl(x, y, z) as unknown as v3i;\n }\n\n make4(x: number, y: number, z: number, w: number): v4i {\n return new vec4iImpl(x, y, z, w) as unknown as v4i;\n }\n}\n\nclass vec2uImpl extends vec2Impl {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): v2u {\n return new vec2uImpl(x, y) as unknown as v2u;\n }\n\n make3(x: number, y: number, z: number): v3u {\n return new vec3uImpl(x, y, z) as unknown as v3u;\n }\n\n make4(x: number, y: number, z: number, w: number): v4u {\n return new vec4uImpl(x, y, z, w) as unknown as v4u;\n }\n}\n\nabstract class vec3Impl {\n public readonly length = 3;\n abstract readonly kind: `vec3${'f' | 'u' | 'i'}`;\n [n: number]: number;\n\n constructor(\n public x: number,\n public y: number,\n public z: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n\n get [0]() {\n return this.x;\n }\n\n get [1]() {\n return this.y;\n }\n\n get [2]() {\n return this.z;\n }\n\n set [0](value: number) {\n this.x = value;\n }\n\n set [1](value: number) {\n this.y = value;\n }\n\n set [2](value: number) {\n this.z = value;\n }\n\n resolve(): string {\n return `${this.kind}(${this.x}, ${this.y}, ${this.z})`;\n }\n}\n\nclass vec3fImpl extends vec3Impl {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): v2f {\n return new vec2fImpl(x, y) as unknown as v2f;\n }\n\n make3(x: number, y: number, z: number): v3f {\n return new vec3fImpl(x, y, z) as unknown as v3f;\n }\n\n make4(x: number, y: number, z: number, w: number): v4f {\n return new vec4fImpl(x, y, z, w) as unknown as v4f;\n }\n}\n\nclass vec3iImpl extends vec3Impl {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): v2i {\n return new vec2iImpl(x, y) as unknown as v2i;\n }\n\n make3(x: number, y: number, z: number): v3i {\n return new vec3iImpl(x, y, z) as unknown as v3i;\n }\n\n make4(x: number, y: number, z: number, w: number): v4i {\n return new vec4iImpl(x, y, z, w) as unknown as v4i;\n }\n}\n\nclass vec3uImpl extends vec3Impl {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): v2u {\n return new vec2uImpl(x, y) as unknown as v2u;\n }\n\n make3(x: number, y: number, z: number): v3u {\n return new vec3uImpl(x, y, z) as unknown as v3u;\n }\n\n make4(x: number, y: number, z: number, w: number): v4u {\n return new vec4uImpl(x, y, z, w) as unknown as v4u;\n }\n}\n\nabstract class vec4Impl {\n public readonly length = 4;\n abstract readonly kind: `vec4${'f' | 'u' | 'i'}`;\n [n: number]: number;\n\n constructor(\n public x: number,\n public y: number,\n public z: number,\n public w: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n yield this.w;\n }\n\n get [0]() {\n return this.x;\n }\n\n get [1]() {\n return this.y;\n }\n\n get [2]() {\n return this.z;\n }\n\n get [3]() {\n return this.w;\n }\n\n set [0](value: number) {\n this.x = value;\n }\n\n set [1](value: number) {\n this.y = value;\n }\n\n set [2](value: number) {\n this.z = value;\n }\n\n set [3](value: number) {\n this.w = value;\n }\n\n resolve(): string {\n return `${this.kind}(${this.x}, ${this.y}, ${this.z}, ${this.w})`;\n }\n}\n\nclass vec4fImpl extends vec4Impl {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): v2f {\n return new vec2fImpl(x, y) as unknown as v2f;\n }\n\n make3(x: number, y: number, z: number): v3f {\n return new vec3fImpl(x, y, z) as unknown as v3f;\n }\n\n make4(x: number, y: number, z: number, w: number): v4f {\n return new vec4fImpl(x, y, z, w) as unknown as v4f;\n }\n}\n\nclass vec4iImpl extends vec4Impl {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): v2i {\n return new vec2iImpl(x, y) as unknown as v2i;\n }\n\n make3(x: number, y: number, z: number): v3i {\n return new vec3iImpl(x, y, z) as unknown as v3i;\n }\n\n make4(x: number, y: number, z: number, w: number): v4i {\n return new vec4iImpl(x, y, z, w) as unknown as v4i;\n }\n}\n\nclass vec4uImpl extends vec4Impl {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): v2u {\n return new vec2uImpl(x, y) as unknown as v2u;\n }\n\n make3(x: number, y: number, z: number): v3u {\n return new vec3uImpl(x, y, z) as unknown as v3u;\n }\n\n make4(x: number, y: number, z: number, w: number): v4u {\n return new vec4uImpl(x, y, z, w) as unknown as v4u;\n }\n}\n\nconst vecProxyHandler: ProxyHandler<{ kind: VecKind }> = {\n get: (target, prop) => {\n if (typeof prop === 'symbol' || !Number.isNaN(Number.parseInt(prop))) {\n return Reflect.get(target, prop);\n }\n\n const targetAsVec4 = target as unknown as vec4uImpl;\n const values = new Array(prop.length) as number[];\n\n let idx = 0;\n for (const char of prop as string) {\n switch (char) {\n case 'x':\n values[idx] = targetAsVec4.x;\n break;\n case 'y':\n values[idx] = targetAsVec4.y;\n break;\n case 'z':\n values[idx] = targetAsVec4.z;\n break;\n case 'w':\n values[idx] = targetAsVec4.w;\n break;\n default:\n return Reflect.get(targetAsVec4, prop);\n }\n idx++;\n }\n\n if (prop.length === 4) {\n return new Proxy(\n targetAsVec4.make4(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n values[3] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 3) {\n return new Proxy(\n targetAsVec4.make3(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 2) {\n return new Proxy(\n targetAsVec4.make2(values[0] as number, values[1] as number),\n vecProxyHandler,\n );\n }\n\n return Reflect.get(target, prop);\n },\n};\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Type encompassing all available kinds of vector.\n */\nexport type VecKind =\n | 'vec2f'\n | 'vec2i'\n | 'vec2u'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u';\n\n/**\n * Type of the `d.vec2f` object/function: vector data type schema/constructor\n */\nexport type NativeVec2f = Vec2f & { '~exotic': Vec2f } & ((\n x: number,\n y: number,\n ) => v2f) &\n ((xy: number) => v2f) &\n (() => v2f);\n\n/**\n *\n * Schema representing vec2f - a vector with 2 elements of type f32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec2f(); // (0.0, 0.0)\n * const vector = d.vec2f(1); // (1.0, 1.0)\n * const vector = d.vec2f(0.5, 0.1); // (0.5, 0.1)\n *\n * @example\n * const buffer = root.createBuffer(d.vec2f, d.vec2f(0, 1)); // buffer holding a d.vec2f value, with an initial value of vec2f(0, 1);\n */\nexport const vec2f = makeVecSchema({\n type: 'vec2f',\n length: 2,\n make: (x: number, y: number) =>\n new Proxy(new vec2fImpl(x, y), vecProxyHandler) as v2f,\n makeFromScalar: (x) => new Proxy(new vec2fImpl(x, x), vecProxyHandler) as v2f,\n}) as NativeVec2f;\n\n/**\n * Type of the `d.vec2i` object/function: vector data type schema/constructor\n */\nexport type NativeVec2i = Vec2i & { '~exotic': Vec2i } & ((\n x: number,\n y: number,\n ) => v2i) &\n ((xy: number) => v2i) &\n (() => v2i);\n\n/**\n *\n * Schema representing vec2i - a vector with 2 elements of type i32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec2i(); // (0, 0)\n * const vector = d.vec2i(1); // (1, 1)\n * const vector = d.vec2i(-1, 1); // (-1, 1)\n *\n * @example\n * const buffer = root.createBuffer(d.vec2i, d.vec2i(0, 1)); // buffer holding a d.vec2i value, with an initial value of vec2i(0, 1);\n */\nexport const vec2i = makeVecSchema({\n type: 'vec2i',\n length: 2,\n make: (x: number, y: number) =>\n new Proxy(new vec2iImpl(x, y), vecProxyHandler) as v2i,\n makeFromScalar: (x) => new Proxy(new vec2iImpl(x, x), vecProxyHandler) as v2i,\n}) as NativeVec2i;\n\n/**\n * Type of the `d.vec2u` object/function: vector data type schema/constructor\n */\nexport type NativeVec2u = Vec2u & { '~exotic': Vec2u } & ((\n x: number,\n y: number,\n ) => v2u) &\n ((xy: number) => v2u) &\n (() => v2u);\n\n/**\n *\n * Schema representing vec2u - a vector with 2 elements of type u32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec2u(); // (0, 0)\n * const vector = d.vec2u(1); // (1, 1)\n * const vector = d.vec2u(1, 2); // (1, 2)\n *\n * @example\n * const buffer = root.createBuffer(d.vec2u, d.vec2u(0, 1)); // buffer holding a d.vec2u value, with an initial value of vec2u(0, 1);\n */\nexport const vec2u = makeVecSchema({\n type: 'vec2u',\n length: 2,\n make: (x: number, y: number) =>\n new Proxy(new vec2uImpl(x, y), vecProxyHandler) as v2u,\n makeFromScalar: (x) => new Proxy(new vec2uImpl(x, x), vecProxyHandler) as v2u,\n}) as NativeVec2u;\n\n/**\n * Type of the `d.vec3f` object/function: vector data type schema/constructor\n */\nexport type NativeVec3f = Vec3f & { '~exotic': Vec3f } & ((\n x: number,\n y: number,\n z: number,\n ) => v3f) &\n ((xyz: number) => v3f) &\n (() => v3f);\n\n/**\n *\n * Schema representing vec3f - a vector with 3 elements of type f32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec3f(); // (0.0, 0.0, 0.0)\n * const vector = d.vec3f(1); // (1.0, 1.0, 1.0)\n * const vector = d.vec3f(1, 2, 3.5); // (1.0, 2.0, 3.5)\n *\n * @example\n * const buffer = root.createBuffer(d.vec3f, d.vec3f(0, 1, 2)); // buffer holding a d.vec3f value, with an initial value of vec3f(0, 1, 2);\n */\nexport const vec3f = makeVecSchema({\n type: 'vec3f',\n length: 3,\n make: (x, y, z) => new Proxy(new vec3fImpl(x, y, z), vecProxyHandler) as v3f,\n makeFromScalar: (x) =>\n new Proxy(new vec3fImpl(x, x, x), vecProxyHandler) as v3f,\n}) as NativeVec3f;\n\n/**\n * Type of the `d.vec3i` object/function: vector data type schema/constructor\n */\nexport type NativeVec3i = Vec3i & { '~exotic': Vec3i } & ((\n x: number,\n y: number,\n z: number,\n ) => v3i) &\n ((xyz: number) => v3i) &\n (() => v3i);\n\n/**\n *\n * Schema representing vec3i - a vector with 3 elements of type i32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec3i(); // (0, 0, 0)\n * const vector = d.vec3i(1); // (1, 1, 1)\n * const vector = d.vec3i(1, 2, -3); // (1, 2, -3)\n *\n * @example\n * const buffer = root.createBuffer(d.vec3i, d.vec3i(0, 1, 2)); // buffer holding a d.vec3i value, with an initial value of vec3i(0, 1, 2);\n */\nexport const vec3i = makeVecSchema({\n type: 'vec3i',\n length: 3,\n make: (x, y, z) => new Proxy(new vec3iImpl(x, y, z), vecProxyHandler) as v3i,\n makeFromScalar: (x) =>\n new Proxy(new vec3iImpl(x, x, x), vecProxyHandler) as v3i,\n}) as NativeVec3i;\n\n/**\n * Type of the `d.vec3u` object/function: vector data type schema/constructor\n */\nexport type NativeVec3u = Vec3u & { '~exotic': Vec3u } & ((\n x: number,\n y: number,\n z: number,\n ) => v3u) &\n ((xyz: number) => v3u) &\n (() => v3u);\n\n/**\n *\n * Schema representing vec3u - a vector with 3 elements of type u32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec3u(); // (0, 0, 0)\n * const vector = d.vec3u(1); // (1, 1, 1)\n * const vector = d.vec3u(1, 2, 3); // (1, 2, 3)\n *\n * @example\n * const buffer = root.createBuffer(d.vec3u, d.vec3u(0, 1, 2)); // buffer holding a d.vec3u value, with an initial value of vec3u(0, 1, 2);\n */\nexport const vec3u = makeVecSchema({\n type: 'vec3u',\n length: 3,\n make: (x, y, z) => new Proxy(new vec3uImpl(x, y, z), vecProxyHandler) as v3u,\n makeFromScalar: (x) =>\n new Proxy(new vec3uImpl(x, x, x), vecProxyHandler) as v3u,\n}) as NativeVec3u;\n\n/**\n * Type of the `d.vec4f` object/function: vector data type schema/constructor\n */\nexport type NativeVec4f = Vec4f & { '~exotic': Vec4f } & ((\n x: number,\n y: number,\n z: number,\n w: number,\n ) => v4f) &\n ((xyzw: number) => v4f) &\n (() => v4f);\n\n/**\n *\n * Schema representing vec4f - a vector with 4 elements of type f32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec4f(); // (0.0, 0.0, 0.0, 0.0)\n * const vector = d.vec4f(1); // (1.0, 1.0, 1.0, 1.0)\n * const vector = d.vec4f(1, 2, 3, 4.5); // (1.0, 2.0, 3.0, 4.5)\n *\n * @example\n * const buffer = root.createBuffer(d.vec4f, d.vec4f(0, 1, 2, 3)); // buffer holding a d.vec4f value, with an initial value of vec4f(0, 1, 2, 3);\n */\nexport const vec4f = makeVecSchema({\n type: 'vec4f',\n length: 4,\n make: (x, y, z, w) =>\n new Proxy(new vec4fImpl(x, y, z, w), vecProxyHandler) as v4f,\n makeFromScalar: (x) =>\n new Proxy(new vec4fImpl(x, x, x, x), vecProxyHandler) as v4f,\n}) as NativeVec4f;\n\n/**\n * Type of the `d.vec4i` object/function: vector data type schema/constructor\n */\nexport type NativeVec4i = Vec4i & { '~exotic': Vec4i } & ((\n x: number,\n y: number,\n z: number,\n w: number,\n ) => v4i) &\n ((xyzw: number) => v4i) &\n (() => v4i);\n\n/**\n *\n * Schema representing vec4i - a vector with 4 elements of type i32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec4i(); // (0, 0, 0, 0)\n * const vector = d.vec4i(1); // (1, 1, 1, 1)\n * const vector = d.vec4i(1, 2, 3, -4); // (1, 2, 3, -4)\n *\n * @example\n * const buffer = root.createBuffer(d.vec4i, d.vec4i(0, 1, 2, 3)); // buffer holding a d.vec4i value, with an initial value of vec4i(0, 1, 2, 3);\n */\nexport const vec4i = makeVecSchema({\n type: 'vec4i',\n length: 4,\n make: (x, y, z, w) =>\n new Proxy(new vec4iImpl(x, y, z, w), vecProxyHandler) as v4i,\n makeFromScalar: (x) =>\n new Proxy(new vec4iImpl(x, x, x, x), vecProxyHandler) as v4i,\n}) as NativeVec4i;\n\n/**\n * Type of the `d.vec4u` object/function: vector data type schema/constructor\n */\nexport type NativeVec4u = Vec4u & { '~exotic': Vec4u } & ((\n x: number,\n y: number,\n z: number,\n w: number,\n ) => v4u) &\n ((xyzw: number) => v4u) &\n (() => v4u);\n\n/**\n *\n * Schema representing vec4u - a vector with 4 elements of type u32.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec4u(); // (0, 0, 0, 0)\n * const vector = d.vec4u(1); // (1, 1, 1, 1)\n * const vector = d.vec4u(1, 2, 3, 4); // (1, 2, 3, 4)\n *\n * @example\n * const buffer = root.createBuffer(d.vec4u, d.vec4u(0, 1, 2, 3)); // buffer holding a d.vec4u value, with an initial value of vec4u(0, 1, 2, 3);\n */\nexport const vec4u = makeVecSchema({\n length: 4,\n type: 'vec4u',\n make: (x, y, z, w) =>\n new Proxy(new vec4uImpl(x, y, z, w), vecProxyHandler) as v4u,\n makeFromScalar: (x) =>\n new Proxy(new vec4uImpl(x, x, x, x), vecProxyHandler) as v4u,\n}) as NativeVec4u;\n","import type { Infer } from '../shared/repr';\nimport type { VertexFormat } from '../shared/vertexFormat';\nimport { f32, i32, u32 } from './numeric';\nimport {\n vec2f,\n vec2i,\n vec2u,\n vec3f,\n vec3i,\n vec3u,\n vec4f,\n vec4i,\n vec4u,\n} from './vector';\n\nexport type FormatToWGSLType<T extends VertexFormat> =\n (typeof formatToWGSLType)[T];\n\nexport interface TgpuVertexFormatData<T extends VertexFormat> {\n readonly '~repr': Infer<FormatToWGSLType<T>>;\n readonly type: T;\n}\n\nclass TgpuVertexFormatDataImpl<T extends VertexFormat>\n implements TgpuVertexFormatData<T>\n{\n /** Used as a type-token for the `Infer<T>` functionality. */\n public readonly '~repr'!: Infer<FormatToWGSLType<T>>;\n\n constructor(public readonly type: T) {}\n}\n\nconst formatToWGSLType = {\n uint8x2: vec2u,\n uint8x4: vec4u,\n sint8x2: vec2i,\n sint8x4: vec4i,\n unorm8x2: vec2f,\n unorm8x4: vec4f,\n snorm8x2: vec2f,\n snorm8x4: vec4f,\n uint16x2: vec2u,\n uint16x4: vec4u,\n sint16x2: vec2i,\n sint16x4: vec4i,\n unorm16x2: vec2f,\n unorm16x4: vec4f,\n snorm16x2: vec2f,\n snorm16x4: vec4f,\n float16x2: vec2f,\n float16x4: vec4f,\n float32: f32,\n float32x2: vec2f,\n float32x3: vec3f,\n float32x4: vec4f,\n uint32: u32,\n uint32x2: vec2u,\n uint32x3: vec3u,\n uint32x4: vec4u,\n sint32: i32,\n sint32x2: vec2i,\n sint32x3: vec3i,\n sint32x4: vec4i,\n 'unorm10-10-10-2': vec4f,\n} as const;\n\nexport const packedFormats = Object.keys(formatToWGSLType);\n\nexport type uint8x2 = TgpuVertexFormatData<'uint8x2'>;\nexport const uint8x2 = new TgpuVertexFormatDataImpl('uint8x2') as uint8x2;\n\nexport type uint8x4 = TgpuVertexFormatData<'uint8x4'>;\nexport const uint8x4 = new TgpuVertexFormatDataImpl('uint8x4') as uint8x4;\n\nexport type sint8x2 = TgpuVertexFormatData<'sint8x2'>;\nexport const sint8x2 = new TgpuVertexFormatDataImpl('sint8x2') as sint8x2;\n\nexport type sint8x4 = TgpuVertexFormatData<'sint8x4'>;\nexport const sint8x4 = new TgpuVertexFormatDataImpl('sint8x4') as sint8x4;\n\nexport type unorm8x2 = TgpuVertexFormatData<'unorm8x2'>;\nexport const unorm8x2 = new TgpuVertexFormatDataImpl('unorm8x2') as unorm8x2;\n\nexport type unorm8x4 = TgpuVertexFormatData<'unorm8x4'>;\nexport const unorm8x4 = new TgpuVertexFormatDataImpl('unorm8x4') as unorm8x4;\n\nexport type snorm8x2 = TgpuVertexFormatData<'snorm8x2'>;\nexport const snorm8x2 = new TgpuVertexFormatDataImpl('snorm8x2') as snorm8x2;\n\nexport type snorm8x4 = TgpuVertexFormatData<'snorm8x4'>;\nexport const snorm8x4 = new TgpuVertexFormatDataImpl('snorm8x4') as snorm8x4;\n\nexport type uint16x2 = TgpuVertexFormatData<'uint16x2'>;\nexport const uint16x2 = new TgpuVertexFormatDataImpl('uint16x2') as uint16x2;\n\nexport type uint16x4 = TgpuVertexFormatData<'uint16x4'>;\nexport const uint16x4 = new TgpuVertexFormatDataImpl('uint16x4') as uint16x4;\n\nexport type sint16x2 = TgpuVertexFormatData<'sint16x2'>;\nexport const sint16x2 = new TgpuVertexFormatDataImpl('sint16x2') as sint16x2;\n\nexport type sint16x4 = TgpuVertexFormatData<'sint16x4'>;\nexport const sint16x4 = new TgpuVertexFormatDataImpl('sint16x4') as sint16x4;\n\nexport type unorm16x2 = TgpuVertexFormatData<'unorm16x2'>;\nexport const unorm16x2 = new TgpuVertexFormatDataImpl('unorm16x2') as unorm16x2;\n\nexport type unorm16x4 = TgpuVertexFormatData<'unorm16x4'>;\nexport const unorm16x4 = new TgpuVertexFormatDataImpl('unorm16x4') as unorm16x4;\n\nexport type snorm16x2 = TgpuVertexFormatData<'snorm16x2'>;\nexport const snorm16x2 = new TgpuVertexFormatDataImpl('snorm16x2') as snorm16x2;\n\nexport type snorm16x4 = TgpuVertexFormatData<'snorm16x4'>;\nexport const snorm16x4 = new TgpuVertexFormatDataImpl('snorm16x4') as snorm16x4;\n\nexport type float16x2 = TgpuVertexFormatData<'float16x2'>;\nexport const float16x2 = new TgpuVertexFormatDataImpl('float16x2') as float16x2;\n\nexport type float16x4 = TgpuVertexFormatData<'float16x4'>;\nexport const float16x4 = new TgpuVertexFormatDataImpl('float16x4') as float16x4;\n\nexport type float32 = TgpuVertexFormatData<'float32'>;\nexport const float32 = new TgpuVertexFormatDataImpl('float32') as float32;\n\nexport type float32x2 = TgpuVertexFormatData<'float32x2'>;\nexport const float32x2 = new TgpuVertexFormatDataImpl('float32x2') as float32x2;\n\nexport type float32x3 = TgpuVertexFormatData<'float32x3'>;\nexport const float32x3 = new TgpuVertexFormatDataImpl('float32x3') as float32x3;\n\nexport type float32x4 = TgpuVertexFormatData<'float32x4'>;\nexport const float32x4 = new TgpuVertexFormatDataImpl('float32x4') as float32x4;\n\nexport type uint32 = TgpuVertexFormatData<'uint32'>;\nexport const uint32 = new TgpuVertexFormatDataImpl('uint32') as uint32;\n\nexport type uint32x2 = TgpuVertexFormatData<'uint32x2'>;\nexport const uint32x2 = new TgpuVertexFormatDataImpl('uint32x2') as uint32x2;\n\nexport type uint32x3 = TgpuVertexFormatData<'uint32x3'>;\nexport const uint32x3 = new TgpuVertexFormatDataImpl('uint32x3') as uint32x3;\n\nexport type uint32x4 = TgpuVertexFormatData<'uint32x4'>;\nexport const uint32x4 = new TgpuVertexFormatDataImpl('uint32x4') as uint32x4;\n\nexport type sint32 = TgpuVertexFormatData<'sint32'>;\nexport const sint32 = new TgpuVertexFormatDataImpl('sint32') as sint32;\n\nexport type sint32x2 = TgpuVertexFormatData<'sint32x2'>;\nexport const sint32x2 = new TgpuVertexFormatDataImpl('sint32x2') as sint32x2;\n\nexport type sint32x3 = TgpuVertexFormatData<'sint32x3'>;\nexport const sint32x3 = new TgpuVertexFormatDataImpl('sint32x3') as sint32x3;\n\nexport type sint32x4 = TgpuVertexFormatData<'sint32x4'>;\nexport const sint32x4 = new TgpuVertexFormatDataImpl('sint32x4') as sint32x4;\n\nexport type unorm10_10_10_2 = TgpuVertexFormatData<'unorm10-10-10-2'>;\nexport const unorm10_10_10_2 = new TgpuVertexFormatDataImpl(\n 'unorm10-10-10-2',\n) as unorm10_10_10_2;\n\nexport type PackedData =\n | uint8x2\n | uint8x4\n | sint8x2\n | sint8x4\n | unorm8x2\n | unorm8x4\n | snorm8x2\n | snorm8x4\n | uint16x2\n | uint16x4\n | sint16x2\n | sint16x4\n | unorm16x2\n | unorm16x4\n | snorm16x2\n | snorm16x4\n | float16x2\n | float16x4\n | float32\n | float32x2\n | float32x3\n | float32x4\n | uint32\n | uint32x2\n | uint32x3\n | uint32x4\n | sint32\n | sint32x2\n | sint32x3\n | sint32x4\n | unorm10_10_10_2;\n","import {\n type AnyData,\n getCustomAlignment,\n isLooseArray,\n isLooseDecorated,\n isLooseStruct,\n} from './dataTypes';\nimport { packedFormats } from './vertexFormatData';\nimport {\n type BaseWgslData,\n isDecorated,\n isWgslArray,\n isWgslStruct,\n} from './wgslTypes';\n\nconst knownAlignmentMap: Record<string, number> = {\n bool: 4,\n f32: 4,\n f16: 2,\n i32: 4,\n u32: 4,\n vec2f: 8,\n vec2i: 8,\n vec2u: 8,\n vec3f: 16,\n vec3i: 16,\n vec3u: 16,\n vec4f: 16,\n vec4i: 16,\n vec4u: 16,\n mat2x2f: 8,\n mat3x3f: 16,\n mat4x4f: 16,\n};\n\nfunction computeAlignment(data: object): number {\n const dataType = (data as BaseWgslData)?.type;\n const knownAlignment = knownAlignmentMap[dataType];\n if (knownAlignment !== undefined) {\n return knownAlignment;\n }\n\n if (isWgslStruct(data)) {\n return Object.values(data.propTypes)\n .map(alignmentOf)\n .reduce((a, b) => (a > b ? a : b));\n }\n\n if (isWgslArray(data)) {\n return alignmentOf(data.elementType);\n }\n\n if (isLooseStruct(data)) {\n // A loose struct is aligned to its first property.\n const firstProp = Object.values(data.propTypes)[0];\n return firstProp ? getCustomAlignment(firstProp) ?? 1 : 1;\n }\n\n if (isLooseArray(data)) {\n return getCustomAlignment(data.elementType) ?? 1;\n }\n\n if (isDecorated(data) || isLooseDecorated(data)) {\n return getCustomAlignment(data) ?? alignmentOf(data.inner);\n }\n\n if (packedFormats.includes(dataType)) {\n return 1;\n }\n\n throw new Error(\n `Cannot determine alignment of data: ${JSON.stringify(data)}`,\n );\n}\n\nfunction computeCustomAlignment(data: BaseWgslData): number {\n if (isLooseStruct(data)) {\n // A loose struct is aligned to its first property.\n const firstProp = Object.values(data.propTypes)[0];\n return firstProp ? customAlignmentOf(firstProp) : 1;\n }\n\n if (isLooseArray(data)) {\n return customAlignmentOf(data.elementType);\n }\n\n if (isLooseDecorated(data)) {\n return getCustomAlignment(data) ?? customAlignmentOf(data.inner);\n }\n\n return getCustomAlignment(data) ?? 1;\n}\n\n/**\n * Since alignments can be inferred from exotic/native data types, they are\n * not stored on them. Instead, this weak map acts as an extended property\n * of those data types.\n */\nconst cachedAlignments = new WeakMap<object, number>();\n\nconst cachedCustomAlignments = new WeakMap<object, number>();\n\nexport function alignmentOf(data: BaseWgslData): number {\n let alignment = cachedAlignments.get(data);\n if (alignment === undefined) {\n alignment = computeAlignment(data);\n cachedAlignments.set(data, alignment);\n }\n\n return alignment;\n}\n\nexport function customAlignmentOf(data: BaseWgslData): number {\n let alignment = cachedCustomAlignments.get(data);\n if (alignment === undefined) {\n alignment = computeCustomAlignment(data);\n cachedCustomAlignments.set(data, alignment);\n }\n\n return alignment;\n}\n\n/**\n * Returns the alignment (in bytes) of data represented by the `schema`.\n */\nexport function PUBLIC_alignmentOf(schema: AnyData): number {\n return alignmentOf(schema);\n}\n","import { roundUp } from '../mathUtils';\nimport { alignmentOf, customAlignmentOf } from './alignmentOf';\nimport type { AnyData, LooseStruct, LooseTypeLiteral } from './dataTypes';\nimport {\n getCustomSize,\n isLooseArray,\n isLooseDecorated,\n isLooseStruct,\n} from './dataTypes';\nimport type { BaseWgslData, WgslStruct, WgslTypeLiteral } from './wgslTypes';\nimport { isDecorated, isWgslArray, isWgslStruct } from './wgslTypes';\n\nconst knownSizesMap: Record<string, number> = {\n bool: 4,\n f32: 4,\n f16: 2,\n i32: 4,\n u32: 4,\n vec2f: 8,\n vec2i: 8,\n vec2u: 8,\n vec3f: 12,\n vec3i: 12,\n vec3u: 12,\n vec4f: 16,\n vec4i: 16,\n vec4u: 16,\n mat2x2f: 16,\n mat3x3f: 48,\n mat4x4f: 64,\n uint8x2: 2,\n uint8x4: 4,\n sint8x2: 2,\n sint8x4: 4,\n unorm8x2: 2,\n unorm8x4: 4,\n snorm8x2: 2,\n snorm8x4: 4,\n uint16x2: 4,\n uint16x4: 8,\n sint16x2: 4,\n sint16x4: 8,\n unorm16x2: 4,\n unorm16x4: 8,\n snorm16x2: 4,\n snorm16x4: 8,\n float16x2: 4,\n float16x4: 8,\n float32: 4,\n float32x2: 8,\n float32x3: 12,\n float32x4: 16,\n uint32: 4,\n uint32x2: 8,\n uint32x3: 12,\n uint32x4: 16,\n sint32: 4,\n sint32x2: 8,\n sint32x3: 12,\n sint32x4: 16,\n 'unorm10-10-10-2': 4,\n} satisfies Partial<Record<WgslTypeLiteral | LooseTypeLiteral, number>>;\n\nfunction sizeOfStruct(struct: WgslStruct) {\n let size = 0;\n for (const property of Object.values(struct.propTypes)) {\n if (Number.isNaN(size)) {\n throw new Error('Only the last property of a struct can be unbounded');\n }\n\n size = roundUp(size, alignmentOf(property));\n size += sizeOf(property);\n\n if (Number.isNaN(size) && property.type !== 'array') {\n throw new Error('Cannot nest unbounded struct within another struct');\n }\n }\n\n return roundUp(size, alignmentOf(struct));\n}\n\nfunction sizeOfLooseStruct(data: LooseStruct) {\n let size = 0;\n\n for (const property of Object.values(data.propTypes)) {\n const alignment = customAlignmentOf(property);\n size = roundUp(size, alignment);\n size += sizeOf(property);\n }\n\n return size;\n}\n\nfunction computeSize(data: object): number {\n const knownSize = knownSizesMap[(data as BaseWgslData)?.type];\n\n if (knownSize !== undefined) {\n return knownSize;\n }\n\n if (isWgslStruct(data)) {\n return sizeOfStruct(data);\n }\n\n if (isLooseStruct(data)) {\n return sizeOfLooseStruct(data);\n }\n\n if (isWgslArray(data)) {\n if (data.elementCount === 0) {\n return Number.NaN;\n }\n\n const alignment = alignmentOf(data.elementType);\n const stride = roundUp(sizeOf(data.elementType), alignment);\n return stride * data.elementCount;\n }\n\n if (isLooseArray(data)) {\n const alignment = customAlignmentOf(data.elementType);\n const stride = roundUp(sizeOf(data.elementType), alignment);\n return stride * data.elementCount;\n }\n\n if (isDecorated(data) || isLooseDecorated(data)) {\n return getCustomSize(data) ?? sizeOf(data.inner);\n }\n\n throw new Error(`Cannot determine size of data: ${data}`);\n}\n\n/**\n * Since sizes can be inferred from exotic/native data types, they are\n * not stored on them. Instead, this weak map acts as an extended property\n * of those data types.\n */\nconst cachedSizes = new WeakMap<BaseWgslData, number>();\n\nexport function sizeOf(schema: BaseWgslData): number {\n let size = cachedSizes.get(schema);\n\n if (size === undefined) {\n size = computeSize(schema);\n cachedSizes.set(schema, size);\n }\n\n return size;\n}\n\n/**\n * Returns the size (in bytes) of data represented by the `schema`.\n */\nexport function PUBLIC_sizeOf(schema: AnyData): number {\n return sizeOf(schema);\n}\n","import type { Infer } from '../shared/repr';\nimport type { Exotic } from './exotic';\nimport { sizeOf } from './sizeOf';\nimport type { AnyWgslData, WgslArray } from './wgslTypes';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Array schema constructed via `d.arrayOf` function.\n *\n * Responsible for handling reading and writing array values\n * between binary and JS representation. Takes into account\n * the `byteAlignment` requirement of its elementType.\n */\nexport interface TgpuArray<TElement extends AnyWgslData>\n extends WgslArray<TElement> {\n readonly '~exotic': WgslArray<Exotic<TElement>>;\n}\n\n/**\n * Creates an array schema that can be used to construct gpu buffers.\n * Describes arrays with fixed-size length, storing elements of the same type.\n *\n * @example\n * const LENGTH = 3;\n * const array = d.arrayOf(d.u32, LENGTH);\n *\n * @param elementType The type of elements in the array.\n * @param elementCount The number of elements in the array.\n */\nexport const arrayOf = <TElement extends AnyWgslData>(\n elementType: TElement,\n elementCount: number,\n): TgpuArray<Exotic<TElement>> =>\n new TgpuArrayImpl(elementType as Exotic<TElement>, elementCount);\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuArrayImpl<TElement extends AnyWgslData>\n implements TgpuArray<TElement>\n{\n public readonly type = 'array';\n /** Type-token, not available at runtime */\n public readonly '~repr'!: Infer<TElement>[];\n /** Type-token, not available at runtime */\n public readonly '~exotic'!: WgslArray<Exotic<TElement>>;\n\n constructor(\n public readonly elementType: TElement,\n public readonly elementCount: number,\n ) {\n if (Number.isNaN(sizeOf(elementType))) {\n throw new Error('Cannot nest runtime sized arrays.');\n }\n }\n}\n","import type { Infer } from '../shared/repr';\nimport type { AnyData, LooseArray } from './dataTypes';\nimport type { Exotic } from './exotic';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Creates an array schema that can be used to construct vertex buffers.\n * Describes arrays with fixed-size length, storing elements of the same type.\n *\n * Elements in the schema are not aligned in respect to their `byteAlignment`,\n * unless they are explicitly decorated with the custom align attribute\n * via `d.align` function.\n *\n * @example\n * const looseArray = d.looseArrayOf(d.vec3f, 3); // packed array of vec3f\n *\n * @example\n * const looseArray = d.looseArrayOf(d.align(16, d.vec3f), 3);\n *\n * @param elementType The type of elements in the array.\n * @param count The number of elements in the array.\n */\nexport const looseArrayOf = <TElement extends AnyData>(\n elementType: TElement,\n count: number,\n): LooseArray<Exotic<TElement>> =>\n new LooseArrayImpl(elementType as Exotic<TElement>, count);\n\n// --------------\n// Implementation\n// --------------\n\nclass LooseArrayImpl<TElement extends AnyData> implements LooseArray<TElement> {\n public readonly type = 'loose-array';\n /** Type-token, not available at runtime */\n public readonly '~repr'!: Infer<TElement>[];\n\n constructor(\n public readonly elementType: TElement,\n public readonly elementCount: number,\n ) {}\n}\n","import type { InferRecord } from '../shared/repr';\nimport type { LooseStruct } from './dataTypes';\nimport type { ExoticRecord } from './exotic';\nimport type { BaseWgslData } from './wgslTypes';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Creates a loose struct schema that can be used to construct vertex buffers.\n * Describes structs with members of both loose and non-loose types.\n *\n * The order of members matches the passed in properties object.\n * Members are not aligned in respect to their `byteAlignment`,\n * unless they are explicitly decorated with the custom align attribute\n * via `d.align` function.\n *\n * @example\n * const CircleStruct = d.looseStruct({ radius: d.f32, pos: d.vec3f }); // packed struct with no padding\n *\n * @example\n * const CircleStruct = d.looseStruct({ radius: d.f32, pos: d.align(16, d.vec3f) });\n *\n * @param properties Record with `string` keys and `TgpuData` or `TgpuLooseData` values,\n * each entry describing one struct member.\n */\nexport const looseStruct = <TProps extends Record<string, BaseWgslData>>(\n properties: TProps,\n): LooseStruct<ExoticRecord<TProps>> =>\n new LooseStructImpl(properties as ExoticRecord<TProps>);\n\n// --------------\n// Implementation\n// --------------\n\nclass LooseStructImpl<TProps extends Record<string, BaseWgslData>>\n implements LooseStruct<TProps>\n{\n public readonly type = 'loose-struct';\n /** Type-token, not available at runtime */\n public readonly '~repr'!: InferRecord<TProps>;\n\n constructor(public readonly propTypes: TProps) {}\n}\n","import { type VecKind, vec2f, vec3f, vec4f } from './vector';\nimport type {\n Mat2x2f,\n Mat3x3f,\n Mat4x4f,\n m2x2f,\n m3x3f,\n m4x4f,\n mat2x2,\n mat3x3,\n mat4x4,\n matBase,\n v2f,\n v3f,\n v4f,\n} from './wgslTypes';\n\n// --------------\n// Implementation\n// --------------\n\ntype vBase = {\n kind: VecKind;\n length: number;\n [n: number]: number;\n};\n\ninterface MatSchemaOptions<TType extends string, ValueType> {\n type: TType;\n rows: number;\n columns: number;\n makeFromElements(...elements: number[]): ValueType;\n}\n\ntype MatConstructor<\n ValueType extends matBase<ColumnType>,\n ColumnType extends vBase,\n> = (...args: (number | ColumnType)[]) => ValueType;\n\nfunction createMatSchema<\n TType extends string,\n ValueType extends matBase<ColumnType>,\n ColumnType extends vBase,\n>(\n options: MatSchemaOptions<TType, ValueType>,\n): { type: TType; '~repr': ValueType } & MatConstructor<ValueType, ColumnType> {\n const MatSchema = {\n /** Type-token, not available at runtime */\n '~repr': undefined as unknown as ValueType,\n type: options.type,\n label: options.type,\n };\n\n const construct = (...args: (number | ColumnType)[]): ValueType => {\n const elements: number[] = [];\n\n for (const arg of args) {\n if (typeof arg === 'number') {\n elements.push(arg);\n } else {\n for (let i = 0; i < arg.length; ++i) {\n elements.push(arg[i] as number);\n }\n }\n }\n\n // Fill the rest with zeros\n for (let i = elements.length; i < options.columns * options.rows; ++i) {\n elements.push(0);\n }\n\n return options.makeFromElements(...elements);\n };\n\n return Object.assign(construct, MatSchema) as unknown as {\n type: TType;\n '~repr': ValueType;\n } & MatConstructor<ValueType, ColumnType>;\n}\n\nabstract class mat2x2Impl<TColumn extends v2f> implements mat2x2<TColumn> {\n public readonly columns: readonly [TColumn, TColumn];\n public readonly length = 4;\n [n: number]: number;\n\n constructor(...elements: number[]) {\n this.columns = [\n this.makeColumn(elements[0] as number, elements[1] as number),\n this.makeColumn(elements[2] as number, elements[3] as number),\n ];\n }\n\n abstract makeColumn(e0: number, e1: number): TColumn;\n\n get [0]() {\n return this.columns[0].x;\n }\n\n get [1]() {\n return this.columns[0].y;\n }\n\n get [2]() {\n return this.columns[1].x;\n }\n\n get [3]() {\n return this.columns[1].y;\n }\n\n set [0](value: number) {\n this.columns[0].x = value;\n }\n\n set [1](value: number) {\n this.columns[0].y = value;\n }\n\n set [2](value: number) {\n this.columns[1].x = value;\n }\n\n set [3](value: number) {\n this.columns[1].y = value;\n }\n}\n\nclass mat2x2fImpl extends mat2x2Impl<v2f> implements m2x2f {\n public readonly kind = 'mat2x2f';\n\n makeColumn(e0: number, e1: number): v2f {\n return vec2f(e0, e1);\n }\n}\n\nabstract class mat3x3Impl<TColumn extends v3f> implements mat3x3<TColumn> {\n public readonly columns: readonly [TColumn, TColumn, TColumn];\n public readonly length = 12;\n [n: number]: number;\n\n constructor(...elements: number[]) {\n this.columns = [\n this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n ),\n this.makeColumn(\n elements[3] as number,\n elements[4] as number,\n elements[5] as number,\n ),\n this.makeColumn(\n elements[6] as number,\n elements[7] as number,\n elements[8] as number,\n ),\n ];\n }\n\n abstract makeColumn(x: number, y: number, z: number): TColumn;\n\n get [0]() {\n return this.columns[0].x;\n }\n\n get [1]() {\n return this.columns[0].y;\n }\n\n get [2]() {\n return this.columns[0].z;\n }\n\n get [3]() {\n return 0;\n }\n\n get [4]() {\n return this.columns[1].x;\n }\n\n get [5]() {\n return this.columns[1].y;\n }\n\n get [6]() {\n return this.columns[1].z;\n }\n\n get [7]() {\n return 0;\n }\n\n get [8]() {\n return this.columns[2].x;\n }\n\n get [9]() {\n return this.columns[2].y;\n }\n\n get [10]() {\n return this.columns[2].z;\n }\n\n get [11]() {\n return 0;\n }\n\n set [0](value: number) {\n this.columns[0].x = value;\n }\n\n set [1](value: number) {\n this.columns[0].y = value;\n }\n\n set [2](value: number) {\n this.columns[0].z = value;\n }\n\n set [3](_: number) {}\n\n set [4](value: number) {\n this.columns[1].x = value;\n }\n\n set [5](value: number) {\n this.columns[1].y = value;\n }\n\n set [6](value: number) {\n this.columns[1].z = value;\n }\n\n set [7](_: number) {}\n\n set [8](value: number) {\n this.columns[2].x = value;\n }\n\n set [9](value: number) {\n this.columns[2].y = value;\n }\n\n set [10](value: number) {\n this.columns[2].z = value;\n }\n\n set [11](_: number) {}\n}\n\nclass mat3x3fImpl extends mat3x3Impl<v3f> implements m3x3f {\n public readonly kind = 'mat3x3f';\n makeColumn(x: number, y: number, z: number): v3f {\n return vec3f(x, y, z);\n }\n}\n\nabstract class mat4x4Impl<TColumn extends v4f> implements mat4x4<TColumn> {\n public readonly columns: readonly [TColumn, TColumn, TColumn, TColumn];\n\n constructor(...elements: number[]) {\n this.columns = [\n this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n elements[3] as number,\n ),\n this.makeColumn(\n elements[4] as number,\n elements[5] as number,\n elements[6] as number,\n elements[7] as number,\n ),\n this.makeColumn(\n elements[8] as number,\n elements[9] as number,\n elements[10] as number,\n elements[11] as number,\n ),\n this.makeColumn(\n elements[12] as number,\n elements[13] as number,\n elements[14] as number,\n elements[15] as number,\n ),\n ];\n }\n\n abstract makeColumn(x: number, y: number, z: number, w: number): TColumn;\n\n public readonly length = 16;\n [n: number]: number;\n\n get [0]() {\n return this.columns[0].x;\n }\n\n get [1]() {\n return this.columns[0].y;\n }\n\n get [2]() {\n return this.columns[0].z;\n }\n\n get [3]() {\n return this.columns[0].w;\n }\n\n get [4]() {\n return this.columns[1].x;\n }\n\n get [5]() {\n return this.columns[1].y;\n }\n\n get [6]() {\n return this.columns[1].z;\n }\n\n get [7]() {\n return this.columns[1].w;\n }\n\n get [8]() {\n return this.columns[2].x;\n }\n\n get [9]() {\n return this.columns[2].y;\n }\n\n get [10]() {\n return this.columns[2].z;\n }\n\n get [11]() {\n return this.columns[2].w;\n }\n\n get [12]() {\n return this.columns[3].x;\n }\n\n get [13]() {\n return this.columns[3].y;\n }\n\n get [14]() {\n return this.columns[3].z;\n }\n\n get [15]() {\n return this.columns[3].w;\n }\n\n set [0](value: number) {\n this.columns[0].x = value;\n }\n\n set [1](value: number) {\n this.columns[0].y = value;\n }\n\n set [2](value: number) {\n this.columns[0].z = value;\n }\n\n set [3](value: number) {\n this.columns[0].w = value;\n }\n\n set [4](value: number) {\n this.columns[1].x = value;\n }\n\n set [5](value: number) {\n this.columns[1].y = value;\n }\n\n set [6](value: number) {\n this.columns[1].z = value;\n }\n\n set [7](value: number) {\n this.columns[1].w = value;\n }\n\n set [8](value: number) {\n this.columns[2].x = value;\n }\n\n set [9](value: number) {\n this.columns[2].y = value;\n }\n\n set [10](value: number) {\n this.columns[2].z = value;\n }\n\n set [11](value: number) {\n this.columns[2].w = value;\n }\n\n set [12](value: number) {\n this.columns[3].x = value;\n }\n\n set [13](value: number) {\n this.columns[3].y = value;\n }\n\n set [14](value: number) {\n this.columns[3].z = value;\n }\n\n set [15](value: number) {\n this.columns[3].w = value;\n }\n}\n\nclass mat4x4fImpl extends mat4x4Impl<v4f> implements m4x4f {\n public readonly kind = 'mat4x4f';\n\n makeColumn(x: number, y: number, z: number, w: number): v4f {\n return vec4f(x, y, z, w);\n }\n}\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Type of the `d.mat2x2f` object/function: matrix data type schema/constructor\n */\nexport type NativeMat2x2f = Mat2x2f & { '~exotic': Mat2x2f } & ((\n ...elements: number[]\n ) => m2x2f) &\n ((...columns: v2f[]) => m2x2f) &\n (() => m2x2f);\n\n/**\n *\n * Schema representing mat2x2f - a matrix with 2 rows and 2 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero2x2 = mat2x2f(); // filled with zeros\n *\n * @example\n * const mat = mat2x2f(0, 1, 2, 3);\n * mat[0] // vec2f(0, 1)\n * mat[1] // vec2f(2, 3)\n *\n * @example\n * const mat = mat2x2f(\n * vec2f(0, 1), // column 0\n * vec2f(1, 2), // column 1\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat2x2f, d.mat2x2f(0, 1, 2, 3)); // buffer holding a d.mat2x2f value, with an initial value of ((0, 1), (2, 3))\n */\nexport const mat2x2f = createMatSchema<'mat2x2f', m2x2f, v2f>({\n type: 'mat2x2f',\n rows: 2,\n columns: 2,\n makeFromElements: (...elements: number[]) => new mat2x2fImpl(...elements),\n}) as NativeMat2x2f;\n\n/**\n * Type of the `d.mat3x3f` object/function: matrix data type schema/constructor\n */\nexport type NativeMat3x3f = Mat3x3f & { '~exotic': Mat3x3f } & ((\n ...elements: number[]\n ) => m3x3f) &\n ((...columns: v3f[]) => m3x3f) &\n (() => m3x3f);\n\n/**\n *\n * Schema representing mat3x3f - a matrix with 3 rows and 3 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero3x3 = mat3x3f(); // filled with zeros\n *\n * @example\n * const mat = mat3x3f(0, 1, 2, 3, 4, 5, 6, 7, 8);\n * mat[0] // vec3f(0, 1, 2)\n * mat[1] // vec3f(3, 4, 5)\n * mat[2] // vec3f(6, 7, 8)\n *\n * @example\n * const mat = mat3x3f(\n * vec3f(0, 1, 2), // column 0\n * vec3f(2, 3, 4), // column 1\n * vec3f(5, 6, 7), // column 2\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat3x3f, d.mat3x3f()); // buffer holding a d.mat3x3f value, with an initial value of mat3x3f filled with zeros\n */\nexport const mat3x3f = createMatSchema<'mat3x3f', m3x3f, v3f>({\n type: 'mat3x3f',\n rows: 3,\n columns: 3,\n makeFromElements: (...elements: number[]) => new mat3x3fImpl(...elements),\n}) as NativeMat3x3f;\n\n/**\n * Type of the `d.mat4x4f` object/function: matrix data type schema/constructor\n */\nexport type NativeMat4x4f = Mat4x4f & { '~exotic': Mat4x4f } & ((\n ...elements: number[]\n ) => m4x4f) &\n ((...columns: v4f[]) => m4x4f) &\n (() => m4x4f);\n\n/**\n *\n * Schema representing mat4x4f - a matrix with 4 rows and 4 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero4x4 = mat4x4f(); // filled with zeros\n *\n * @example\n * const mat = mat3x3f(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n * mat[0] // vec4f(0, 1, 2, 3)\n * mat[1] // vec4f(4, 5, 6, 7)\n * mat[2] // vec4f(8, 9, 10, 11)\n * mat[3] // vec4f(12, 13, 14, 15)\n *\n * @example\n * const mat = mat3x3f(\n * vec4f(0, 1, 2, 3), // column 0\n * vec4f(4, 5, 6, 7), // column 1\n * vec4f(8, 9, 10, 11), // column 2\n * vec4f(12, 13, 14, 15), // column 3\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat4x4f, d.mat4x4f()); // buffer holding a d.mat4x4f value, with an initial value of mat4x4f filled with zeros\n */\nexport const mat4x4f = createMatSchema<'mat4x4f', m4x4f, v4f>({\n type: 'mat4x4f',\n rows: 4,\n columns: 4,\n makeFromElements: (...elements: number[]) => new mat4x4fImpl(...elements),\n}) as NativeMat4x4f;\n\nexport function matToArray(mat: m2x2f | m3x3f | m4x4f): number[] {\n if (mat.kind === 'mat3x3f') {\n return [\n mat[0],\n mat[1],\n mat[2],\n mat[4],\n mat[5],\n mat[6],\n mat[8],\n mat[9],\n mat[10],\n ] as number[];\n }\n\n return Array.from({ length: mat.length }).map((_, idx) => mat[idx] as number);\n}\n","import type { Infer } from '../shared/repr';\nimport type { Exotic } from './exotic';\nimport type { Atomic, I32, U32 } from './wgslTypes';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Marks a concrete integer scalar type schema (u32 or i32) as a WGSL atomic.\n *\n * @example\n * const atomicU32 = d.atomic(d.u32);\n * const atomicI32 = d.atomic(d.i32);\n *\n * @param data Underlying type schema.\n */\nexport function atomic<TSchema extends U32 | I32>(\n data: TSchema,\n): Atomic<Exotic<TSchema>> {\n return new AtomicImpl(data as Exotic<TSchema>);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass AtomicImpl<TSchema extends U32 | I32> implements Atomic<TSchema> {\n public readonly type = 'atomic';\n /** Type-token, not available at runtime */\n public readonly '~repr'!: Infer<TSchema>;\n\n constructor(public readonly inner: TSchema) {}\n}\n","import type { Infer } from '../shared/repr';\nimport { alignmentOf } from './alignmentOf';\nimport {\n type AnyData,\n type AnyLooseData,\n type LooseDecorated,\n type LooseTypeLiteral,\n isLooseData,\n isLooseDecorated,\n} from './dataTypes';\nimport type { Exotic } from './exotic';\nimport { sizeOf } from './sizeOf';\nimport {\n type Align,\n type AnyWgslData,\n type BaseWgslData,\n type Builtin,\n type Decorated,\n type Location,\n type Size,\n type WgslTypeLiteral,\n isAlignAttrib,\n isBuiltinAttrib,\n isDecorated,\n isSizeAttrib,\n isWgslData,\n} from './wgslTypes';\n\n// ----------\n// Public API\n// ----------\n\nexport const builtinNames = [\n 'vertex_index',\n 'instance_index',\n 'position',\n 'clip_distances',\n 'front_facing',\n 'frag_depth',\n 'sample_index',\n 'sample_mask',\n 'fragment',\n 'local_invocation_id',\n 'local_invocation_index',\n 'global_invocation_id',\n 'workgroup_id',\n 'num_workgroups',\n] as const;\n\nexport type BuiltinName = (typeof builtinNames)[number];\n\nexport type AnyAttribute =\n | Align<number>\n | Size<number>\n | Location<number>\n | Builtin<BuiltinName>;\n\nexport type ExtractAttributes<T> = T extends {\n readonly attribs: unknown[];\n}\n ? T['attribs']\n : [];\n\ntype Undecorate<T> = T extends { readonly inner: infer TInner } ? TInner : T;\n\n/**\n * Decorates a data-type `TData` with an attribute `TAttrib`.\n *\n * - if `TData` is loose\n * - if `TData` is already `LooseDecorated`\n * - Prepend `TAttrib` to the existing attribute tuple.\n * - else\n * - Wrap `TData` with `LooseDecorated` and a single attribute `[TAttrib]`\n * - else\n * - if `TData` is already `Decorated`\n * - Prepend `TAttrib` to the existing attribute tuple.\n * - else\n * - Wrap `TData` with `Decorated` and a single attribute `[TAttrib]`\n */\nexport type Decorate<\n TData extends BaseWgslData,\n TAttrib extends AnyAttribute,\n> = TData['type'] extends WgslTypeLiteral\n ? Decorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]>\n : TData['type'] extends LooseTypeLiteral\n ? LooseDecorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]>\n : never;\n\nexport type IsBuiltin<T> = ExtractAttributes<T>[number] extends []\n ? false\n : ExtractAttributes<T>[number] extends Builtin<BuiltinName>\n ? true\n : false;\n\nexport function attribute<\n TData extends BaseWgslData,\n TAttrib extends AnyAttribute,\n>(data: TData, attrib: TAttrib): Decorated | LooseDecorated {\n if (isDecorated(data)) {\n return new DecoratedImpl(data.inner, [\n attrib,\n ...data.attribs,\n ]) as Decorated;\n }\n\n if (isLooseDecorated(data)) {\n return new LooseDecoratedImpl(data.inner, [\n attrib,\n ...data.attribs,\n ]) as LooseDecorated;\n }\n\n if (isLooseData(data)) {\n return new LooseDecoratedImpl(data, [attrib]) as unknown as LooseDecorated;\n }\n\n return new DecoratedImpl(data, [attrib]) as unknown as Decorated;\n}\n\n/**\n * Gives the wrapped data-type a custom byte alignment. Useful in order to\n * fulfill uniform alignment requirements.\n *\n * @example\n * const Data = d.struct({\n * a: u32, // takes up 4 bytes\n * // 12 bytes of padding, because `b` is custom aligned to multiples of 16 bytes\n * b: d.align(16, u32),\n * });\n *\n * @param alignment The multiple of bytes this data should align itself to.\n * @param data The data-type to align.\n */\nexport function align<TAlign extends number, TData extends AnyData>(\n alignment: TAlign,\n data: TData,\n): Decorate<Exotic<TData>, Align<TAlign>> {\n // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>\n return attribute(data, { type: '@align', value: alignment }) as any;\n}\n\n/**\n * Adds padding bytes after the wrapped data-type, until the whole value takes up `size` bytes.\n *\n * @example\n * const Data = d.struct({\n * a: d.size(16, u32), // takes up 16 bytes, instead of 4\n * b: u32, // starts at byte 16, because `a` has a custom size\n * });\n *\n * @param size The amount of bytes that should be reserved for this data-type.\n * @param data The data-type to wrap.\n */\nexport function size<TSize extends number, TData extends AnyData>(\n size: TSize,\n data: TData,\n): Decorate<Exotic<TData>, Size<TSize>> {\n // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>\n return attribute(data, { type: '@size', value: size }) as any;\n}\n\n/**\n * Assigns an explicit numeric location to a struct member or a parameter that has this type.\n *\n * @example\n * const Data = d.ioStruct({\n * a: d.u32, // has implicit location 0\n * b: d.location(5, d.u32),\n * c: d.u32, // has implicit location 6\n * });\n *\n * @param location The explicit numeric location.\n * @param data The data-type to wrap.\n */\nexport function location<TLocation extends number, TData extends AnyData>(\n location: TLocation,\n data: TData,\n): Decorate<Exotic<TData>, Location<TLocation>> {\n // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>\n return attribute(data, { type: '@location', value: location }) as any;\n}\n\nexport function isBuiltin<\n T extends\n | Decorated<AnyWgslData, AnyAttribute[]>\n | LooseDecorated<AnyLooseData, AnyAttribute[]>,\n>(value: T | unknown): value is T {\n return (\n (isDecorated(value) || isLooseDecorated(value)) &&\n value.attribs.find(isBuiltinAttrib) !== undefined\n );\n}\n\nexport function getAttributesString<T extends BaseWgslData>(field: T): string {\n if (!isDecorated(field) && !isLooseDecorated(field)) {\n return '';\n }\n\n return (field.attribs as AnyAttribute[])\n .map((attrib) => `${attrib.type}(${attrib.value}) `)\n .join('');\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass BaseDecoratedImpl<\n TInner extends BaseWgslData,\n TAttribs extends unknown[],\n> {\n // Type-token, not available at runtime\n public readonly '~repr'!: Infer<TInner>;\n\n constructor(\n public readonly inner: TInner,\n public readonly attribs: TAttribs,\n ) {\n const alignAttrib = attribs.find(isAlignAttrib)?.value;\n const sizeAttrib = attribs.find(isSizeAttrib)?.value;\n\n if (alignAttrib !== undefined) {\n if (alignAttrib <= 0) {\n throw new Error(\n `Custom data alignment must be a positive number, got: ${alignAttrib}.`,\n );\n }\n\n if (Math.log2(alignAttrib) % 1 !== 0) {\n throw new Error(\n `Alignment has to be a power of 2, got: ${alignAttrib}.`,\n );\n }\n\n if (isWgslData(this.inner)) {\n if (alignAttrib % alignmentOf(this.inner) !== 0) {\n throw new Error(\n `Custom alignment has to be a multiple of the standard data alignment. Got: ${alignAttrib}, expected multiple of: ${alignmentOf(this.inner)}.`,\n );\n }\n }\n }\n\n if (sizeAttrib !== undefined) {\n if (sizeAttrib < sizeOf(this.inner)) {\n throw new Error(\n `Custom data size cannot be smaller then the standard data size. Got: ${sizeAttrib}, expected at least: ${sizeOf(this.inner)}.`,\n );\n }\n\n if (sizeAttrib <= 0) {\n throw new Error(\n `Custom data size must be a positive number. Got: ${sizeAttrib}.`,\n );\n }\n }\n }\n}\n\nclass DecoratedImpl<TInner extends BaseWgslData, TAttribs extends unknown[]>\n extends BaseDecoratedImpl<TInner, TAttribs>\n implements Decorated<TInner, TAttribs>\n{\n public readonly type = 'decorated';\n}\n\nclass LooseDecoratedImpl<\n TInner extends BaseWgslData,\n TAttribs extends unknown[],\n >\n extends BaseDecoratedImpl<TInner, TAttribs>\n implements LooseDecorated<TInner, TAttribs>\n{\n public readonly type = 'loose-decorated';\n}\n"]}
@@ -0,0 +1,2 @@
1
+ var Ve=Object.defineProperty,De=Object.defineProperties;var Fe=Object.getOwnPropertyDescriptors;var we=Object.getOwnPropertySymbols;var Se=Object.prototype.hasOwnProperty,Ce=Object.prototype.propertyIsEnumerable;var Q=(e,r,n)=>r in e?Ve(e,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[r]=n,lr=(e,r)=>{for(var n in r||(r={}))Se.call(r,n)&&Q(e,n,r[n]);if(we)for(var n of we(r))Ce.call(r,n)&&Q(e,n,r[n]);return e},mr=(e,r)=>De(e,Fe(r));var a=(e,r,n)=>(Q(e,typeof r!="symbol"?r+"":r,n),n);import G from"typed-binary";var X=0;function pr(e){X++;try{return e()}finally{X--}}var f=()=>X>0;var Le={type:"bool"},We=e=>f()?`u32(${e})`:typeof e=="boolean"?e?1:0:Number.isInteger(e)?((e<0||e>4294967295)&&console.warn(`u32 value ${e} overflowed`),(e&4294967295)>>>0):Math.max(0,Math.min(4294967295,Math.floor(e))),Y=Object.assign(We,{type:"u32"}),Be=e=>{if(f())return`i32(${e})`;if(typeof e=="boolean")return e?1:0;if(Number.isInteger(e))return(e<-2147483648||e>2147483647)&&console.warn(`i32 value ${e} overflowed`),(e|0)&4294967295;let r=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,r))},Z=Object.assign(Be,{type:"i32"}),Ne=e=>{if(f())return`f32(${e})`;if(typeof e=="boolean")return e?1:0;let r=new Float32Array(1);return r[0]=e,r[0]},ee=Object.assign(Ne,{type:"f32"}),Ee=e=>{if(f())return`f16(${e})`;if(typeof e=="boolean")return e?1:0;let r=new ArrayBuffer(2);return G.f16.write(new G.BufferWriter(r),e),G.f16.read(new G.BufferReader(r))},Pe=Object.assign(Ee,{type:"f16"});var Ie=["bool","f32","f16","i32","u32","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","mat2x2f","mat3x3f","mat4x4f","struct","array","atomic","decorated"];function W(e){return Ie.includes(e==null?void 0:e.type)}function B(e){return(e==null?void 0:e.type)==="array"}function N(e){return(e==null?void 0:e.type)==="struct"}function Me(e){return(e==null?void 0:e.type)==="atomic"}function E(e){return(e==null?void 0:e.type)==="@align"}function P(e){return(e==null?void 0:e.type)==="@size"}function re(e){return(e==null?void 0:e.type)==="@location"}function ne(e){return(e==null?void 0:e.type)==="@builtin"}function d(e){return(e==null?void 0:e.type)==="decorated"}var $e=e=>new te(e),te=class{constructor(r){this.propTypes=r;a(this,"_label");a(this,"type","struct");a(this,"~repr");a(this,"~exotic")}get label(){return this._label}$name(r){return this._label=r,this}};var b=(e,r)=>{let n=r-1,t=~n;return e&n?(e&t)+r:e};var ze=["uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10-10-10-2"];var Re=["loose-struct","loose-array","loose-decorated",...ze];function K(e){return Re.includes(e==null?void 0:e.type)}function w(e){return(e==null?void 0:e.type)==="loose-array"}function z(e){return(e==null?void 0:e.type)==="loose-struct"}function c(e){return(e==null?void 0:e.type)==="loose-decorated"}function g(e){var r,n;return(n=(r=e.attribs)==null?void 0:r.find(E))==null?void 0:n.value}function ge(e){var r,n;return(n=(r=e.attribs)==null?void 0:r.find(P))==null?void 0:n.value}function hr(e){var r,n;return(n=(r=e.attribs)==null?void 0:r.find(re))==null?void 0:n.value}function Ue(e){return W(e)||K(e)}function T(e){let r={"~repr":void 0,type:e.type};return Object.assign((...t)=>{var s;let o=t;if(f())return`${r.type}(${o.join(", ")})`;if(o.length<=1)return e.makeFromScalar((s=o[0])!=null?s:0);if(o.length===e.length)return e.make(...o);throw new Error(`'${e.type}' constructor called with invalid number of arguments.`)},r)}var I=class{constructor(r,n){this.x=r;this.y=n;a(this,"length",2)}*[Symbol.iterator](){yield this.x,yield this.y}get 0(){return this.x}get 1(){return this.y}set 0(r){this.x=r}set 1(r){this.y=r}resolve(){return`${this.kind}(${this.x}, ${this.y})`}},v=class e extends I{constructor(){super(...arguments);a(this,"kind","vec2f")}make2(n,t){return new e(n,t)}make3(n,t,o){return new k(n,t,o)}make4(n,t,o,s){return new F(n,t,o,s)}},A=class e extends I{constructor(){super(...arguments);a(this,"kind","vec2i")}make2(n,t){return new e(n,t)}make3(n,t,o){return new V(n,t,o)}make4(n,t,o,s){return new S(n,t,o,s)}},h=class e extends I{constructor(){super(...arguments);a(this,"kind","vec2u")}make2(n,t){return new e(n,t)}make3(n,t,o){return new D(n,t,o)}make4(n,t,o,s){return new C(n,t,o,s)}},M=class{constructor(r,n,t){this.x=r;this.y=n;this.z=t;a(this,"length",3)}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}get 0(){return this.x}get 1(){return this.y}get 2(){return this.z}set 0(r){this.x=r}set 1(r){this.y=r}set 2(r){this.z=r}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z})`}},k=class e extends M{constructor(){super(...arguments);a(this,"kind","vec3f")}make2(n,t){return new v(n,t)}make3(n,t,o){return new e(n,t,o)}make4(n,t,o,s){return new F(n,t,o,s)}},V=class e extends M{constructor(){super(...arguments);a(this,"kind","vec3i")}make2(n,t){return new A(n,t)}make3(n,t,o){return new e(n,t,o)}make4(n,t,o,s){return new S(n,t,o,s)}},D=class e extends M{constructor(){super(...arguments);a(this,"kind","vec3u")}make2(n,t){return new h(n,t)}make3(n,t,o){return new e(n,t,o)}make4(n,t,o,s){return new C(n,t,o,s)}},O=class{constructor(r,n,t,o){this.x=r;this.y=n;this.z=t;this.w=o;a(this,"length",4)}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}get 0(){return this.x}get 1(){return this.y}get 2(){return this.z}get 3(){return this.w}set 0(r){this.x=r}set 1(r){this.y=r}set 2(r){this.z=r}set 3(r){this.w=r}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z}, ${this.w})`}},F=class e extends O{constructor(){super(...arguments);a(this,"kind","vec4f")}make2(n,t){return new v(n,t)}make3(n,t,o){return new k(n,t,o)}make4(n,t,o,s){return new e(n,t,o,s)}},S=class e extends O{constructor(){super(...arguments);a(this,"kind","vec4i")}make2(n,t){return new A(n,t)}make3(n,t,o){return new V(n,t,o)}make4(n,t,o,s){return new e(n,t,o,s)}},C=class e extends O{constructor(){super(...arguments);a(this,"kind","vec4u")}make2(n,t){return new h(n,t)}make3(n,t,o){return new D(n,t,o)}make4(n,t,o,s){return new e(n,t,o,s)}},i={get:(e,r)=>{if(typeof r=="symbol"||!Number.isNaN(Number.parseInt(r)))return Reflect.get(e,r);let n=e,t=new Array(r.length),o=0;for(let s of r){switch(s){case"x":t[o]=n.x;break;case"y":t[o]=n.y;break;case"z":t[o]=n.z;break;case"w":t[o]=n.w;break;default:return Reflect.get(n,r)}o++}return r.length===4?new Proxy(n.make4(t[0],t[1],t[2],t[3]),i):r.length===3?new Proxy(n.make3(t[0],t[1],t[2]),i):r.length===2?new Proxy(n.make2(t[0],t[1]),i):Reflect.get(e,r)}},p=T({type:"vec2f",length:2,make:(e,r)=>new Proxy(new v(e,r),i),makeFromScalar:e=>new Proxy(new v(e,e),i)}),$=T({type:"vec2i",length:2,make:(e,r)=>new Proxy(new A(e,r),i),makeFromScalar:e=>new Proxy(new A(e,e),i)}),R=T({type:"vec2u",length:2,make:(e,r)=>new Proxy(new h(e,r),i),makeFromScalar:e=>new Proxy(new h(e,e),i)}),U=T({type:"vec3f",length:3,make:(e,r,n)=>new Proxy(new k(e,r,n),i),makeFromScalar:e=>new Proxy(new k(e,e,e),i)}),oe=T({type:"vec3i",length:3,make:(e,r,n)=>new Proxy(new V(e,r,n),i),makeFromScalar:e=>new Proxy(new V(e,e,e),i)}),ae=T({type:"vec3u",length:3,make:(e,r,n)=>new Proxy(new D(e,r,n),i),makeFromScalar:e=>new Proxy(new D(e,e,e),i)}),x=T({type:"vec4f",length:4,make:(e,r,n,t)=>new Proxy(new F(e,r,n,t),i),makeFromScalar:e=>new Proxy(new F(e,e,e,e),i)}),_=T({type:"vec4i",length:4,make:(e,r,n,t)=>new Proxy(new S(e,r,n,t),i),makeFromScalar:e=>new Proxy(new S(e,e,e,e),i)}),j=T({length:4,type:"vec4u",make:(e,r,n,t)=>new Proxy(new C(e,r,n,t),i),makeFromScalar:e=>new Proxy(new C(e,e,e,e),i)});var u=class{constructor(r){this.type=r;a(this,"~repr")}},_e={uint8x2:R,uint8x4:j,sint8x2:$,sint8x4:_,unorm8x2:p,unorm8x4:x,snorm8x2:p,snorm8x4:x,uint16x2:R,uint16x4:j,sint16x2:$,sint16x4:_,unorm16x2:p,unorm16x4:x,snorm16x2:p,snorm16x4:x,float16x2:p,float16x4:x,float32:ee,float32x2:p,float32x3:U,float32x4:x,uint32:Y,uint32x2:R,uint32x3:ae,uint32x4:j,sint32:Z,sint32x2:$,sint32x3:oe,sint32x4:_,"unorm10-10-10-2":x},ve=Object.keys(_e),Lr=new u("uint8x2"),Wr=new u("uint8x4"),Br=new u("sint8x2"),Nr=new u("sint8x4"),Er=new u("unorm8x2"),Pr=new u("unorm8x4"),Ir=new u("snorm8x2"),Mr=new u("snorm8x4"),Or=new u("uint16x2"),$r=new u("uint16x4"),Rr=new u("sint16x2"),Ur=new u("sint16x4"),_r=new u("unorm16x2"),jr=new u("unorm16x4"),Gr=new u("snorm16x2"),Kr=new u("snorm16x4"),Hr=new u("float16x2"),Jr=new u("float16x4"),qr=new u("float32"),Qr=new u("float32x2"),Xr=new u("float32x3"),Yr=new u("float32x4"),Zr=new u("uint32"),en=new u("uint32x2"),rn=new u("uint32x3"),nn=new u("uint32x4"),tn=new u("sint32"),on=new u("sint32x2"),an=new u("sint32x3"),sn=new u("sint32x4"),un=new u("unorm10-10-10-2");var je={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2i:8,vec2u:8,vec3f:16,vec3i:16,vec3u:16,vec4f:16,vec4i:16,vec4u:16,mat2x2f:8,mat3x3f:16,mat4x4f:16};function Ge(e){var t,o,s;let r=e==null?void 0:e.type,n=je[r];if(n!==void 0)return n;if(N(e))return Object.values(e.propTypes).map(l).reduce((y,be)=>y>be?y:be);if(B(e))return l(e.elementType);if(z(e)){let y=Object.values(e.propTypes)[0];return y&&(t=g(y))!=null?t:1}if(w(e))return(o=g(e.elementType))!=null?o:1;if(d(e)||c(e))return(s=g(e))!=null?s:l(e.inner);if(ve.includes(r))return 1;throw new Error(`Cannot determine alignment of data: ${JSON.stringify(e)}`)}function Ke(e){var r,n;if(z(e)){let t=Object.values(e.propTypes)[0];return t?L(t):1}return w(e)?L(e.elementType):c(e)?(r=g(e))!=null?r:L(e.inner):(n=g(e))!=null?n:1}var Ae=new WeakMap,he=new WeakMap;function l(e){let r=Ae.get(e);return r===void 0&&(r=Ge(e),Ae.set(e,r)),r}function L(e){let r=he.get(e);return r===void 0&&(r=Ke(e),he.set(e,r)),r}function He(e){return l(e)}var Je={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2i:8,vec2u:8,vec3f:12,vec3i:12,vec3u:12,vec4f:16,vec4i:16,vec4u:16,mat2x2f:16,mat3x3f:48,mat4x4f:64,uint8x2:2,uint8x4:4,sint8x2:2,sint8x4:4,unorm8x2:2,unorm8x4:4,snorm8x2:2,snorm8x4:4,uint16x2:4,uint16x4:8,sint16x2:4,sint16x4:8,unorm16x2:4,unorm16x4:8,snorm16x2:4,snorm16x4:8,float16x2:4,float16x4:8,float32:4,float32x2:8,float32x3:12,float32x4:16,uint32:4,uint32x2:8,uint32x3:12,uint32x4:16,sint32:4,sint32x2:8,sint32x3:12,sint32x4:16,"unorm10-10-10-2":4};function qe(e){let r=0;for(let n of Object.values(e.propTypes)){if(Number.isNaN(r))throw new Error("Only the last property of a struct can be unbounded");if(r=b(r,l(n)),r+=m(n),Number.isNaN(r)&&n.type!=="array")throw new Error("Cannot nest unbounded struct within another struct")}return b(r,l(e))}function Qe(e){let r=0;for(let n of Object.values(e.propTypes)){let t=L(n);r=b(r,t),r+=m(n)}return r}function Xe(e){var n;let r=Je[e==null?void 0:e.type];if(r!==void 0)return r;if(N(e))return qe(e);if(z(e))return Qe(e);if(B(e)){if(e.elementCount===0)return Number.NaN;let t=l(e.elementType);return b(m(e.elementType),t)*e.elementCount}if(w(e)){let t=L(e.elementType);return b(m(e.elementType),t)*e.elementCount}if(d(e)||c(e))return(n=ge(e))!=null?n:m(e.inner);throw new Error(`Cannot determine size of data: ${e}`)}var ke=new WeakMap;function m(e){let r=ke.get(e);return r===void 0&&(r=Xe(e),ke.set(e,r)),r}function Ye(e){return m(e)}var Ze=(e,r)=>new se(e,r),se=class{constructor(r,n){this.elementType=r;this.elementCount=n;a(this,"type","array");a(this,"~repr");a(this,"~exotic");if(Number.isNaN(m(r)))throw new Error("Cannot nest runtime sized arrays.")}};var er=(e,r)=>new ue(e,r),ue=class{constructor(r,n){this.elementType=r;this.elementCount=n;a(this,"type","loose-array");a(this,"~repr")}};var rr=e=>new ie(e),ie=class{constructor(r){this.propTypes=r;a(this,"type","loose-struct");a(this,"~repr")}};function de(e){let r={"~repr":void 0,type:e.type,label:e.type};return Object.assign((...t)=>{let o=[];for(let s of t)if(typeof s=="number")o.push(s);else for(let y=0;y<s.length;++y)o.push(s[y]);for(let s=o.length;s<e.columns*e.rows;++s)o.push(0);return e.makeFromElements(...o)},r)}var ye=class{constructor(...r){a(this,"columns");a(this,"length",4);this.columns=[this.makeColumn(r[0],r[1]),this.makeColumn(r[2],r[3])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[1].x}get 3(){return this.columns[1].y}set 0(r){this.columns[0].x=r}set 1(r){this.columns[0].y=r}set 2(r){this.columns[1].x=r}set 3(r){this.columns[1].y=r}},xe=class extends ye{constructor(){super(...arguments);a(this,"kind","mat2x2f")}makeColumn(n,t){return p(n,t)}},le=class{constructor(...r){a(this,"columns");a(this,"length",12);this.columns=[this.makeColumn(r[0],r[1],r[2]),this.makeColumn(r[3],r[4],r[5]),this.makeColumn(r[6],r[7],r[8])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[0].z}get 3(){return 0}get 4(){return this.columns[1].x}get 5(){return this.columns[1].y}get 6(){return this.columns[1].z}get 7(){return 0}get 8(){return this.columns[2].x}get 9(){return this.columns[2].y}get 10(){return this.columns[2].z}get 11(){return 0}set 0(r){this.columns[0].x=r}set 1(r){this.columns[0].y=r}set 2(r){this.columns[0].z=r}set 3(r){}set 4(r){this.columns[1].x=r}set 5(r){this.columns[1].y=r}set 6(r){this.columns[1].z=r}set 7(r){}set 8(r){this.columns[2].x=r}set 9(r){this.columns[2].y=r}set 10(r){this.columns[2].z=r}set 11(r){}},me=class extends le{constructor(){super(...arguments);a(this,"kind","mat3x3f")}makeColumn(n,t,o){return U(n,t,o)}},ce=class{constructor(...r){a(this,"columns");a(this,"length",16);this.columns=[this.makeColumn(r[0],r[1],r[2],r[3]),this.makeColumn(r[4],r[5],r[6],r[7]),this.makeColumn(r[8],r[9],r[10],r[11]),this.makeColumn(r[12],r[13],r[14],r[15])]}get 0(){return this.columns[0].x}get 1(){return this.columns[0].y}get 2(){return this.columns[0].z}get 3(){return this.columns[0].w}get 4(){return this.columns[1].x}get 5(){return this.columns[1].y}get 6(){return this.columns[1].z}get 7(){return this.columns[1].w}get 8(){return this.columns[2].x}get 9(){return this.columns[2].y}get 10(){return this.columns[2].z}get 11(){return this.columns[2].w}get 12(){return this.columns[3].x}get 13(){return this.columns[3].y}get 14(){return this.columns[3].z}get 15(){return this.columns[3].w}set 0(r){this.columns[0].x=r}set 1(r){this.columns[0].y=r}set 2(r){this.columns[0].z=r}set 3(r){this.columns[0].w=r}set 4(r){this.columns[1].x=r}set 5(r){this.columns[1].y=r}set 6(r){this.columns[1].z=r}set 7(r){this.columns[1].w=r}set 8(r){this.columns[2].x=r}set 9(r){this.columns[2].y=r}set 10(r){this.columns[2].z=r}set 11(r){this.columns[2].w=r}set 12(r){this.columns[3].x=r}set 13(r){this.columns[3].y=r}set 14(r){this.columns[3].z=r}set 15(r){this.columns[3].w=r}},pe=class extends ce{constructor(){super(...arguments);a(this,"kind","mat4x4f")}makeColumn(n,t,o,s){return x(n,t,o,s)}},nr=de({type:"mat2x2f",rows:2,columns:2,makeFromElements:(...e)=>new xe(...e)}),tr=de({type:"mat3x3f",rows:3,columns:3,makeFromElements:(...e)=>new me(...e)}),or=de({type:"mat4x4f",rows:4,columns:4,makeFromElements:(...e)=>new pe(...e)});function ar(e){return e.kind==="mat3x3f"?[e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]]:Array.from({length:e.length}).map((r,n)=>e[n])}function sr(e){return new Te(e)}var Te=class{constructor(r){this.inner=r;a(this,"type","atomic");a(this,"~repr")}};function fe(e,r){return d(e)?new J(e.inner,[r,...e.attribs]):c(e)?new q(e.inner,[r,...e.attribs]):K(e)?new q(e,[r]):new J(e,[r])}function ur(e,r){return fe(r,{type:"@align",value:e})}function ir(e,r){return fe(r,{type:"@size",value:e})}function yr(e,r){return fe(r,{type:"@location",value:e})}function xr(e){return(d(e)||c(e))&&e.attribs.find(ne)!==void 0}function Pn(e){return!d(e)&&!c(e)?"":e.attribs.map(r=>`${r.type}(${r.value}) `).join("")}var H=class{constructor(r,n){this.inner=r;this.attribs=n;a(this,"~repr");var s,y;let t=(s=n.find(E))==null?void 0:s.value,o=(y=n.find(P))==null?void 0:y.value;if(t!==void 0){if(t<=0)throw new Error(`Custom data alignment must be a positive number, got: ${t}.`);if(Math.log2(t)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${t}.`);if(W(this.inner)&&t%l(this.inner)!==0)throw new Error(`Custom alignment has to be a multiple of the standard data alignment. Got: ${t}, expected multiple of: ${l(this.inner)}.`)}if(o!==void 0){if(o<m(this.inner))throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${o}, expected at least: ${m(this.inner)}.`);if(o<=0)throw new Error(`Custom data size must be a positive number. Got: ${o}.`)}}},J=class extends H{constructor(){super(...arguments);a(this,"type","decorated")}},q=class extends H{constructor(){super(...arguments);a(this,"type","loose-decorated")}};export{lr as a,mr as b,a as c,W as d,B as e,N as f,Me as g,E as h,P as i,re as j,ne as k,d as l,K as m,w as n,z as o,c as p,hr as q,Ue as r,pr as s,f as t,Le as u,Y as v,Z as w,ee as x,Pe as y,p as z,$ as A,R as B,U as C,oe as D,ae as E,x as F,_ as G,j as H,ve as I,Lr as J,Wr as K,Br as L,Nr as M,Er as N,Pr as O,Ir as P,Mr as Q,Or as R,$r as S,Rr as T,Ur as U,_r as V,jr as W,Gr as X,Kr as Y,Hr as Z,Jr as _,qr as $,Qr as aa,Xr as ba,Yr as ca,Zr as da,en as ea,rn as fa,nn as ga,tn as ha,on as ia,an as ja,sn as ka,un as la,l as ma,L as na,He as oa,m as pa,Ye as qa,ur as ra,ir as sa,yr as ta,xr as ua,Pn as va,$e as wa,Ze as xa,er as ya,rr as za,nr as Aa,tr as Ba,or as Ca,ar as Da,sr as Ea};
2
+ //# sourceMappingURL=chunk-IQYHODCR.js.map