typegpu 0.3.0-alpha.3 → 0.3.0-alpha.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var Se=Object.defineProperty,Ce=Object.defineProperties;var We=Object.getOwnPropertyDescriptors;var he=Object.getOwnPropertySymbols;var Le=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var oe=(e,n,t)=>n in e?Se(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,wn= exports.a =(e,n)=>{for(var t in n||(n={}))Le.call(n,t)&&oe(e,t,n[t]);if(he)for(var t of he(n))Ie.call(n,t)&&oe(e,t,n[t]);return e},vn= exports.b =(e,n)=>Ce(e,We(n));var a=(e,n,t)=>(oe(e,typeof n!="symbol"?n+"":n,t),t);var _typedbinary = require('typed-binary'); var _typedbinary2 = _interopRequireDefault(_typedbinary);var ae=0;function zn(e){ae++;try{return e()}finally{ae--}}var g=()=>ae>0;var Ne={type:"bool"},Ee=e=>g()?`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))),m= exports.v =Object.assign(Ee,{type:"u32"}),Pe=e=>{if(g())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 n=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,n))},$= exports.w =Object.assign(Pe,{type:"i32"}),_e=e=>{if(g())return`f32(${e})`;if(typeof e=="boolean")return e?1:0;let n=new Float32Array(1);return n[0]=e,n[0]},p= exports.x =Object.assign(_e,{type:"f32"}),Me=e=>{if(g())return`f16(${e})`;if(typeof e=="boolean")return e?1:0;let n=new ArrayBuffer(2);return _typedbinary2.default.f16.write(new _typedbinary2.default.BufferWriter(n),e),_typedbinary2.default.f16.read(new _typedbinary2.default.BufferReader(n))},Oe= exports.y =Object.assign(Me,{type:"f16"});var Ue=["bool","f32","f16","i32","u32","vec2f","vec2h","vec2i","vec2u","vec3f","vec3h","vec3i","vec3u","vec4f","vec4h","vec4i","vec4u","mat2x2f","mat3x3f","mat4x4f","struct","array","atomic","decorated"];function R(e){return Ue.includes(e==null?void 0:e.type)}function j(e){return(e==null?void 0:e.type)==="array"}function G(e){return(e==null?void 0:e.type)==="struct"}function $e(e){return(e==null?void 0:e.type)==="atomic"}function K(e){return(e==null?void 0:e.type)==="@align"}function H(e){return(e==null?void 0:e.type)==="@size"}function ie(e){return(e==null?void 0:e.type)==="@location"}function se(e){return(e==null?void 0:e.type)==="@builtin"}function w(e){return(e==null?void 0:e.type)==="decorated"}var je=e=>new ue(e),ue=class{constructor(n){this.propTypes=n;a(this,"_label");a(this,"type","struct");a(this,"~repr");a(this,"~exotic")}get label(){return this._label}$name(n){return this._label=n,this}};var z=(e,n)=>{let t=n-1,r=~t;return e&t?(e&r)+n:e};var Ve=["uint8","uint8x2","uint8x4","sint8","sint8x2","sint8x4","unorm8","unorm8x2","unorm8x4","snorm8","snorm8x2","snorm8x4","uint16","uint16x2","uint16x4","sint16","sint16x2","sint16x4","unorm16","unorm16x2","unorm16x4","snorm16","snorm16x2","snorm16x4","float16","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10-10-10-2","unorm8x4-bgra"];var Ge=["loose-struct","loose-array","loose-decorated",...Ve];function ee(e){return Ge.includes(e==null?void 0:e.type)}function h(e){return(e==null?void 0:e.type)==="loose-array"}function V(e){return(e==null?void 0:e.type)==="loose-struct"}function f(e){return(e==null?void 0:e.type)==="loose-decorated"}function k(e){var n,t;return(t=(n=e.attribs)==null?void 0:n.find(K))==null?void 0:t.value}function ke(e){var n,t;return(t=(n=e.attribs)==null?void 0:n.find(H))==null?void 0:t.value}function Wn(e){var n,t;return(t=(n=e.attribs)==null?void 0:n.find(ie))==null?void 0:t.value}function Ke(e){return R(e)||ee(e)}function c(e){let n={"~repr":void 0,type:e.type};return Object.assign((...r)=>{var i;let o=r;if(g())return`${n.type}(${o.join(", ")})`;if(o.length<=1)return e.makeFromScalar((i=o[0])!=null?i:0);if(o.length===e.length)return e.make(...o);throw new Error(`'${e.type}' constructor called with invalid number of arguments.`)},n)}var A=class{constructor(n,t){this.x=n;this.y=t;a(this,"length",2)}*[Symbol.iterator](){yield this.x,yield this.y}get 0(){return this.x}get 1(){return this.y}set 0(n){this.x=n}set 1(n){this.y=n}resolve(){return`${this.kind}(${this.x}, ${this.y})`}},D=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2f")}make2(t,r){return new e(t,r)}make3(t,r,o){return new W(t,r,o)}make4(t,r,o,i){return new P(t,r,o,i)}},F=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2h")}make2(t,r){return new e(t,r)}make3(t,r,o){return new L(t,r,o)}make4(t,r,o,i){return new _(t,r,o,i)}},B=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2i")}make2(t,r){return new e(t,r)}make3(t,r,o){return new I(t,r,o)}make4(t,r,o,i){return new M(t,r,o,i)}},S=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2u")}make2(t,r){return new e(t,r)}make3(t,r,o){return new N(t,r,o)}make4(t,r,o,i){return new O(t,r,o,i)}},C=class{constructor(n,t,r){this.x=n;this.y=t;this.z=r;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(n){this.x=n}set 1(n){this.y=n}set 2(n){this.z=n}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z})`}},W=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3f")}make2(t,r){return new D(t,r)}make3(t,r,o){return new e(t,r,o)}make4(t,r,o,i){return new P(t,r,o,i)}},L=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3h")}make2(t,r){return new F(t,r)}make3(t,r,o){return new e(t,r,o)}make4(t,r,o,i){return new _(t,r,o,i)}},I=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3i")}make2(t,r){return new B(t,r)}make3(t,r,o){return new e(t,r,o)}make4(t,r,o,i){return new M(t,r,o,i)}},N=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3u")}make2(t,r){return new S(t,r)}make3(t,r,o){return new e(t,r,o)}make4(t,r,o,i){return new O(t,r,o,i)}},E=class{constructor(n,t,r,o){this.x=n;this.y=t;this.z=r;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(n){this.x=n}set 1(n){this.y=n}set 2(n){this.z=n}set 3(n){this.w=n}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z}, ${this.w})`}},P=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4f")}make2(t,r){return new D(t,r)}make3(t,r,o){return new W(t,r,o)}make4(t,r,o,i){return new e(t,r,o,i)}},_=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4h")}make2(t,r){return new F(t,r)}make3(t,r,o){return new L(t,r,o)}make4(t,r,o,i){return new e(t,r,o,i)}},M=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4i")}make2(t,r){return new B(t,r)}make3(t,r,o){return new I(t,r,o)}make4(t,r,o,i){return new e(t,r,o,i)}},O=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4u")}make2(t,r){return new S(t,r)}make3(t,r,o){return new N(t,r,o)}make4(t,r,o,i){return new e(t,r,o,i)}},u={get:(e,n)=>{if(typeof n=="symbol"||!Number.isNaN(Number.parseInt(n)))return Reflect.get(e,n);let t=e,r=new Array(n.length),o=0;for(let i of n){switch(i){case"x":r[o]=t.x;break;case"y":r[o]=t.y;break;case"z":r[o]=t.z;break;case"w":r[o]=t.w;break;default:return Reflect.get(t,n)}o++}return n.length===4?new Proxy(t.make4(r[0],r[1],r[2],r[3]),u):n.length===3?new Proxy(t.make3(r[0],r[1],r[2]),u):n.length===2?new Proxy(t.make2(r[0],r[1]),u):Reflect.get(e,n)}},b= exports.z =c({type:"vec2f",length:2,make:(e,n)=>new Proxy(new D(e,n),u),makeFromScalar:e=>new Proxy(new D(e,e),u)}),He= exports.A =c({type:"vec2h",length:2,make:(e,n)=>new Proxy(new F(e,n),u),makeFromScalar:e=>new Proxy(new F(e,e),u)}),J= exports.B =c({type:"vec2i",length:2,make:(e,n)=>new Proxy(new B(e,n),u),makeFromScalar:e=>new Proxy(new B(e,e),u)}),q= exports.C =c({type:"vec2u",length:2,make:(e,n)=>new Proxy(new S(e,n),u),makeFromScalar:e=>new Proxy(new S(e,e),u)}),Q= exports.D =c({type:"vec3f",length:3,make:(e,n,t)=>new Proxy(new W(e,n,t),u),makeFromScalar:e=>new Proxy(new W(e,e,e),u)}),Je= exports.E =c({type:"vec3h",length:3,make:(e,n,t)=>new Proxy(new L(e,n,t),u),makeFromScalar:e=>new Proxy(new L(e,e,e),u)}),xe= exports.F =c({type:"vec3i",length:3,make:(e,n,t)=>new Proxy(new I(e,n,t),u),makeFromScalar:e=>new Proxy(new I(e,e,e),u)}),v= exports.G =c({type:"vec3u",length:3,make:(e,n,t)=>new Proxy(new N(e,n,t),u),makeFromScalar:e=>new Proxy(new N(e,e,e),u)}),y= exports.H =c({type:"vec4f",length:4,make:(e,n,t,r)=>new Proxy(new P(e,n,t,r),u),makeFromScalar:e=>new Proxy(new P(e,e,e,e),u)}),qe= exports.I =c({type:"vec4h",length:4,make:(e,n,t,r)=>new Proxy(new _(e,n,t,r),u),makeFromScalar:e=>new Proxy(new _(e,e,e,e),u)}),X= exports.J =c({type:"vec4i",length:4,make:(e,n,t,r)=>new Proxy(new M(e,n,t,r),u),makeFromScalar:e=>new Proxy(new M(e,e,e,e),u)}),Y= exports.K =c({length:4,type:"vec4u",make:(e,n,t,r)=>new Proxy(new O(e,n,t,r),u),makeFromScalar:e=>new Proxy(new O(e,e,e,e),u)});var s=class{constructor(n){this.type=n;a(this,"~repr")}},Qe={uint8:m,uint8x2:q,uint8x4:Y,sint8:$,sint8x2:J,sint8x4:X,unorm8:p,unorm8x2:b,unorm8x4:y,snorm8:p,snorm8x2:b,snorm8x4:y,uint16:m,uint16x2:q,uint16x4:Y,sint16:$,sint16x2:J,sint16x4:X,unorm16:p,unorm16x2:b,unorm16x4:y,snorm16:p,snorm16x2:b,snorm16x4:y,float16:p,float16x2:b,float16x4:y,float32:p,float32x2:b,float32x3:Q,float32x4:y,uint32:m,uint32x2:q,uint32x3:v,uint32x4:Y,sint32:$,sint32x2:J,sint32x3:xe,sint32x4:X,"unorm10-10-10-2":y,"unorm8x4-bgra":y},Ae= exports.L =Object.keys(Qe),Mn= exports.M =new s("uint8"),On= exports.N =new s("uint8x2"),Un= exports.O =new s("uint8x4"),$n= exports.P =new s("sint8"),Rn= exports.Q =new s("sint8x2"),jn= exports.R =new s("sint8x4"),Gn= exports.S =new s("unorm8"),Kn= exports.T =new s("unorm8x2"),Hn= exports.U =new s("unorm8x4"),Jn= exports.V =new s("snorm8"),qn= exports.W =new s("snorm8x2"),Qn= exports.X =new s("snorm8x4"),Xn= exports.Y =new s("uint16"),Yn= exports.Z =new s("uint16x2"),Zn= exports._ =new s("uint16x4"),et= exports.$ =new s("sint16"),nt= exports.aa =new s("sint16x2"),tt= exports.ba =new s("sint16x4"),rt= exports.ca =new s("unorm16"),ot= exports.da =new s("unorm16x2"),at= exports.ea =new s("unorm16x4"),it= exports.fa =new s("snorm16"),st= exports.ga =new s("snorm16x2"),ut= exports.ha =new s("snorm16x4"),xt= exports.ia =new s("float16"),yt= exports.ja =new s("float16x2"),lt= exports.ka =new s("float16x4"),mt= exports.la =new s("float32"),ct= exports.ma =new s("float32x2"),pt= exports.na =new s("float32x3"),dt= exports.oa =new s("float32x4"),Tt= exports.pa =new s("uint32"),ft= exports.qa =new s("uint32x2"),bt= exports.ra =new s("uint32x3"),wt= exports.sa =new s("uint32x4"),vt= exports.ta =new s("sint32"),gt= exports.ua =new s("sint32x2"),zt= exports.va =new s("sint32x3"),ht= exports.wa =new s("sint32x4"),Vt= exports.xa =new s("unorm10-10-10-2"),kt= exports.ya =new s("unorm8x4-bgra");var Xe={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2h:4,vec2i:8,vec2u:8,vec3f:16,vec3h:8,vec3i:16,vec3u:16,vec4f:16,vec4h:8,vec4i:16,vec4u:16,mat2x2f:8,mat3x3f:16,mat4x4f:16};function Ye(e){var r,o,i;let n=e==null?void 0:e.type,t=Xe[n];if(t!==void 0)return t;if(G(e))return Object.values(e.propTypes).map(d).reduce((l,ze)=>l>ze?l:ze);if(j(e))return d(e.elementType);if(V(e)){let l=Object.values(e.propTypes)[0];return l&&(r=k(l))!=null?r:1}if(h(e))return(o=k(e.elementType))!=null?o:1;if(w(e)||f(e))return(i=k(e))!=null?i:d(e.inner);if(Ae.includes(n))return 1;throw new Error(`Cannot determine alignment of data: ${JSON.stringify(e)}`)}function Ze(e){var n,t;if(V(e)){let r=Object.values(e.propTypes)[0];return r?U(r):1}return h(e)?U(e.elementType):f(e)?(n=k(e))!=null?n:U(e.inner):(t=k(e))!=null?t:1}var De=new WeakMap,Fe=new WeakMap;function d(e){let n=De.get(e);return n===void 0&&(n=Ye(e),De.set(e,n)),n}function U(e){let n=Fe.get(e);return n===void 0&&(n=Ze(e),Fe.set(e,n)),n}function en(e){return d(e)}var nn={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2h:4,vec2i:8,vec2u:8,vec3f:12,vec3h:6,vec3i:12,vec3u:12,vec4f:16,vec4h:8,vec4i:16,vec4u:16,mat2x2f:16,mat3x3f:48,mat4x4f:64,uint8:1,uint8x2:2,uint8x4:4,sint8:1,sint8x2:2,sint8x4:4,unorm8:1,unorm8x2:2,unorm8x4:4,snorm8:1,snorm8x2:2,snorm8x4:4,uint16:2,uint16x2:4,uint16x4:8,sint16:2,sint16x2:4,sint16x4:8,unorm16:2,unorm16x2:4,unorm16x4:8,snorm16:2,snorm16x2:4,snorm16x4:8,float16:2,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,"unorm8x4-bgra":4};function tn(e){let n=0;for(let t of Object.values(e.propTypes)){if(Number.isNaN(n))throw new Error("Only the last property of a struct can be unbounded");if(n=z(n,d(t)),n+=T(t),Number.isNaN(n)&&t.type!=="array")throw new Error("Cannot nest unbounded struct within another struct")}return z(n,d(e))}function rn(e){let n=0;for(let t of Object.values(e.propTypes)){let r=U(t);n=z(n,r),n+=T(t)}return n}function on(e){var t;let n=nn[e==null?void 0:e.type];if(n!==void 0)return n;if(G(e))return tn(e);if(V(e))return rn(e);if(j(e)){if(e.elementCount===0)return Number.NaN;let r=d(e.elementType);return z(T(e.elementType),r)*e.elementCount}if(h(e)){let r=U(e.elementType);return z(T(e.elementType),r)*e.elementCount}if(w(e)||f(e))return(t=ke(e))!=null?t:T(e.inner);throw new Error(`Cannot determine size of data: ${e}`)}var Be=new WeakMap;function T(e){let n=Be.get(e);return n===void 0&&(n=on(e),Be.set(e,n)),n}function an(e){return T(e)}var le=(e,n)=>new ye(e,n),ye=class{constructor(n,t){this.elementType=n;this.elementCount=t;a(this,"type","array");a(this,"~repr");a(this,"~exotic");if(Number.isNaN(T(n)))throw new Error("Cannot nest runtime sized arrays.")}};var sn=(e,n)=>new me(e,n),me=class{constructor(n,t){this.elementType=n;this.elementCount=t;a(this,"type","loose-array");a(this,"~repr")}};var un=e=>new ce(e),ce=class{constructor(n){this.propTypes=n;a(this,"type","loose-struct");a(this,"~repr")}};function ve(e){let n={"~repr":void 0,type:e.type,label:e.type};return Object.assign((...r)=>{let o=[];for(let i of r)if(typeof i=="number")o.push(i);else for(let l=0;l<i.length;++l)o.push(i[l]);for(let i=o.length;i<e.columns*e.rows;++i)o.push(0);return e.makeFromElements(...o)},n)}var pe=class{constructor(...n){a(this,"columns");a(this,"length",4);this.columns=[this.makeColumn(n[0],n[1]),this.makeColumn(n[2],n[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(n){this.columns[0].x=n}set 1(n){this.columns[0].y=n}set 2(n){this.columns[1].x=n}set 3(n){this.columns[1].y=n}},de=class extends pe{constructor(){super(...arguments);a(this,"kind","mat2x2f")}makeColumn(t,r){return b(t,r)}},Te=class{constructor(...n){a(this,"columns");a(this,"length",12);this.columns=[this.makeColumn(n[0],n[1],n[2]),this.makeColumn(n[3],n[4],n[5]),this.makeColumn(n[6],n[7],n[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(n){this.columns[0].x=n}set 1(n){this.columns[0].y=n}set 2(n){this.columns[0].z=n}set 3(n){}set 4(n){this.columns[1].x=n}set 5(n){this.columns[1].y=n}set 6(n){this.columns[1].z=n}set 7(n){}set 8(n){this.columns[2].x=n}set 9(n){this.columns[2].y=n}set 10(n){this.columns[2].z=n}set 11(n){}},fe=class extends Te{constructor(){super(...arguments);a(this,"kind","mat3x3f")}makeColumn(t,r,o){return Q(t,r,o)}},be=class{constructor(...n){a(this,"columns");a(this,"length",16);this.columns=[this.makeColumn(n[0],n[1],n[2],n[3]),this.makeColumn(n[4],n[5],n[6],n[7]),this.makeColumn(n[8],n[9],n[10],n[11]),this.makeColumn(n[12],n[13],n[14],n[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(n){this.columns[0].x=n}set 1(n){this.columns[0].y=n}set 2(n){this.columns[0].z=n}set 3(n){this.columns[0].w=n}set 4(n){this.columns[1].x=n}set 5(n){this.columns[1].y=n}set 6(n){this.columns[1].z=n}set 7(n){this.columns[1].w=n}set 8(n){this.columns[2].x=n}set 9(n){this.columns[2].y=n}set 10(n){this.columns[2].z=n}set 11(n){this.columns[2].w=n}set 12(n){this.columns[3].x=n}set 13(n){this.columns[3].y=n}set 14(n){this.columns[3].z=n}set 15(n){this.columns[3].w=n}},we=class extends be{constructor(){super(...arguments);a(this,"kind","mat4x4f")}makeColumn(t,r,o,i){return y(t,r,o,i)}},xn= exports.Na =ve({type:"mat2x2f",rows:2,columns:2,makeFromElements:(...e)=>new de(...e)}),yn= exports.Oa =ve({type:"mat3x3f",rows:3,columns:3,makeFromElements:(...e)=>new fe(...e)}),ln= exports.Pa =ve({type:"mat4x4f",rows:4,columns:4,makeFromElements:(...e)=>new we(...e)});function mn(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((n,t)=>e[t])}function cn(e){return new ge(e)}var ge=class{constructor(n){this.inner=n;a(this,"type","atomic");a(this,"~repr")}};function x(e,n){return w(e)?new te(e.inner,[n,...e.attribs]):f(e)?new re(e.inner,[n,...e.attribs]):ee(e)?new re(e,[n]):new te(e,[n])}function pn(e,n){return x(n,{type:"@align",value:e})}function dn(e,n){return x(n,{type:"@size",value:e})}function Tn(e,n){return x(n,{type:"@location",value:e})}function fn(e){return(w(e)||f(e))&&e.attribs.find(se)!==void 0}function Zt(e){return!w(e)&&!f(e)?"":e.attribs.map(n=>`${n.type}(${n.value}) `).join("")}var ne=class{constructor(n,t){this.inner=n;this.attribs=t;a(this,"~repr");var i,l;let r=(i=t.find(K))==null?void 0:i.value,o=(l=t.find(H))==null?void 0:l.value;if(r!==void 0){if(r<=0)throw new Error(`Custom data alignment must be a positive number, got: ${r}.`);if(Math.log2(r)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${r}.`);if(R(this.inner)&&r%d(this.inner)!==0)throw new Error(`Custom alignment has to be a multiple of the standard data alignment. Got: ${r}, expected multiple of: ${d(this.inner)}.`)}if(o!==void 0){if(o<T(this.inner))throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${o}, expected at least: ${T(this.inner)}.`);if(o<=0)throw new Error(`Custom data size must be a positive number. Got: ${o}.`)}}},te=class extends ne{constructor(){super(...arguments);a(this,"type","decorated")}},re=class extends ne{constructor(){super(...arguments);a(this,"type","loose-decorated")}};var bn={vertexIndex:x(m,{type:"@builtin",value:"vertex_index"}),instanceIndex:x(m,{type:"@builtin",value:"instance_index"}),position:x(y,{type:"@builtin",value:"position"}),clipDistances:x(le(m,8),{type:"@builtin",value:"clip_distances"}),frontFacing:x(p,{type:"@builtin",value:"front_facing"}),fragDepth:x(p,{type:"@builtin",value:"frag_depth"}),sampleIndex:x(m,{type:"@builtin",value:"sample_index"}),sampleMask:x(m,{type:"@builtin",value:"sample_mask"}),localInvocationId:x(v,{type:"@builtin",value:"local_invocation_id"}),localInvocationIndex:x(m,{type:"@builtin",value:"local_invocation_index"}),globalInvocationId:x(v,{type:"@builtin",value:"global_invocation_id"}),workgroupId:x(v,{type:"@builtin",value:"workgroup_id"}),numWorkgroups:x(v,{type:"@builtin",value:"num_workgroups"})};exports.a = wn; exports.b = vn; exports.c = a; exports.d = R; exports.e = j; exports.f = G; exports.g = $e; exports.h = K; exports.i = H; exports.j = ie; exports.k = se; exports.l = w; exports.m = ee; exports.n = h; exports.o = V; exports.p = f; exports.q = Wn; exports.r = Ke; exports.s = zn; exports.t = g; exports.u = Ne; exports.v = m; exports.w = $; exports.x = p; exports.y = Oe; exports.z = b; exports.A = He; exports.B = J; exports.C = q; exports.D = Q; exports.E = Je; exports.F = xe; exports.G = v; exports.H = y; exports.I = qe; exports.J = X; exports.K = Y; exports.L = Ae; exports.M = Mn; exports.N = On; exports.O = Un; exports.P = $n; exports.Q = Rn; exports.R = jn; exports.S = Gn; exports.T = Kn; exports.U = Hn; exports.V = Jn; exports.W = qn; exports.X = Qn; exports.Y = Xn; exports.Z = Yn; exports._ = Zn; exports.$ = et; exports.aa = nt; exports.ba = tt; exports.ca = rt; exports.da = ot; exports.ea = at; exports.fa = it; exports.ga = st; exports.ha = ut; exports.ia = xt; exports.ja = yt; exports.ka = lt; exports.la = mt; exports.ma = ct; exports.na = pt; exports.oa = dt; exports.pa = Tt; exports.qa = ft; exports.ra = bt; exports.sa = wt; exports.ta = vt; exports.ua = gt; exports.va = zt; exports.wa = ht; exports.xa = Vt; exports.ya = kt; exports.za = d; exports.Aa = U; exports.Ba = en; exports.Ca = T; exports.Da = an; exports.Ea = pn; exports.Fa = dn; exports.Ga = Tn; exports.Ha = fn; exports.Ia = Zt; exports.Ja = je; exports.Ka = le; exports.La = sn; exports.Ma = un; exports.Na = xn; exports.Oa = yn; exports.Pa = ln; exports.Qa = mn; exports.Ra = cn; exports.Sa = bn;
2
+ //# sourceMappingURL=chunk-CXTZVSMH.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","../src/builtin.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","vec2hImpl","_vec2hImpl","vec3hImpl","vec4hImpl","vec2iImpl","_vec2iImpl","vec3iImpl","vec4iImpl","vec2uImpl","_vec2uImpl","vec3uImpl","vec4uImpl","vec3Impl","_vec3fImpl","_vec3hImpl","_vec3iImpl","_vec3uImpl","vec4Impl","_vec4fImpl","_vec4hImpl","_vec4iImpl","_vec4uImpl","vecProxyHandler","target","prop","targetAsVec4","idx","char","vec2f","vec2h","vec2i","vec2u","vec3f","vec3h","vec3i","vec3u","vec4f","vec4h","vec4i","vec4u","TgpuVertexFormatDataImpl","type","formatToWGSLType","packedFormats","uint8","uint8x2","uint8x4","sint8","sint8x2","sint8x4","unorm8","unorm8x2","unorm8x4","snorm8","snorm8x2","snorm8x4","uint16","uint16x2","uint16x4","sint16","sint16x2","sint16x4","unorm16","unorm16x2","unorm16x4","snorm16","snorm16x2","snorm16x4","float16","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10_10_10_2","unorm8x4_bgra","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","builtin"],"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: vec2h or vec2<f16>.\n * A vector with 2 elements of type f16\n */\nexport interface v2h extends NumberArrayView, Swizzle2<v2h, v3h, v4h> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec2h';\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: vec3h or vec3<f16>.\n * A vector with 3 elements of type f16\n */\nexport interface v3h extends NumberArrayView, Swizzle3<v2h, v3h, v4h> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec3h';\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: vec4h or vec4<f16>.\n * A vector with 4 elements of type f16\n */\nexport interface v4h extends NumberArrayView, Swizzle4<v2h, v3h, v4h> {\n /** use to distinguish between vectors of the same size on the type level */\n readonly kind: 'vec4h';\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 Vec2h {\n readonly type: 'vec2h';\n /** Type-token, not available at runtime */\n readonly '~repr': v2h;\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 Vec3h {\n readonly type: 'vec3h';\n /** Type-token, not available at runtime */\n readonly '~repr': v3h;\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 Vec4h {\n readonly type: 'vec4h';\n /** Type-token, not available at runtime */\n readonly '~repr': v4h;\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 'vec2h',\n 'vec2i',\n 'vec2u',\n 'vec3f',\n 'vec3h',\n 'vec3i',\n 'vec3u',\n 'vec4f',\n 'vec4h',\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 | Vec2h\n | Vec2i\n | Vec2u\n | Vec3f\n | Vec3h\n | Vec3i\n | Vec3u\n | Vec4f\n | Vec4h\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 'uint8',\n 'uint8x2',\n 'uint8x4',\n 'sint8',\n 'sint8x2',\n 'sint8x4',\n 'unorm8',\n 'unorm8x2',\n 'unorm8x4',\n 'snorm8',\n 'snorm8x2',\n 'snorm8x4',\n 'uint16',\n 'uint16x2',\n 'uint16x4',\n 'sint16',\n 'sint16x2',\n 'sint16x4',\n 'unorm16',\n 'unorm16x2',\n 'unorm16x4',\n 'snorm16',\n 'snorm16x2',\n 'snorm16x4',\n 'float16',\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 'unorm8x4-bgra',\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 f16: 'float16',\n vec2h: 'float16x2',\n // vec3h has no direct equivalent in the spec\n vec4h: 'float16x4',\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<'uint8'>\n | TgpuVertexAttrib<'uint8x2'>\n | TgpuVertexAttrib<'uint8x4'>\n | TgpuVertexAttrib<'uint16'>\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<'sint8'>\n | TgpuVertexAttrib<'sint8x2'>\n | TgpuVertexAttrib<'sint8x4'>\n | TgpuVertexAttrib<'sint16'>\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<'unorm8'>\n | TgpuVertexAttrib<'unorm8x2'>\n | TgpuVertexAttrib<'unorm8x4'>\n | TgpuVertexAttrib<'snorm8'>\n | TgpuVertexAttrib<'snorm8x2'>\n | TgpuVertexAttrib<'snorm8x4'>\n | TgpuVertexAttrib<'unorm16'>\n | TgpuVertexAttrib<'unorm16x2'>\n | TgpuVertexAttrib<'unorm16x4'>\n | TgpuVertexAttrib<'snorm16'>\n | TgpuVertexAttrib<'snorm16x2'>\n | TgpuVertexAttrib<'snorm16x4'>\n | TgpuVertexAttrib<'float16'>\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 | TgpuVertexAttrib<'unorm8x4-bgra'>;\n\n/**\n * All vertex attribute formats that can be interpreted as\n * a single or multi component f16 in a shader. (same as f32 on the shader side)\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 Vec2h,\n Vec2i,\n Vec2u,\n Vec3f,\n Vec3h,\n Vec3i,\n Vec3u,\n Vec4f,\n Vec4h,\n Vec4i,\n Vec4u,\n v2f,\n v2h,\n v2i,\n v2u,\n v3f,\n v3h,\n v3i,\n v3u,\n v4f,\n v4h,\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' | 'h'}`;\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 vec2hImpl extends vec2Impl {\n readonly kind = 'vec2h';\n\n make2(x: number, y: number): v2h {\n return new vec2hImpl(x, y) as unknown as v2h;\n }\n\n make3(x: number, y: number, z: number): v3h {\n return new vec3hImpl(x, y, z) as unknown as v3h;\n }\n\n make4(x: number, y: number, z: number, w: number): v4h {\n return new vec4hImpl(x, y, z, w) as unknown as v4h;\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' | 'h'}`;\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 vec3hImpl extends vec3Impl {\n readonly kind = 'vec3h';\n\n make2(x: number, y: number): v2h {\n return new vec2hImpl(x, y) as unknown as v2h;\n }\n\n make3(x: number, y: number, z: number): v3h {\n return new vec3hImpl(x, y, z) as unknown as v3h;\n }\n\n make4(x: number, y: number, z: number, w: number): v4h {\n return new vec4hImpl(x, y, z, w) as unknown as v4h;\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' | 'h'}`;\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 vec4hImpl extends vec4Impl {\n readonly kind = 'vec4h';\n\n make2(x: number, y: number): v2h {\n return new vec2hImpl(x, y) as unknown as v2h;\n }\n\n make3(x: number, y: number, z: number): v3h {\n return new vec3hImpl(x, y, z) as unknown as v3h;\n }\n\n make4(x: number, y: number, z: number, w: number): v4h {\n return new vec4hImpl(x, y, z, w) as unknown as v4h;\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 | 'vec2h'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec3h'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u'\n | 'vec4h';\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.vec2h` object/function: vector data type schema/constructor\n */\nexport type NativeVec2h = Vec2h & { '~exotic': Vec2h } & ((\n x: number,\n y: number,\n ) => v2h) &\n ((xy: number) => v2h) &\n (() => v2h);\n\n/**\n *\n * Schema representing vec2h - a vector with 2 elements of type f16.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec2h(); // (0.0, 0.0)\n * const vector = d.vec2h(1); // (1.0, 1.0)\n * const vector = d.vec2h(0.5, 0.1); // (0.5, 0.1)\n *\n * @example\n * const buffer = root.createBuffer(d.vec2h, d.vec2h(0, 1)); // buffer holding a d.vec2h value, with an initial value of vec2h(0, 1);\n */\nexport const vec2h = makeVecSchema({\n type: 'vec2h',\n length: 2,\n make: (x: number, y: number) =>\n new Proxy(new vec2hImpl(x, y), vecProxyHandler) as v2h,\n makeFromScalar: (x) => new Proxy(new vec2hImpl(x, x), vecProxyHandler) as v2h,\n}) as NativeVec2h;\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.vec3h` object/function: vector data type schema/constructor\n */\nexport type NativeVec3h = Vec3h & { '~exotic': Vec3h } & ((\n x: number,\n y: number,\n z: number,\n ) => v3h) &\n ((xyz: number) => v3h) &\n (() => v3h);\n\n/**\n *\n * Schema representing vec3h - a vector with 3 elements of type f16.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec3h(); // (0.0, 0.0, 0.0)\n * const vector = d.vec3h(1); // (1.0, 1.0, 1.0)\n * const vector = d.vec3h(1, 2, 3.5); // (1.0, 2.0, 3.5)\n *\n * @example\n * const buffer = root.createBuffer(d.vec3h, d.vec3h(0, 1, 2)); // buffer holding a d.vec3h value, with an initial value of vec3h(0, 1, 2);\n */\nexport const vec3h = makeVecSchema({\n type: 'vec3h',\n length: 3,\n make: (x, y, z) => new Proxy(new vec3hImpl(x, y, z), vecProxyHandler) as v3h,\n makeFromScalar: (x) =>\n new Proxy(new vec3hImpl(x, x, x), vecProxyHandler) as v3h,\n}) as NativeVec3h;\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.vec4h` object/function: vector data type schema/constructor\n */\nexport type NativeVec4h = Vec4h & { '~exotic': Vec4h } & ((\n x: number,\n y: number,\n z: number,\n w: number,\n ) => v4h) &\n ((xyzw: number) => v4h) &\n (() => v4h);\n\n/**\n *\n * Schema representing vec4h - a vector with 4 elements of type f16.\n * Also a constructor function for this vector value.\n *\n * @example\n * const vector = d.vec4h(); // (0.0, 0.0, 0.0, 0.0)\n * const vector = d.vec4h(1); // (1.0, 1.0, 1.0, 1.0)\n * const vector = d.vec4h(1, 2, 3, 4.5); // (1.0, 2.0, 3.0, 4.5)\n *\n * @example\n * const buffer = root.createBuffer(d.vec4h, d.vec4h(0, 1, 2, 3)); // buffer holding a d.vec4h value, with an initial value of vec4h(0, 1, 2, 3);\n */\nexport const vec4h = makeVecSchema({\n type: 'vec4h',\n length: 4,\n make: (x, y, z, w) =>\n new Proxy(new vec4hImpl(x, y, z, w), vecProxyHandler) as v4h,\n makeFromScalar: (x) =>\n new Proxy(new vec4hImpl(x, x, x, x), vecProxyHandler) as v4h,\n}) as NativeVec4h;\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 uint8: u32,\n uint8x2: vec2u,\n uint8x4: vec4u,\n sint8: i32,\n sint8x2: vec2i,\n sint8x4: vec4i,\n unorm8: f32,\n unorm8x2: vec2f,\n unorm8x4: vec4f,\n snorm8: f32,\n snorm8x2: vec2f,\n snorm8x4: vec4f,\n uint16: u32,\n uint16x2: vec2u,\n uint16x4: vec4u,\n sint16: i32,\n sint16x2: vec2i,\n sint16x4: vec4i,\n unorm16: f32,\n unorm16x2: vec2f,\n unorm16x4: vec4f,\n snorm16: f32,\n snorm16x2: vec2f,\n snorm16x4: vec4f,\n float16: f32,\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 'unorm8x4-bgra': vec4f,\n} as const;\n\nexport const packedFormats = Object.keys(formatToWGSLType);\n\nexport type uint8 = TgpuVertexFormatData<'uint8'>;\nexport const uint8 = new TgpuVertexFormatDataImpl('uint8') as uint8;\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 sint8 = TgpuVertexFormatData<'sint8'>;\nexport const sint8 = new TgpuVertexFormatDataImpl('sint8') as sint8;\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 unorm8 = TgpuVertexFormatData<'unorm8'>;\nexport const unorm8 = new TgpuVertexFormatDataImpl('unorm8') as unorm8;\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 snorm8 = TgpuVertexFormatData<'snorm8'>;\nexport const snorm8 = new TgpuVertexFormatDataImpl('snorm8') as snorm8;\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 uint16 = TgpuVertexFormatData<'uint16'>;\nexport const uint16 = new TgpuVertexFormatDataImpl('uint16') as uint16;\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 sint16 = TgpuVertexFormatData<'sint16'>;\nexport const sint16 = new TgpuVertexFormatDataImpl('sint16') as sint16;\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 unorm16 = TgpuVertexFormatData<'unorm16'>;\nexport const unorm16 = new TgpuVertexFormatDataImpl('unorm16') as unorm16;\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 snorm16 = TgpuVertexFormatData<'snorm16'>;\nexport const snorm16 = new TgpuVertexFormatDataImpl('snorm16') as snorm16;\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 float16 = TgpuVertexFormatData<'float16'>;\nexport const float16 = new TgpuVertexFormatDataImpl('float16') as float16;\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 unorm8x4_bgra = TgpuVertexFormatData<'unorm8x4-bgra'>;\nexport const unorm8x4_bgra = new TgpuVertexFormatDataImpl(\n 'unorm8x4-bgra',\n) as unorm8x4_bgra;\n\nexport type PackedData =\n | uint8\n | uint8x2\n | uint8x4\n | sint8\n | sint8x2\n | sint8x4\n | unorm8\n | unorm8x2\n | unorm8x4\n | snorm8\n | snorm8x2\n | snorm8x4\n | uint16\n | uint16x2\n | uint16x4\n | sint16\n | sint16x2\n | sint16x4\n | unorm16\n | unorm16x2\n | unorm16x4\n | snorm16\n | snorm16x2\n | snorm16x4\n | float16\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 | unorm8x4_bgra;\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 vec2h: 4,\n vec2i: 8,\n vec2u: 8,\n vec3f: 16,\n vec3h: 8,\n vec3i: 16,\n vec3u: 16,\n vec4f: 16,\n vec4h: 8,\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 vec2h: 4,\n vec2i: 8,\n vec2u: 8,\n vec3f: 12,\n vec3h: 6,\n vec3i: 12,\n vec3u: 12,\n vec4f: 16,\n vec4h: 8,\n vec4i: 16,\n vec4u: 16,\n mat2x2f: 16,\n mat3x3f: 48,\n mat4x4f: 64,\n uint8: 1,\n uint8x2: 2,\n uint8x4: 4,\n sint8: 1,\n sint8x2: 2,\n sint8x4: 4,\n unorm8: 1,\n unorm8x2: 2,\n unorm8x4: 4,\n snorm8: 1,\n snorm8x2: 2,\n snorm8x4: 4,\n uint16: 2,\n uint16x2: 4,\n uint16x4: 8,\n sint16: 2,\n sint16x2: 4,\n sint16x4: 8,\n unorm16: 2,\n unorm16x2: 4,\n unorm16x4: 8,\n snorm16: 2,\n snorm16x2: 4,\n snorm16x4: 8,\n float16: 2,\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 'unorm8x4-bgra': 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 type HasCustomLocation<T> = ExtractAttributes<T>[number] extends []\n ? false\n : ExtractAttributes<T>[number] extends Location<number>\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","import { arrayOf } from './data/array';\nimport { attribute } from './data/attributes';\nimport { f32, u32 } from './data/numeric';\nimport { vec3u, vec4f } from './data/vector';\nimport type {\n BaseWgslData,\n Builtin,\n Decorated,\n F32,\n U32,\n Vec3u,\n Vec4f,\n WgslArray,\n} from './data/wgslTypes';\n\n// ----------\n// Public API\n// ----------\n\nexport type BuiltinVertexIndex = Decorated<U32, [Builtin<'vertex_index'>]>;\nexport type BuiltinInstanceIndex = Decorated<U32, [Builtin<'instance_index'>]>;\nexport type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>;\nexport type BuiltinClipDistances = Decorated<\n WgslArray<U32>,\n [Builtin<'clip_distances'>]\n>;\nexport type BuiltinFrontFacing = Decorated<F32, [Builtin<'front_facing'>]>;\nexport type BuiltinFragDepth = Decorated<F32, [Builtin<'frag_depth'>]>;\nexport type BuiltinSampleIndex = Decorated<U32, [Builtin<'sample_index'>]>;\nexport type BuiltinSampleMask = Decorated<U32, [Builtin<'sample_mask'>]>;\nexport type BuiltinFragment = Decorated<Vec4f, [Builtin<'fragment'>]>;\nexport type BuiltinLocalInvocationId = Decorated<\n Vec3u,\n [Builtin<'local_invocation_id'>]\n>;\nexport type BuiltinLocalInvocationIndex = Decorated<\n U32,\n [Builtin<'local_invocation_index'>]\n>;\nexport type BuiltinGlobalInvocationId = Decorated<\n Vec3u,\n [Builtin<'global_invocation_id'>]\n>;\nexport type BuiltinWorkgroupId = Decorated<Vec3u, [Builtin<'workgroup_id'>]>;\nexport type BuiltinNumWorkgroups = Decorated<\n Vec3u,\n [Builtin<'num_workgroups'>]\n>;\n\nexport const builtin = {\n vertexIndex: attribute(u32, {\n type: '@builtin',\n value: 'vertex_index',\n }) as BuiltinVertexIndex,\n instanceIndex: attribute(u32, {\n type: '@builtin',\n value: 'instance_index',\n }) as BuiltinInstanceIndex,\n position: attribute(vec4f, {\n type: '@builtin',\n value: 'position',\n }) as BuiltinPosition,\n clipDistances: attribute(arrayOf(u32, 8), {\n type: '@builtin',\n value: 'clip_distances',\n }) as BuiltinClipDistances,\n frontFacing: attribute(f32, {\n type: '@builtin',\n value: 'front_facing',\n }) as BuiltinFrontFacing,\n fragDepth: attribute(f32, {\n type: '@builtin',\n value: 'frag_depth',\n }) as BuiltinFragDepth,\n sampleIndex: attribute(u32, {\n type: '@builtin',\n value: 'sample_index',\n }) as BuiltinSampleIndex,\n sampleMask: attribute(u32, {\n type: '@builtin',\n value: 'sample_mask',\n }) as BuiltinSampleMask,\n localInvocationId: attribute(vec3u, {\n type: '@builtin',\n value: 'local_invocation_id',\n }) as BuiltinLocalInvocationId,\n localInvocationIndex: attribute(u32, {\n type: '@builtin',\n value: 'local_invocation_index',\n }) as BuiltinLocalInvocationIndex,\n globalInvocationId: attribute(vec3u, {\n type: '@builtin',\n value: 'global_invocation_id',\n }) as BuiltinGlobalInvocationId,\n workgroupId: attribute(vec3u, {\n type: '@builtin',\n value: 'workgroup_id',\n }) as BuiltinWorkgroupId,\n numWorkgroups: attribute(vec3u, {\n type: '@builtin',\n value: 'num_workgroups',\n }) as BuiltinNumWorkgroups,\n} as const;\n\nexport type AnyBuiltin = (typeof builtin)[keyof typeof builtin];\n\nexport type OmitBuiltins<S> = S extends AnyBuiltin\n ? never\n : S extends BaseWgslData\n ? S\n : {\n [Key in keyof S as S[Key] extends AnyBuiltin ? never : Key]: S[Key];\n };\n"]}
@@ -0,0 +1,2 @@
1
+ var Se=Object.defineProperty,Ce=Object.defineProperties;var We=Object.getOwnPropertyDescriptors;var he=Object.getOwnPropertySymbols;var Le=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var oe=(e,n,t)=>n in e?Se(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,wn=(e,n)=>{for(var t in n||(n={}))Le.call(n,t)&&oe(e,t,n[t]);if(he)for(var t of he(n))Ie.call(n,t)&&oe(e,t,n[t]);return e},vn=(e,n)=>Ce(e,We(n));var a=(e,n,t)=>(oe(e,typeof n!="symbol"?n+"":n,t),t);import Z from"typed-binary";var ae=0;function zn(e){ae++;try{return e()}finally{ae--}}var g=()=>ae>0;var Ne={type:"bool"},Ee=e=>g()?`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))),m=Object.assign(Ee,{type:"u32"}),Pe=e=>{if(g())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 n=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,n))},$=Object.assign(Pe,{type:"i32"}),_e=e=>{if(g())return`f32(${e})`;if(typeof e=="boolean")return e?1:0;let n=new Float32Array(1);return n[0]=e,n[0]},p=Object.assign(_e,{type:"f32"}),Me=e=>{if(g())return`f16(${e})`;if(typeof e=="boolean")return e?1:0;let n=new ArrayBuffer(2);return Z.f16.write(new Z.BufferWriter(n),e),Z.f16.read(new Z.BufferReader(n))},Oe=Object.assign(Me,{type:"f16"});var Ue=["bool","f32","f16","i32","u32","vec2f","vec2h","vec2i","vec2u","vec3f","vec3h","vec3i","vec3u","vec4f","vec4h","vec4i","vec4u","mat2x2f","mat3x3f","mat4x4f","struct","array","atomic","decorated"];function R(e){return Ue.includes(e==null?void 0:e.type)}function j(e){return(e==null?void 0:e.type)==="array"}function G(e){return(e==null?void 0:e.type)==="struct"}function $e(e){return(e==null?void 0:e.type)==="atomic"}function K(e){return(e==null?void 0:e.type)==="@align"}function H(e){return(e==null?void 0:e.type)==="@size"}function ie(e){return(e==null?void 0:e.type)==="@location"}function se(e){return(e==null?void 0:e.type)==="@builtin"}function w(e){return(e==null?void 0:e.type)==="decorated"}var je=e=>new ue(e),ue=class{constructor(n){this.propTypes=n;a(this,"_label");a(this,"type","struct");a(this,"~repr");a(this,"~exotic")}get label(){return this._label}$name(n){return this._label=n,this}};var z=(e,n)=>{let t=n-1,r=~t;return e&t?(e&r)+n:e};var Ve=["uint8","uint8x2","uint8x4","sint8","sint8x2","sint8x4","unorm8","unorm8x2","unorm8x4","snorm8","snorm8x2","snorm8x4","uint16","uint16x2","uint16x4","sint16","sint16x2","sint16x4","unorm16","unorm16x2","unorm16x4","snorm16","snorm16x2","snorm16x4","float16","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10-10-10-2","unorm8x4-bgra"];var Ge=["loose-struct","loose-array","loose-decorated",...Ve];function ee(e){return Ge.includes(e==null?void 0:e.type)}function h(e){return(e==null?void 0:e.type)==="loose-array"}function V(e){return(e==null?void 0:e.type)==="loose-struct"}function f(e){return(e==null?void 0:e.type)==="loose-decorated"}function k(e){var n,t;return(t=(n=e.attribs)==null?void 0:n.find(K))==null?void 0:t.value}function ke(e){var n,t;return(t=(n=e.attribs)==null?void 0:n.find(H))==null?void 0:t.value}function Wn(e){var n,t;return(t=(n=e.attribs)==null?void 0:n.find(ie))==null?void 0:t.value}function Ke(e){return R(e)||ee(e)}function c(e){let n={"~repr":void 0,type:e.type};return Object.assign((...r)=>{var i;let o=r;if(g())return`${n.type}(${o.join(", ")})`;if(o.length<=1)return e.makeFromScalar((i=o[0])!=null?i:0);if(o.length===e.length)return e.make(...o);throw new Error(`'${e.type}' constructor called with invalid number of arguments.`)},n)}var A=class{constructor(n,t){this.x=n;this.y=t;a(this,"length",2)}*[Symbol.iterator](){yield this.x,yield this.y}get 0(){return this.x}get 1(){return this.y}set 0(n){this.x=n}set 1(n){this.y=n}resolve(){return`${this.kind}(${this.x}, ${this.y})`}},D=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2f")}make2(t,r){return new e(t,r)}make3(t,r,o){return new W(t,r,o)}make4(t,r,o,i){return new P(t,r,o,i)}},F=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2h")}make2(t,r){return new e(t,r)}make3(t,r,o){return new L(t,r,o)}make4(t,r,o,i){return new _(t,r,o,i)}},B=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2i")}make2(t,r){return new e(t,r)}make3(t,r,o){return new I(t,r,o)}make4(t,r,o,i){return new M(t,r,o,i)}},S=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2u")}make2(t,r){return new e(t,r)}make3(t,r,o){return new N(t,r,o)}make4(t,r,o,i){return new O(t,r,o,i)}},C=class{constructor(n,t,r){this.x=n;this.y=t;this.z=r;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(n){this.x=n}set 1(n){this.y=n}set 2(n){this.z=n}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z})`}},W=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3f")}make2(t,r){return new D(t,r)}make3(t,r,o){return new e(t,r,o)}make4(t,r,o,i){return new P(t,r,o,i)}},L=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3h")}make2(t,r){return new F(t,r)}make3(t,r,o){return new e(t,r,o)}make4(t,r,o,i){return new _(t,r,o,i)}},I=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3i")}make2(t,r){return new B(t,r)}make3(t,r,o){return new e(t,r,o)}make4(t,r,o,i){return new M(t,r,o,i)}},N=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3u")}make2(t,r){return new S(t,r)}make3(t,r,o){return new e(t,r,o)}make4(t,r,o,i){return new O(t,r,o,i)}},E=class{constructor(n,t,r,o){this.x=n;this.y=t;this.z=r;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(n){this.x=n}set 1(n){this.y=n}set 2(n){this.z=n}set 3(n){this.w=n}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z}, ${this.w})`}},P=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4f")}make2(t,r){return new D(t,r)}make3(t,r,o){return new W(t,r,o)}make4(t,r,o,i){return new e(t,r,o,i)}},_=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4h")}make2(t,r){return new F(t,r)}make3(t,r,o){return new L(t,r,o)}make4(t,r,o,i){return new e(t,r,o,i)}},M=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4i")}make2(t,r){return new B(t,r)}make3(t,r,o){return new I(t,r,o)}make4(t,r,o,i){return new e(t,r,o,i)}},O=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4u")}make2(t,r){return new S(t,r)}make3(t,r,o){return new N(t,r,o)}make4(t,r,o,i){return new e(t,r,o,i)}},u={get:(e,n)=>{if(typeof n=="symbol"||!Number.isNaN(Number.parseInt(n)))return Reflect.get(e,n);let t=e,r=new Array(n.length),o=0;for(let i of n){switch(i){case"x":r[o]=t.x;break;case"y":r[o]=t.y;break;case"z":r[o]=t.z;break;case"w":r[o]=t.w;break;default:return Reflect.get(t,n)}o++}return n.length===4?new Proxy(t.make4(r[0],r[1],r[2],r[3]),u):n.length===3?new Proxy(t.make3(r[0],r[1],r[2]),u):n.length===2?new Proxy(t.make2(r[0],r[1]),u):Reflect.get(e,n)}},b=c({type:"vec2f",length:2,make:(e,n)=>new Proxy(new D(e,n),u),makeFromScalar:e=>new Proxy(new D(e,e),u)}),He=c({type:"vec2h",length:2,make:(e,n)=>new Proxy(new F(e,n),u),makeFromScalar:e=>new Proxy(new F(e,e),u)}),J=c({type:"vec2i",length:2,make:(e,n)=>new Proxy(new B(e,n),u),makeFromScalar:e=>new Proxy(new B(e,e),u)}),q=c({type:"vec2u",length:2,make:(e,n)=>new Proxy(new S(e,n),u),makeFromScalar:e=>new Proxy(new S(e,e),u)}),Q=c({type:"vec3f",length:3,make:(e,n,t)=>new Proxy(new W(e,n,t),u),makeFromScalar:e=>new Proxy(new W(e,e,e),u)}),Je=c({type:"vec3h",length:3,make:(e,n,t)=>new Proxy(new L(e,n,t),u),makeFromScalar:e=>new Proxy(new L(e,e,e),u)}),xe=c({type:"vec3i",length:3,make:(e,n,t)=>new Proxy(new I(e,n,t),u),makeFromScalar:e=>new Proxy(new I(e,e,e),u)}),v=c({type:"vec3u",length:3,make:(e,n,t)=>new Proxy(new N(e,n,t),u),makeFromScalar:e=>new Proxy(new N(e,e,e),u)}),y=c({type:"vec4f",length:4,make:(e,n,t,r)=>new Proxy(new P(e,n,t,r),u),makeFromScalar:e=>new Proxy(new P(e,e,e,e),u)}),qe=c({type:"vec4h",length:4,make:(e,n,t,r)=>new Proxy(new _(e,n,t,r),u),makeFromScalar:e=>new Proxy(new _(e,e,e,e),u)}),X=c({type:"vec4i",length:4,make:(e,n,t,r)=>new Proxy(new M(e,n,t,r),u),makeFromScalar:e=>new Proxy(new M(e,e,e,e),u)}),Y=c({length:4,type:"vec4u",make:(e,n,t,r)=>new Proxy(new O(e,n,t,r),u),makeFromScalar:e=>new Proxy(new O(e,e,e,e),u)});var s=class{constructor(n){this.type=n;a(this,"~repr")}},Qe={uint8:m,uint8x2:q,uint8x4:Y,sint8:$,sint8x2:J,sint8x4:X,unorm8:p,unorm8x2:b,unorm8x4:y,snorm8:p,snorm8x2:b,snorm8x4:y,uint16:m,uint16x2:q,uint16x4:Y,sint16:$,sint16x2:J,sint16x4:X,unorm16:p,unorm16x2:b,unorm16x4:y,snorm16:p,snorm16x2:b,snorm16x4:y,float16:p,float16x2:b,float16x4:y,float32:p,float32x2:b,float32x3:Q,float32x4:y,uint32:m,uint32x2:q,uint32x3:v,uint32x4:Y,sint32:$,sint32x2:J,sint32x3:xe,sint32x4:X,"unorm10-10-10-2":y,"unorm8x4-bgra":y},Ae=Object.keys(Qe),Mn=new s("uint8"),On=new s("uint8x2"),Un=new s("uint8x4"),$n=new s("sint8"),Rn=new s("sint8x2"),jn=new s("sint8x4"),Gn=new s("unorm8"),Kn=new s("unorm8x2"),Hn=new s("unorm8x4"),Jn=new s("snorm8"),qn=new s("snorm8x2"),Qn=new s("snorm8x4"),Xn=new s("uint16"),Yn=new s("uint16x2"),Zn=new s("uint16x4"),et=new s("sint16"),nt=new s("sint16x2"),tt=new s("sint16x4"),rt=new s("unorm16"),ot=new s("unorm16x2"),at=new s("unorm16x4"),it=new s("snorm16"),st=new s("snorm16x2"),ut=new s("snorm16x4"),xt=new s("float16"),yt=new s("float16x2"),lt=new s("float16x4"),mt=new s("float32"),ct=new s("float32x2"),pt=new s("float32x3"),dt=new s("float32x4"),Tt=new s("uint32"),ft=new s("uint32x2"),bt=new s("uint32x3"),wt=new s("uint32x4"),vt=new s("sint32"),gt=new s("sint32x2"),zt=new s("sint32x3"),ht=new s("sint32x4"),Vt=new s("unorm10-10-10-2"),kt=new s("unorm8x4-bgra");var Xe={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2h:4,vec2i:8,vec2u:8,vec3f:16,vec3h:8,vec3i:16,vec3u:16,vec4f:16,vec4h:8,vec4i:16,vec4u:16,mat2x2f:8,mat3x3f:16,mat4x4f:16};function Ye(e){var r,o,i;let n=e==null?void 0:e.type,t=Xe[n];if(t!==void 0)return t;if(G(e))return Object.values(e.propTypes).map(d).reduce((l,ze)=>l>ze?l:ze);if(j(e))return d(e.elementType);if(V(e)){let l=Object.values(e.propTypes)[0];return l&&(r=k(l))!=null?r:1}if(h(e))return(o=k(e.elementType))!=null?o:1;if(w(e)||f(e))return(i=k(e))!=null?i:d(e.inner);if(Ae.includes(n))return 1;throw new Error(`Cannot determine alignment of data: ${JSON.stringify(e)}`)}function Ze(e){var n,t;if(V(e)){let r=Object.values(e.propTypes)[0];return r?U(r):1}return h(e)?U(e.elementType):f(e)?(n=k(e))!=null?n:U(e.inner):(t=k(e))!=null?t:1}var De=new WeakMap,Fe=new WeakMap;function d(e){let n=De.get(e);return n===void 0&&(n=Ye(e),De.set(e,n)),n}function U(e){let n=Fe.get(e);return n===void 0&&(n=Ze(e),Fe.set(e,n)),n}function en(e){return d(e)}var nn={bool:4,f32:4,f16:2,i32:4,u32:4,vec2f:8,vec2h:4,vec2i:8,vec2u:8,vec3f:12,vec3h:6,vec3i:12,vec3u:12,vec4f:16,vec4h:8,vec4i:16,vec4u:16,mat2x2f:16,mat3x3f:48,mat4x4f:64,uint8:1,uint8x2:2,uint8x4:4,sint8:1,sint8x2:2,sint8x4:4,unorm8:1,unorm8x2:2,unorm8x4:4,snorm8:1,snorm8x2:2,snorm8x4:4,uint16:2,uint16x2:4,uint16x4:8,sint16:2,sint16x2:4,sint16x4:8,unorm16:2,unorm16x2:4,unorm16x4:8,snorm16:2,snorm16x2:4,snorm16x4:8,float16:2,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,"unorm8x4-bgra":4};function tn(e){let n=0;for(let t of Object.values(e.propTypes)){if(Number.isNaN(n))throw new Error("Only the last property of a struct can be unbounded");if(n=z(n,d(t)),n+=T(t),Number.isNaN(n)&&t.type!=="array")throw new Error("Cannot nest unbounded struct within another struct")}return z(n,d(e))}function rn(e){let n=0;for(let t of Object.values(e.propTypes)){let r=U(t);n=z(n,r),n+=T(t)}return n}function on(e){var t;let n=nn[e==null?void 0:e.type];if(n!==void 0)return n;if(G(e))return tn(e);if(V(e))return rn(e);if(j(e)){if(e.elementCount===0)return Number.NaN;let r=d(e.elementType);return z(T(e.elementType),r)*e.elementCount}if(h(e)){let r=U(e.elementType);return z(T(e.elementType),r)*e.elementCount}if(w(e)||f(e))return(t=ke(e))!=null?t:T(e.inner);throw new Error(`Cannot determine size of data: ${e}`)}var Be=new WeakMap;function T(e){let n=Be.get(e);return n===void 0&&(n=on(e),Be.set(e,n)),n}function an(e){return T(e)}var le=(e,n)=>new ye(e,n),ye=class{constructor(n,t){this.elementType=n;this.elementCount=t;a(this,"type","array");a(this,"~repr");a(this,"~exotic");if(Number.isNaN(T(n)))throw new Error("Cannot nest runtime sized arrays.")}};var sn=(e,n)=>new me(e,n),me=class{constructor(n,t){this.elementType=n;this.elementCount=t;a(this,"type","loose-array");a(this,"~repr")}};var un=e=>new ce(e),ce=class{constructor(n){this.propTypes=n;a(this,"type","loose-struct");a(this,"~repr")}};function ve(e){let n={"~repr":void 0,type:e.type,label:e.type};return Object.assign((...r)=>{let o=[];for(let i of r)if(typeof i=="number")o.push(i);else for(let l=0;l<i.length;++l)o.push(i[l]);for(let i=o.length;i<e.columns*e.rows;++i)o.push(0);return e.makeFromElements(...o)},n)}var pe=class{constructor(...n){a(this,"columns");a(this,"length",4);this.columns=[this.makeColumn(n[0],n[1]),this.makeColumn(n[2],n[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(n){this.columns[0].x=n}set 1(n){this.columns[0].y=n}set 2(n){this.columns[1].x=n}set 3(n){this.columns[1].y=n}},de=class extends pe{constructor(){super(...arguments);a(this,"kind","mat2x2f")}makeColumn(t,r){return b(t,r)}},Te=class{constructor(...n){a(this,"columns");a(this,"length",12);this.columns=[this.makeColumn(n[0],n[1],n[2]),this.makeColumn(n[3],n[4],n[5]),this.makeColumn(n[6],n[7],n[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(n){this.columns[0].x=n}set 1(n){this.columns[0].y=n}set 2(n){this.columns[0].z=n}set 3(n){}set 4(n){this.columns[1].x=n}set 5(n){this.columns[1].y=n}set 6(n){this.columns[1].z=n}set 7(n){}set 8(n){this.columns[2].x=n}set 9(n){this.columns[2].y=n}set 10(n){this.columns[2].z=n}set 11(n){}},fe=class extends Te{constructor(){super(...arguments);a(this,"kind","mat3x3f")}makeColumn(t,r,o){return Q(t,r,o)}},be=class{constructor(...n){a(this,"columns");a(this,"length",16);this.columns=[this.makeColumn(n[0],n[1],n[2],n[3]),this.makeColumn(n[4],n[5],n[6],n[7]),this.makeColumn(n[8],n[9],n[10],n[11]),this.makeColumn(n[12],n[13],n[14],n[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(n){this.columns[0].x=n}set 1(n){this.columns[0].y=n}set 2(n){this.columns[0].z=n}set 3(n){this.columns[0].w=n}set 4(n){this.columns[1].x=n}set 5(n){this.columns[1].y=n}set 6(n){this.columns[1].z=n}set 7(n){this.columns[1].w=n}set 8(n){this.columns[2].x=n}set 9(n){this.columns[2].y=n}set 10(n){this.columns[2].z=n}set 11(n){this.columns[2].w=n}set 12(n){this.columns[3].x=n}set 13(n){this.columns[3].y=n}set 14(n){this.columns[3].z=n}set 15(n){this.columns[3].w=n}},we=class extends be{constructor(){super(...arguments);a(this,"kind","mat4x4f")}makeColumn(t,r,o,i){return y(t,r,o,i)}},xn=ve({type:"mat2x2f",rows:2,columns:2,makeFromElements:(...e)=>new de(...e)}),yn=ve({type:"mat3x3f",rows:3,columns:3,makeFromElements:(...e)=>new fe(...e)}),ln=ve({type:"mat4x4f",rows:4,columns:4,makeFromElements:(...e)=>new we(...e)});function mn(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((n,t)=>e[t])}function cn(e){return new ge(e)}var ge=class{constructor(n){this.inner=n;a(this,"type","atomic");a(this,"~repr")}};function x(e,n){return w(e)?new te(e.inner,[n,...e.attribs]):f(e)?new re(e.inner,[n,...e.attribs]):ee(e)?new re(e,[n]):new te(e,[n])}function pn(e,n){return x(n,{type:"@align",value:e})}function dn(e,n){return x(n,{type:"@size",value:e})}function Tn(e,n){return x(n,{type:"@location",value:e})}function fn(e){return(w(e)||f(e))&&e.attribs.find(se)!==void 0}function Zt(e){return!w(e)&&!f(e)?"":e.attribs.map(n=>`${n.type}(${n.value}) `).join("")}var ne=class{constructor(n,t){this.inner=n;this.attribs=t;a(this,"~repr");var i,l;let r=(i=t.find(K))==null?void 0:i.value,o=(l=t.find(H))==null?void 0:l.value;if(r!==void 0){if(r<=0)throw new Error(`Custom data alignment must be a positive number, got: ${r}.`);if(Math.log2(r)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${r}.`);if(R(this.inner)&&r%d(this.inner)!==0)throw new Error(`Custom alignment has to be a multiple of the standard data alignment. Got: ${r}, expected multiple of: ${d(this.inner)}.`)}if(o!==void 0){if(o<T(this.inner))throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${o}, expected at least: ${T(this.inner)}.`);if(o<=0)throw new Error(`Custom data size must be a positive number. Got: ${o}.`)}}},te=class extends ne{constructor(){super(...arguments);a(this,"type","decorated")}},re=class extends ne{constructor(){super(...arguments);a(this,"type","loose-decorated")}};var bn={vertexIndex:x(m,{type:"@builtin",value:"vertex_index"}),instanceIndex:x(m,{type:"@builtin",value:"instance_index"}),position:x(y,{type:"@builtin",value:"position"}),clipDistances:x(le(m,8),{type:"@builtin",value:"clip_distances"}),frontFacing:x(p,{type:"@builtin",value:"front_facing"}),fragDepth:x(p,{type:"@builtin",value:"frag_depth"}),sampleIndex:x(m,{type:"@builtin",value:"sample_index"}),sampleMask:x(m,{type:"@builtin",value:"sample_mask"}),localInvocationId:x(v,{type:"@builtin",value:"local_invocation_id"}),localInvocationIndex:x(m,{type:"@builtin",value:"local_invocation_index"}),globalInvocationId:x(v,{type:"@builtin",value:"global_invocation_id"}),workgroupId:x(v,{type:"@builtin",value:"workgroup_id"}),numWorkgroups:x(v,{type:"@builtin",value:"num_workgroups"})};export{wn as a,vn as b,a as c,R as d,j as e,G as f,$e as g,K as h,H as i,ie as j,se as k,w as l,ee as m,h as n,V as o,f as p,Wn as q,Ke as r,zn as s,g as t,Ne as u,m as v,$ as w,p as x,Oe as y,b as z,He as A,J as B,q as C,Q as D,Je as E,xe as F,v as G,y as H,qe as I,X as J,Y as K,Ae as L,Mn as M,On as N,Un as O,$n as P,Rn as Q,jn as R,Gn as S,Kn as T,Hn as U,Jn as V,qn as W,Qn as X,Xn as Y,Yn as Z,Zn as _,et as $,nt as aa,tt as ba,rt as ca,ot as da,at as ea,it as fa,st as ga,ut as ha,xt as ia,yt as ja,lt as ka,mt as la,ct as ma,pt as na,dt as oa,Tt as pa,ft as qa,bt as ra,wt as sa,vt as ta,gt as ua,zt as va,ht as wa,Vt as xa,kt as ya,d as za,U as Aa,en as Ba,T as Ca,an as Da,pn as Ea,dn as Fa,Tn as Ga,fn as Ha,Zt as Ia,je as Ja,le as Ka,sn as La,un as Ma,xn as Na,yn as Oa,ln as Pa,mn as Qa,cn as Ra,bn as Sa};
2
+ //# sourceMappingURL=chunk-R4KCT3GE.js.map