typegpu 0.3.0-alpha.4 → 0.3.0-alpha.6
Sign up to get free protection for your applications and to get access to all the features.
- package/chunk-3A2SULTE.cjs +4 -0
- package/chunk-3A2SULTE.cjs.map +1 -0
- package/chunk-U7YXBTRR.js +4 -0
- package/chunk-U7YXBTRR.js.map +1 -0
- package/data/index.cjs +1 -1
- package/data/index.d.cts +4 -3
- package/data/index.d.ts +4 -3
- package/data/index.js +1 -1
- package/index.cjs +9 -11
- package/index.cjs.map +1 -1
- package/index.d.cts +101 -33
- package/index.d.ts +101 -33
- package/index.js +9 -11
- package/index.js.map +1 -1
- package/package.json +9 -3
- package/{utilityTypes-NWbtoFu5.d.cts → utilityTypes-D53GCmPw.d.cts} +219 -81
- package/{utilityTypes-NWbtoFu5.d.ts → utilityTypes-D53GCmPw.d.ts} +219 -81
- package/chunk-6N2XUXQX.js +0 -2
- package/chunk-6N2XUXQX.js.map +0 -1
- package/chunk-W7MD3ZVB.cjs +0 -2
- package/chunk-W7MD3ZVB.cjs.map +0 -1
@@ -0,0 +1,4 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var Ee=Object.defineProperty,Pe=Object.defineProperties;var _e=Object.getOwnPropertyDescriptors;var Ve=Object.getOwnPropertySymbols;var Me=Object.prototype.hasOwnProperty,Oe=Object.prototype.propertyIsEnumerable;var ae=(e,t,n)=>t in e?Ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vt= exports.a =(e,t)=>{for(var n in t||(t={}))Me.call(t,n)&&ae(e,n,t[n]);if(Ve)for(var n of Ve(t))Oe.call(t,n)&&ae(e,n,t[n]);return e},kt= exports.b =(e,t)=>Pe(e,_e(t));var a=(e,t,n)=>(ae(e,typeof t!="symbol"?t+"":t,n),n);var _typedbinary = require('typed-binary'); var _typedbinary2 = _interopRequireDefault(_typedbinary);var se="Invariant failed";function Be(e,t){if(e)return;throw new Error(se)}var ke=class e extends Error{constructor(n,r){let o=r.map(s=>`- ${s}`);o.length>20&&(o=[...o.slice(0,11),"...",...o.slice(-10)]);super(`Resolution of the following tree failed:
|
2
|
+
${o.join(`
|
3
|
+
`)}`);this.cause=n;this.trace=r;Object.setPrototypeOf(this,e.prototype)}appendToTrace(n){let r=[n,...this.trace];return new e(this.cause,r)}},Ae= exports.u =class e extends Error{constructor(n){super(`Missing value for '${n}'`);this.slot=n;Object.setPrototypeOf(this,e.prototype)}},De= exports.v =class e extends Error{constructor(t){var n;super(`Buffer '${(n=t.label)!=null?n:"<unnamed>"}' is not bindable as a uniform. Use .$usage('uniform') to allow it.`),Object.setPrototypeOf(this,e.prototype)}};var Fe=class e extends Error{constructor(t){super(`Bind group was not provided for '${t!=null?t:"<unnamed>"}' layout.`),Object.setPrototypeOf(this,e.prototype)}};var Z=null;function Bt(e,t){Be(Z===null,"Cannot nest context providers"),Z=e;try{return t()}finally{Z=null}}var g=()=>Z!==null;var $e={type:"bool"},Re=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.A =Object.assign(Re,{type:"u32"}),Ue=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 t=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,t))},R= exports.B =Object.assign(Ue,{type:"i32"}),je=e=>{if(g())return`f32(${e})`;if(typeof e=="boolean")return e?1:0;let t=new Float32Array(1);return t[0]=e,t[0]},p= exports.C =Object.assign(je,{type:"f32"}),Ge=e=>{if(g())return`f16(${e})`;if(typeof e=="boolean")return e?1:0;let t=new ArrayBuffer(2);return _typedbinary2.default.f16.write(new _typedbinary2.default.BufferWriter(t),e),_typedbinary2.default.f16.read(new _typedbinary2.default.BufferReader(t))},Ke= exports.D =Object.assign(Ge,{type:"f16"});var He=["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 U(e){return He.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 Je(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 ue(e){return(e==null?void 0:e.type)==="@builtin"}function w(e){return(e==null?void 0:e.type)==="decorated"}var Qe=e=>new le(e),le=class{constructor(t){this.propTypes=t;a(this,"_label");a(this,"type","struct");a(this,"~repr");a(this,"~exotic")}get label(){return this._label}$name(t){return this._label=t,this}};var z=(e,t)=>{let n=t-1,r=~n;return e&n?(e&r)+t:e};var Se=["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 Xe=["loose-struct","loose-array","loose-decorated",...Se];function te(e){return Xe.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 T(e){return(e==null?void 0:e.type)==="loose-decorated"}function k(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(K))==null?void 0:n.value}function Ce(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(H))==null?void 0:n.value}function Mt(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(ie))==null?void 0:n.value}function Ye(e){return U(e)||te(e)}function c(e){let t={"~repr":void 0,type:e.type};return Object.assign((...r)=>{var s;let o=r;if(g())return`${t.type}(${o.join(", ")})`;if(o.length<=1)return e.makeFromScalar((s=o[0])!=null?s:0);if(o.length===e.length)return e.make(...o);throw new Error(`'${e.type}' constructor called with invalid number of arguments.`)},t)}var A=class{constructor(t,n){this.x=t;this.y=n;a(this,"length",2)}*[Symbol.iterator](){yield this.x,yield this.y}get 0(){return this.x}get 1(){return this.y}set 0(t){this.x=t}set 1(t){this.y=t}resolve(){return`${this.kind}(${this.x}, ${this.y})`}},D=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2f")}make2(n,r){return new e(n,r)}make3(n,r,o){return new W(n,r,o)}make4(n,r,o,s){return new P(n,r,o,s)}},F=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2h")}make2(n,r){return new e(n,r)}make3(n,r,o){return new I(n,r,o)}make4(n,r,o,s){return new _(n,r,o,s)}},B=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2i")}make2(n,r){return new e(n,r)}make3(n,r,o){return new L(n,r,o)}make4(n,r,o,s){return new M(n,r,o,s)}},S=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2u")}make2(n,r){return new e(n,r)}make3(n,r,o){return new N(n,r,o)}make4(n,r,o,s){return new O(n,r,o,s)}},C=class{constructor(t,n,r){this.x=t;this.y=n;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(t){this.x=t}set 1(t){this.y=t}set 2(t){this.z=t}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z})`}},W=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3f")}make2(n,r){return new D(n,r)}make3(n,r,o){return new e(n,r,o)}make4(n,r,o,s){return new P(n,r,o,s)}},I=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3h")}make2(n,r){return new F(n,r)}make3(n,r,o){return new e(n,r,o)}make4(n,r,o,s){return new _(n,r,o,s)}},L=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3i")}make2(n,r){return new B(n,r)}make3(n,r,o){return new e(n,r,o)}make4(n,r,o,s){return new M(n,r,o,s)}},N=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3u")}make2(n,r){return new S(n,r)}make3(n,r,o){return new e(n,r,o)}make4(n,r,o,s){return new O(n,r,o,s)}},E=class{constructor(t,n,r,o){this.x=t;this.y=n;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(t){this.x=t}set 1(t){this.y=t}set 2(t){this.z=t}set 3(t){this.w=t}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(n,r){return new D(n,r)}make3(n,r,o){return new W(n,r,o)}make4(n,r,o,s){return new e(n,r,o,s)}},_=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4h")}make2(n,r){return new F(n,r)}make3(n,r,o){return new I(n,r,o)}make4(n,r,o,s){return new e(n,r,o,s)}},M=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4i")}make2(n,r){return new B(n,r)}make3(n,r,o){return new L(n,r,o)}make4(n,r,o,s){return new e(n,r,o,s)}},O=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4u")}make2(n,r){return new S(n,r)}make3(n,r,o){return new N(n,r,o)}make4(n,r,o,s){return new e(n,r,o,s)}},u={get:(e,t)=>{if(typeof t=="symbol"||!Number.isNaN(Number.parseInt(t)))return Reflect.get(e,t);let n=e,r=new Array(t.length),o=0;for(let s of t){switch(s){case"x":r[o]=n.x;break;case"y":r[o]=n.y;break;case"z":r[o]=n.z;break;case"w":r[o]=n.w;break;default:return Reflect.get(n,t)}o++}return t.length===4?new Proxy(n.make4(r[0],r[1],r[2],r[3]),u):t.length===3?new Proxy(n.make3(r[0],r[1],r[2]),u):t.length===2?new Proxy(n.make2(r[0],r[1]),u):Reflect.get(e,t)}},b= exports.E =c({type:"vec2f",length:2,make:(e,t)=>new Proxy(new D(e,t),u),makeFromScalar:e=>new Proxy(new D(e,e),u)}),Ze= exports.F =c({type:"vec2h",length:2,make:(e,t)=>new Proxy(new F(e,t),u),makeFromScalar:e=>new Proxy(new F(e,e),u)}),J= exports.G =c({type:"vec2i",length:2,make:(e,t)=>new Proxy(new B(e,t),u),makeFromScalar:e=>new Proxy(new B(e,e),u)}),q= exports.H =c({type:"vec2u",length:2,make:(e,t)=>new Proxy(new S(e,t),u),makeFromScalar:e=>new Proxy(new S(e,e),u)}),Q= exports.I =c({type:"vec3f",length:3,make:(e,t,n)=>new Proxy(new W(e,t,n),u),makeFromScalar:e=>new Proxy(new W(e,e,e),u)}),et= exports.J =c({type:"vec3h",length:3,make:(e,t,n)=>new Proxy(new I(e,t,n),u),makeFromScalar:e=>new Proxy(new I(e,e,e),u)}),ye= exports.K =c({type:"vec3i",length:3,make:(e,t,n)=>new Proxy(new L(e,t,n),u),makeFromScalar:e=>new Proxy(new L(e,e,e),u)}),v= exports.L =c({type:"vec3u",length:3,make:(e,t,n)=>new Proxy(new N(e,t,n),u),makeFromScalar:e=>new Proxy(new N(e,e,e),u)}),y= exports.M =c({type:"vec4f",length:4,make:(e,t,n,r)=>new Proxy(new P(e,t,n,r),u),makeFromScalar:e=>new Proxy(new P(e,e,e,e),u)}),tt= exports.N =c({type:"vec4h",length:4,make:(e,t,n,r)=>new Proxy(new _(e,t,n,r),u),makeFromScalar:e=>new Proxy(new _(e,e,e,e),u)}),X= exports.O =c({type:"vec4i",length:4,make:(e,t,n,r)=>new Proxy(new M(e,t,n,r),u),makeFromScalar:e=>new Proxy(new M(e,e,e,e),u)}),Y= exports.P =c({length:4,type:"vec4u",make:(e,t,n,r)=>new Proxy(new O(e,t,n,r),u),makeFromScalar:e=>new Proxy(new O(e,e,e,e),u)});var i=class{constructor(t){this.type=t;a(this,"~repr")}},nt={uint8:m,uint8x2:q,uint8x4:Y,sint8:R,sint8x2:J,sint8x4:X,unorm8:p,unorm8x2:b,unorm8x4:y,snorm8:p,snorm8x2:b,snorm8x4:y,uint16:m,uint16x2:q,uint16x4:Y,sint16:R,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:R,sint32x2:J,sint32x3:ye,sint32x4:X,"unorm10-10-10-2":y,"unorm8x4-bgra":y},We= exports.Q =Object.keys(nt),Kt= exports.R =new i("uint8"),Ht= exports.S =new i("uint8x2"),Jt= exports.T =new i("uint8x4"),qt= exports.U =new i("sint8"),Qt= exports.V =new i("sint8x2"),Xt= exports.W =new i("sint8x4"),Yt= exports.X =new i("unorm8"),Zt= exports.Y =new i("unorm8x2"),en= exports.Z =new i("unorm8x4"),tn= exports._ =new i("snorm8"),nn= exports.$ =new i("snorm8x2"),rn= exports.aa =new i("snorm8x4"),on= exports.ba =new i("uint16"),an= exports.ca =new i("uint16x2"),sn= exports.da =new i("uint16x4"),un= exports.ea =new i("sint16"),ln= exports.fa =new i("sint16x2"),yn= exports.ga =new i("sint16x4"),xn= exports.ha =new i("unorm16"),mn= exports.ia =new i("unorm16x2"),cn= exports.ja =new i("unorm16x4"),pn= exports.ka =new i("snorm16"),dn= exports.la =new i("snorm16x2"),fn= exports.ma =new i("snorm16x4"),Tn= exports.na =new i("float16"),bn= exports.oa =new i("float16x2"),wn= exports.pa =new i("float16x4"),vn= exports.qa =new i("float32"),gn= exports.ra =new i("float32x2"),zn= exports.sa =new i("float32x3"),hn= exports.ta =new i("float32x4"),Vn= exports.ua =new i("uint32"),kn= exports.va =new i("uint32x2"),An= exports.wa =new i("uint32x3"),Dn= exports.xa =new i("uint32x4"),Fn= exports.ya =new i("sint32"),Bn= exports.za =new i("sint32x2"),Sn= exports.Aa =new i("sint32x3"),Cn= exports.Ba =new i("sint32x4"),Wn= exports.Ca =new i("unorm10-10-10-2"),In= exports.Da =new i("unorm8x4-bgra");var rt={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 ot(e){var r,o,s;let t=e==null?void 0:e.type,n=rt[t];if(n!==void 0)return n;if(G(e))return Object.values(e.propTypes).map(d).reduce((x,he)=>x>he?x:he);if(j(e))return d(e.elementType);if(V(e)){let x=Object.values(e.propTypes)[0];return x&&(r=k(x))!=null?r:1}if(h(e))return(o=k(e.elementType))!=null?o:1;if(w(e)||T(e))return(s=k(e))!=null?s:d(e.inner);if(We.includes(t))return 1;throw new Error(`Cannot determine alignment of data: ${JSON.stringify(e)}`)}function at(e){var t,n;if(V(e)){let r=Object.values(e.propTypes)[0];return r?$(r):1}return h(e)?$(e.elementType):T(e)?(t=k(e))!=null?t:$(e.inner):(n=k(e))!=null?n:1}var Ie=new WeakMap,Le=new WeakMap;function d(e){let t=Ie.get(e);return t===void 0&&(t=ot(e),Ie.set(e,t)),t}function $(e){let t=Le.get(e);return t===void 0&&(t=at(e),Le.set(e,t)),t}function st(e){return d(e)}var it={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 ut(e){let t=0;for(let n of Object.values(e.propTypes)){if(Number.isNaN(t))throw new Error("Only the last property of a struct can be unbounded");if(t=z(t,d(n)),t+=f(n),Number.isNaN(t)&&n.type!=="array")throw new Error("Cannot nest unbounded struct within another struct")}return z(t,d(e))}function lt(e){let t=0;for(let n of Object.values(e.propTypes)){let r=$(n);t=z(t,r),t+=f(n)}return t}function yt(e){var n;let t=it[e==null?void 0:e.type];if(t!==void 0)return t;if(G(e))return ut(e);if(V(e))return lt(e);if(j(e)){if(e.elementCount===0)return Number.NaN;let r=d(e.elementType);return z(f(e.elementType),r)*e.elementCount}if(h(e)){let r=$(e.elementType);return z(f(e.elementType),r)*e.elementCount}if(w(e)||T(e))return(n=Ce(e))!=null?n:f(e.inner);throw new Error(`Cannot determine size of data: ${e}`)}var Ne=new WeakMap;function f(e){let t=Ne.get(e);return t===void 0&&(t=yt(e),Ne.set(e,t)),t}function xt(e){return f(e)}var me=(e,t)=>new xe(e,t),xe=class{constructor(t,n){this.elementType=t;this.elementCount=n;a(this,"type","array");a(this,"~repr");a(this,"~exotic");if(Number.isNaN(f(t)))throw new Error("Cannot nest runtime sized arrays.")}};var mt=(e,t)=>new ce(e,t),ce=class{constructor(t,n){this.elementType=t;this.elementCount=n;a(this,"type","loose-array");a(this,"~repr")}};var ct=e=>new pe(e),pe=class{constructor(t){this.propTypes=t;a(this,"type","loose-struct");a(this,"~repr")}};function ge(e){let t={"~repr":void 0,type:e.type,label:e.type};return Object.assign((...r)=>{let o=[];for(let s of r)if(typeof s=="number")o.push(s);else for(let x=0;x<s.length;++x)o.push(s[x]);for(let s=o.length;s<e.columns*e.rows;++s)o.push(0);return e.makeFromElements(...o)},t)}var de=class{constructor(...t){a(this,"columns");a(this,"length",4);this.columns=[this.makeColumn(t[0],t[1]),this.makeColumn(t[2],t[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(t){this.columns[0].x=t}set 1(t){this.columns[0].y=t}set 2(t){this.columns[1].x=t}set 3(t){this.columns[1].y=t}},fe=class extends de{constructor(){super(...arguments);a(this,"kind","mat2x2f")}makeColumn(n,r){return b(n,r)}},Te=class{constructor(...t){a(this,"columns");a(this,"length",12);this.columns=[this.makeColumn(t[0],t[1],t[2]),this.makeColumn(t[3],t[4],t[5]),this.makeColumn(t[6],t[7],t[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(t){this.columns[0].x=t}set 1(t){this.columns[0].y=t}set 2(t){this.columns[0].z=t}set 3(t){}set 4(t){this.columns[1].x=t}set 5(t){this.columns[1].y=t}set 6(t){this.columns[1].z=t}set 7(t){}set 8(t){this.columns[2].x=t}set 9(t){this.columns[2].y=t}set 10(t){this.columns[2].z=t}set 11(t){}},be=class extends Te{constructor(){super(...arguments);a(this,"kind","mat3x3f")}makeColumn(n,r,o){return Q(n,r,o)}},we=class{constructor(...t){a(this,"columns");a(this,"length",16);this.columns=[this.makeColumn(t[0],t[1],t[2],t[3]),this.makeColumn(t[4],t[5],t[6],t[7]),this.makeColumn(t[8],t[9],t[10],t[11]),this.makeColumn(t[12],t[13],t[14],t[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(t){this.columns[0].x=t}set 1(t){this.columns[0].y=t}set 2(t){this.columns[0].z=t}set 3(t){this.columns[0].w=t}set 4(t){this.columns[1].x=t}set 5(t){this.columns[1].y=t}set 6(t){this.columns[1].z=t}set 7(t){this.columns[1].w=t}set 8(t){this.columns[2].x=t}set 9(t){this.columns[2].y=t}set 10(t){this.columns[2].z=t}set 11(t){this.columns[2].w=t}set 12(t){this.columns[3].x=t}set 13(t){this.columns[3].y=t}set 14(t){this.columns[3].z=t}set 15(t){this.columns[3].w=t}},ve=class extends we{constructor(){super(...arguments);a(this,"kind","mat4x4f")}makeColumn(n,r,o,s){return y(n,r,o,s)}},pt= exports.Sa =ge({type:"mat2x2f",rows:2,columns:2,makeFromElements:(...e)=>new fe(...e)}),dt= exports.Ta =ge({type:"mat3x3f",rows:3,columns:3,makeFromElements:(...e)=>new be(...e)}),ft= exports.Ua =ge({type:"mat4x4f",rows:4,columns:4,makeFromElements:(...e)=>new ve(...e)});function Tt(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((t,n)=>e[n])}function bt(e){return new ze(e)}var ze=class{constructor(t){this.inner=t;a(this,"type","atomic");a(this,"~repr")}};function l(e,t){return w(e)?new re(e.inner,[t,...e.attribs]):T(e)?new oe(e.inner,[t,...e.attribs]):te(e)?new oe(e,[t]):new re(e,[t])}function wt(e,t){return l(t,{type:"@align",value:e})}function vt(e,t){return l(t,{type:"@size",value:e})}function gt(e,t){return l(t,{type:"@location",value:e})}function zt(e){return(w(e)||T(e))&&e.attribs.find(ue)!==void 0}function ir(e){return!w(e)&&!T(e)?"":e.attribs.map(t=>`${t.type}(${t.value}) `).join("")}var ne=class{constructor(t,n){this.inner=t;this.attribs=n;a(this,"~repr");var s,x;let r=(s=n.find(K))==null?void 0:s.value,o=(x=n.find(H))==null?void 0:x.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(U(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<f(this.inner))throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${o}, expected at least: ${f(this.inner)}.`);if(o<=0)throw new Error(`Custom data size must be a positive number. Got: ${o}.`)}}},re=class extends ne{constructor(){super(...arguments);a(this,"type","decorated")}},oe=class extends ne{constructor(){super(...arguments);a(this,"type","loose-decorated")}};var ht={vertexIndex:l(m,{type:"@builtin",value:"vertex_index"}),instanceIndex:l(m,{type:"@builtin",value:"instance_index"}),position:l(y,{type:"@builtin",value:"position"}),clipDistances:l(me(m,8),{type:"@builtin",value:"clip_distances"}),frontFacing:l(p,{type:"@builtin",value:"front_facing"}),fragDepth:l(p,{type:"@builtin",value:"frag_depth"}),sampleIndex:l(m,{type:"@builtin",value:"sample_index"}),sampleMask:l(m,{type:"@builtin",value:"sample_mask"}),localInvocationId:l(v,{type:"@builtin",value:"local_invocation_id"}),localInvocationIndex:l(m,{type:"@builtin",value:"local_invocation_index"}),globalInvocationId:l(v,{type:"@builtin",value:"global_invocation_id"}),workgroupId:l(v,{type:"@builtin",value:"workgroup_id"}),numWorkgroups:l(v,{type:"@builtin",value:"num_workgroups"})};exports.a = Vt; exports.b = kt; exports.c = a; exports.d = U; exports.e = j; exports.f = G; exports.g = Je; exports.h = K; exports.i = H; exports.j = ie; exports.k = ue; exports.l = w; exports.m = te; exports.n = h; exports.o = V; exports.p = T; exports.q = Mt; exports.r = Ye; exports.s = Be; exports.t = ke; exports.u = Ae; exports.v = De; exports.w = Fe; exports.x = Bt; exports.y = g; exports.z = $e; exports.A = m; exports.B = R; exports.C = p; exports.D = Ke; exports.E = b; exports.F = Ze; exports.G = J; exports.H = q; exports.I = Q; exports.J = et; exports.K = ye; exports.L = v; exports.M = y; exports.N = tt; exports.O = X; exports.P = Y; exports.Q = We; exports.R = Kt; exports.S = Ht; exports.T = Jt; exports.U = qt; exports.V = Qt; exports.W = Xt; exports.X = Yt; exports.Y = Zt; exports.Z = en; exports._ = tn; exports.$ = nn; exports.aa = rn; exports.ba = on; exports.ca = an; exports.da = sn; exports.ea = un; exports.fa = ln; exports.ga = yn; exports.ha = xn; exports.ia = mn; exports.ja = cn; exports.ka = pn; exports.la = dn; exports.ma = fn; exports.na = Tn; exports.oa = bn; exports.pa = wn; exports.qa = vn; exports.ra = gn; exports.sa = zn; exports.ta = hn; exports.ua = Vn; exports.va = kn; exports.wa = An; exports.xa = Dn; exports.ya = Fn; exports.za = Bn; exports.Aa = Sn; exports.Ba = Cn; exports.Ca = Wn; exports.Da = In; exports.Ea = d; exports.Fa = $; exports.Ga = st; exports.Ha = f; exports.Ia = xt; exports.Ja = wt; exports.Ka = vt; exports.La = gt; exports.Ma = zt; exports.Na = ir; exports.Oa = Qe; exports.Pa = me; exports.Qa = mt; exports.Ra = ct; exports.Sa = pt; exports.Ta = dt; exports.Ua = ft; exports.Va = Tt; exports.Wa = bt; exports.Xa = ht;
|
4
|
+
//# sourceMappingURL=chunk-3A2SULTE.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/data/numeric.ts","../src/errors.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","prefix","invariant","condition","message","ResolutionError","_ResolutionError","cause","trace","entries","ancestor","newTrace","MissingSlotValueError","_MissingSlotValueError","slot","NotUniformError","_NotUniformError","value","_a","MissingBindGroupError","_MissingBindGroupError","layoutLabel","resolutionCtx","provideCtx","ctx","callback","inGPUMode","bool","u32Cast","v","u32","i32Cast","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","_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","import type { TgpuBuffer } from './core/buffer/buffer';\nimport type { TgpuDerived, TgpuSlot } from './core/slot/slotTypes';\nimport type { AnyData } from './data/dataTypes';\nimport type { AnyWgslData } from './data/wgslTypes';\nimport type { TgpuResolvable } from './types';\n\nconst prefix = 'Invariant failed';\n\n/**\n * Inspired by: https://github.com/alexreardon/tiny-invariant/blob/master/src/tiny-invariant.ts\n */\nexport function invariant(\n condition: unknown,\n message?: string | (() => string),\n): asserts condition {\n if (condition) {\n // Condition passed\n return;\n }\n\n // In production we strip the message but still throw\n if (process.env.NODE_ENV === 'production') {\n throw new Error(prefix);\n }\n\n // When not in production we allow the message to pass through\n // *This block will be removed in production builds*\n\n const provided = typeof message === 'function' ? message() : message;\n\n // Options:\n // 1. message provided: `${prefix}: ${provided}`\n // 2. message not provided: prefix\n const value = provided ? `${prefix}: ${provided}` : prefix;\n throw new Error(value);\n}\n\n/**\n * An error that happens during resolution of WGSL code.\n * Contains a trace of all ancestor resolvables in\n * which this error originated.\n *\n * @category Errors\n */\nexport class ResolutionError extends Error {\n constructor(\n public readonly cause: unknown,\n public readonly trace: (\n | TgpuResolvable\n | TgpuSlot<unknown>\n | TgpuDerived<unknown>\n | AnyWgslData\n )[],\n ) {\n let entries = trace.map((ancestor) => `- ${ancestor}`);\n\n // Showing only the root and leaf nodes.\n if (entries.length > 20) {\n entries = [...entries.slice(0, 11), '...', ...entries.slice(-10)];\n }\n\n super(`Resolution of the following tree failed: \\n${entries.join('\\n')}`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, ResolutionError.prototype);\n }\n\n appendToTrace(\n ancestor: TgpuResolvable | TgpuDerived<unknown> | AnyWgslData,\n ): ResolutionError {\n const newTrace = [ancestor, ...this.trace];\n\n return new ResolutionError(this.cause, newTrace);\n }\n}\n\n/**\n * @category Errors\n */\nexport class MissingSlotValueError extends Error {\n constructor(public readonly slot: TgpuSlot<unknown>) {\n super(`Missing value for '${slot}'`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingSlotValueError.prototype);\n }\n}\n\n/**\n * @category Errors\n */\nexport class NotUniformError extends Error {\n constructor(value: TgpuBuffer<AnyData>) {\n super(\n `Buffer '${value.label ?? '<unnamed>'}' is not bindable as a uniform. Use .$usage('uniform') to allow it.`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, NotUniformError.prototype);\n }\n}\n\nexport class MissingLinksError extends Error {\n constructor(fnLabel: string | undefined, externalNames: string[]) {\n super(\n `The function '${fnLabel ?? '<unnamed>'}' is missing links to the following external values: ${externalNames}.`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingLinksError.prototype);\n }\n}\n\nexport class MissingBindGroupError extends Error {\n constructor(layoutLabel: string | undefined) {\n super(\n `Bind group was not provided for '${layoutLabel ?? '<unnamed>'}' layout.`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingBindGroupError.prototype);\n }\n}\n","import { invariant } from './errors';\nimport type { ResolutionCtx } from './types';\n\nlet resolutionCtx: ResolutionCtx | null = null;\n\nexport function provideCtx<T>(ctx: ResolutionCtx, callback: () => T): T {\n invariant(resolutionCtx === null, 'Cannot nest context providers');\n\n resolutionCtx = ctx;\n try {\n return callback();\n } finally {\n resolutionCtx = null;\n }\n}\n\nexport function getResolutionCtx(): ResolutionCtx | null {\n return resolutionCtx;\n}\n\nexport const inGPUMode = () => resolutionCtx !== null;\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,4 @@
|
|
1
|
+
var Ee=Object.defineProperty,Pe=Object.defineProperties;var _e=Object.getOwnPropertyDescriptors;var Ve=Object.getOwnPropertySymbols;var Me=Object.prototype.hasOwnProperty,Oe=Object.prototype.propertyIsEnumerable;var ae=(e,t,n)=>t in e?Ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vt=(e,t)=>{for(var n in t||(t={}))Me.call(t,n)&&ae(e,n,t[n]);if(Ve)for(var n of Ve(t))Oe.call(t,n)&&ae(e,n,t[n]);return e},kt=(e,t)=>Pe(e,_e(t));var a=(e,t,n)=>(ae(e,typeof t!="symbol"?t+"":t,n),n);import ee from"typed-binary";var se="Invariant failed";function Be(e,t){if(e)return;throw new Error(se)}var ke=class e extends Error{constructor(n,r){let o=r.map(s=>`- ${s}`);o.length>20&&(o=[...o.slice(0,11),"...",...o.slice(-10)]);super(`Resolution of the following tree failed:
|
2
|
+
${o.join(`
|
3
|
+
`)}`);this.cause=n;this.trace=r;Object.setPrototypeOf(this,e.prototype)}appendToTrace(n){let r=[n,...this.trace];return new e(this.cause,r)}},Ae=class e extends Error{constructor(n){super(`Missing value for '${n}'`);this.slot=n;Object.setPrototypeOf(this,e.prototype)}},De=class e extends Error{constructor(t){var n;super(`Buffer '${(n=t.label)!=null?n:"<unnamed>"}' is not bindable as a uniform. Use .$usage('uniform') to allow it.`),Object.setPrototypeOf(this,e.prototype)}};var Fe=class e extends Error{constructor(t){super(`Bind group was not provided for '${t!=null?t:"<unnamed>"}' layout.`),Object.setPrototypeOf(this,e.prototype)}};var Z=null;function Bt(e,t){Be(Z===null,"Cannot nest context providers"),Z=e;try{return t()}finally{Z=null}}var g=()=>Z!==null;var $e={type:"bool"},Re=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(Re,{type:"u32"}),Ue=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 t=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,t))},R=Object.assign(Ue,{type:"i32"}),je=e=>{if(g())return`f32(${e})`;if(typeof e=="boolean")return e?1:0;let t=new Float32Array(1);return t[0]=e,t[0]},p=Object.assign(je,{type:"f32"}),Ge=e=>{if(g())return`f16(${e})`;if(typeof e=="boolean")return e?1:0;let t=new ArrayBuffer(2);return ee.f16.write(new ee.BufferWriter(t),e),ee.f16.read(new ee.BufferReader(t))},Ke=Object.assign(Ge,{type:"f16"});var He=["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 U(e){return He.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 Je(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 ue(e){return(e==null?void 0:e.type)==="@builtin"}function w(e){return(e==null?void 0:e.type)==="decorated"}var Qe=e=>new le(e),le=class{constructor(t){this.propTypes=t;a(this,"_label");a(this,"type","struct");a(this,"~repr");a(this,"~exotic")}get label(){return this._label}$name(t){return this._label=t,this}};var z=(e,t)=>{let n=t-1,r=~n;return e&n?(e&r)+t:e};var Se=["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 Xe=["loose-struct","loose-array","loose-decorated",...Se];function te(e){return Xe.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 T(e){return(e==null?void 0:e.type)==="loose-decorated"}function k(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(K))==null?void 0:n.value}function Ce(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(H))==null?void 0:n.value}function Mt(e){var t,n;return(n=(t=e.attribs)==null?void 0:t.find(ie))==null?void 0:n.value}function Ye(e){return U(e)||te(e)}function c(e){let t={"~repr":void 0,type:e.type};return Object.assign((...r)=>{var s;let o=r;if(g())return`${t.type}(${o.join(", ")})`;if(o.length<=1)return e.makeFromScalar((s=o[0])!=null?s:0);if(o.length===e.length)return e.make(...o);throw new Error(`'${e.type}' constructor called with invalid number of arguments.`)},t)}var A=class{constructor(t,n){this.x=t;this.y=n;a(this,"length",2)}*[Symbol.iterator](){yield this.x,yield this.y}get 0(){return this.x}get 1(){return this.y}set 0(t){this.x=t}set 1(t){this.y=t}resolve(){return`${this.kind}(${this.x}, ${this.y})`}},D=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2f")}make2(n,r){return new e(n,r)}make3(n,r,o){return new W(n,r,o)}make4(n,r,o,s){return new P(n,r,o,s)}},F=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2h")}make2(n,r){return new e(n,r)}make3(n,r,o){return new I(n,r,o)}make4(n,r,o,s){return new _(n,r,o,s)}},B=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2i")}make2(n,r){return new e(n,r)}make3(n,r,o){return new L(n,r,o)}make4(n,r,o,s){return new M(n,r,o,s)}},S=class e extends A{constructor(){super(...arguments);a(this,"kind","vec2u")}make2(n,r){return new e(n,r)}make3(n,r,o){return new N(n,r,o)}make4(n,r,o,s){return new O(n,r,o,s)}},C=class{constructor(t,n,r){this.x=t;this.y=n;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(t){this.x=t}set 1(t){this.y=t}set 2(t){this.z=t}resolve(){return`${this.kind}(${this.x}, ${this.y}, ${this.z})`}},W=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3f")}make2(n,r){return new D(n,r)}make3(n,r,o){return new e(n,r,o)}make4(n,r,o,s){return new P(n,r,o,s)}},I=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3h")}make2(n,r){return new F(n,r)}make3(n,r,o){return new e(n,r,o)}make4(n,r,o,s){return new _(n,r,o,s)}},L=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3i")}make2(n,r){return new B(n,r)}make3(n,r,o){return new e(n,r,o)}make4(n,r,o,s){return new M(n,r,o,s)}},N=class e extends C{constructor(){super(...arguments);a(this,"kind","vec3u")}make2(n,r){return new S(n,r)}make3(n,r,o){return new e(n,r,o)}make4(n,r,o,s){return new O(n,r,o,s)}},E=class{constructor(t,n,r,o){this.x=t;this.y=n;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(t){this.x=t}set 1(t){this.y=t}set 2(t){this.z=t}set 3(t){this.w=t}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(n,r){return new D(n,r)}make3(n,r,o){return new W(n,r,o)}make4(n,r,o,s){return new e(n,r,o,s)}},_=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4h")}make2(n,r){return new F(n,r)}make3(n,r,o){return new I(n,r,o)}make4(n,r,o,s){return new e(n,r,o,s)}},M=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4i")}make2(n,r){return new B(n,r)}make3(n,r,o){return new L(n,r,o)}make4(n,r,o,s){return new e(n,r,o,s)}},O=class e extends E{constructor(){super(...arguments);a(this,"kind","vec4u")}make2(n,r){return new S(n,r)}make3(n,r,o){return new N(n,r,o)}make4(n,r,o,s){return new e(n,r,o,s)}},u={get:(e,t)=>{if(typeof t=="symbol"||!Number.isNaN(Number.parseInt(t)))return Reflect.get(e,t);let n=e,r=new Array(t.length),o=0;for(let s of t){switch(s){case"x":r[o]=n.x;break;case"y":r[o]=n.y;break;case"z":r[o]=n.z;break;case"w":r[o]=n.w;break;default:return Reflect.get(n,t)}o++}return t.length===4?new Proxy(n.make4(r[0],r[1],r[2],r[3]),u):t.length===3?new Proxy(n.make3(r[0],r[1],r[2]),u):t.length===2?new Proxy(n.make2(r[0],r[1]),u):Reflect.get(e,t)}},b=c({type:"vec2f",length:2,make:(e,t)=>new Proxy(new D(e,t),u),makeFromScalar:e=>new Proxy(new D(e,e),u)}),Ze=c({type:"vec2h",length:2,make:(e,t)=>new Proxy(new F(e,t),u),makeFromScalar:e=>new Proxy(new F(e,e),u)}),J=c({type:"vec2i",length:2,make:(e,t)=>new Proxy(new B(e,t),u),makeFromScalar:e=>new Proxy(new B(e,e),u)}),q=c({type:"vec2u",length:2,make:(e,t)=>new Proxy(new S(e,t),u),makeFromScalar:e=>new Proxy(new S(e,e),u)}),Q=c({type:"vec3f",length:3,make:(e,t,n)=>new Proxy(new W(e,t,n),u),makeFromScalar:e=>new Proxy(new W(e,e,e),u)}),et=c({type:"vec3h",length:3,make:(e,t,n)=>new Proxy(new I(e,t,n),u),makeFromScalar:e=>new Proxy(new I(e,e,e),u)}),ye=c({type:"vec3i",length:3,make:(e,t,n)=>new Proxy(new L(e,t,n),u),makeFromScalar:e=>new Proxy(new L(e,e,e),u)}),v=c({type:"vec3u",length:3,make:(e,t,n)=>new Proxy(new N(e,t,n),u),makeFromScalar:e=>new Proxy(new N(e,e,e),u)}),y=c({type:"vec4f",length:4,make:(e,t,n,r)=>new Proxy(new P(e,t,n,r),u),makeFromScalar:e=>new Proxy(new P(e,e,e,e),u)}),tt=c({type:"vec4h",length:4,make:(e,t,n,r)=>new Proxy(new _(e,t,n,r),u),makeFromScalar:e=>new Proxy(new _(e,e,e,e),u)}),X=c({type:"vec4i",length:4,make:(e,t,n,r)=>new Proxy(new M(e,t,n,r),u),makeFromScalar:e=>new Proxy(new M(e,e,e,e),u)}),Y=c({length:4,type:"vec4u",make:(e,t,n,r)=>new Proxy(new O(e,t,n,r),u),makeFromScalar:e=>new Proxy(new O(e,e,e,e),u)});var i=class{constructor(t){this.type=t;a(this,"~repr")}},nt={uint8:m,uint8x2:q,uint8x4:Y,sint8:R,sint8x2:J,sint8x4:X,unorm8:p,unorm8x2:b,unorm8x4:y,snorm8:p,snorm8x2:b,snorm8x4:y,uint16:m,uint16x2:q,uint16x4:Y,sint16:R,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:R,sint32x2:J,sint32x3:ye,sint32x4:X,"unorm10-10-10-2":y,"unorm8x4-bgra":y},We=Object.keys(nt),Kt=new i("uint8"),Ht=new i("uint8x2"),Jt=new i("uint8x4"),qt=new i("sint8"),Qt=new i("sint8x2"),Xt=new i("sint8x4"),Yt=new i("unorm8"),Zt=new i("unorm8x2"),en=new i("unorm8x4"),tn=new i("snorm8"),nn=new i("snorm8x2"),rn=new i("snorm8x4"),on=new i("uint16"),an=new i("uint16x2"),sn=new i("uint16x4"),un=new i("sint16"),ln=new i("sint16x2"),yn=new i("sint16x4"),xn=new i("unorm16"),mn=new i("unorm16x2"),cn=new i("unorm16x4"),pn=new i("snorm16"),dn=new i("snorm16x2"),fn=new i("snorm16x4"),Tn=new i("float16"),bn=new i("float16x2"),wn=new i("float16x4"),vn=new i("float32"),gn=new i("float32x2"),zn=new i("float32x3"),hn=new i("float32x4"),Vn=new i("uint32"),kn=new i("uint32x2"),An=new i("uint32x3"),Dn=new i("uint32x4"),Fn=new i("sint32"),Bn=new i("sint32x2"),Sn=new i("sint32x3"),Cn=new i("sint32x4"),Wn=new i("unorm10-10-10-2"),In=new i("unorm8x4-bgra");var rt={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 ot(e){var r,o,s;let t=e==null?void 0:e.type,n=rt[t];if(n!==void 0)return n;if(G(e))return Object.values(e.propTypes).map(d).reduce((x,he)=>x>he?x:he);if(j(e))return d(e.elementType);if(V(e)){let x=Object.values(e.propTypes)[0];return x&&(r=k(x))!=null?r:1}if(h(e))return(o=k(e.elementType))!=null?o:1;if(w(e)||T(e))return(s=k(e))!=null?s:d(e.inner);if(We.includes(t))return 1;throw new Error(`Cannot determine alignment of data: ${JSON.stringify(e)}`)}function at(e){var t,n;if(V(e)){let r=Object.values(e.propTypes)[0];return r?$(r):1}return h(e)?$(e.elementType):T(e)?(t=k(e))!=null?t:$(e.inner):(n=k(e))!=null?n:1}var Ie=new WeakMap,Le=new WeakMap;function d(e){let t=Ie.get(e);return t===void 0&&(t=ot(e),Ie.set(e,t)),t}function $(e){let t=Le.get(e);return t===void 0&&(t=at(e),Le.set(e,t)),t}function st(e){return d(e)}var it={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 ut(e){let t=0;for(let n of Object.values(e.propTypes)){if(Number.isNaN(t))throw new Error("Only the last property of a struct can be unbounded");if(t=z(t,d(n)),t+=f(n),Number.isNaN(t)&&n.type!=="array")throw new Error("Cannot nest unbounded struct within another struct")}return z(t,d(e))}function lt(e){let t=0;for(let n of Object.values(e.propTypes)){let r=$(n);t=z(t,r),t+=f(n)}return t}function yt(e){var n;let t=it[e==null?void 0:e.type];if(t!==void 0)return t;if(G(e))return ut(e);if(V(e))return lt(e);if(j(e)){if(e.elementCount===0)return Number.NaN;let r=d(e.elementType);return z(f(e.elementType),r)*e.elementCount}if(h(e)){let r=$(e.elementType);return z(f(e.elementType),r)*e.elementCount}if(w(e)||T(e))return(n=Ce(e))!=null?n:f(e.inner);throw new Error(`Cannot determine size of data: ${e}`)}var Ne=new WeakMap;function f(e){let t=Ne.get(e);return t===void 0&&(t=yt(e),Ne.set(e,t)),t}function xt(e){return f(e)}var me=(e,t)=>new xe(e,t),xe=class{constructor(t,n){this.elementType=t;this.elementCount=n;a(this,"type","array");a(this,"~repr");a(this,"~exotic");if(Number.isNaN(f(t)))throw new Error("Cannot nest runtime sized arrays.")}};var mt=(e,t)=>new ce(e,t),ce=class{constructor(t,n){this.elementType=t;this.elementCount=n;a(this,"type","loose-array");a(this,"~repr")}};var ct=e=>new pe(e),pe=class{constructor(t){this.propTypes=t;a(this,"type","loose-struct");a(this,"~repr")}};function ge(e){let t={"~repr":void 0,type:e.type,label:e.type};return Object.assign((...r)=>{let o=[];for(let s of r)if(typeof s=="number")o.push(s);else for(let x=0;x<s.length;++x)o.push(s[x]);for(let s=o.length;s<e.columns*e.rows;++s)o.push(0);return e.makeFromElements(...o)},t)}var de=class{constructor(...t){a(this,"columns");a(this,"length",4);this.columns=[this.makeColumn(t[0],t[1]),this.makeColumn(t[2],t[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(t){this.columns[0].x=t}set 1(t){this.columns[0].y=t}set 2(t){this.columns[1].x=t}set 3(t){this.columns[1].y=t}},fe=class extends de{constructor(){super(...arguments);a(this,"kind","mat2x2f")}makeColumn(n,r){return b(n,r)}},Te=class{constructor(...t){a(this,"columns");a(this,"length",12);this.columns=[this.makeColumn(t[0],t[1],t[2]),this.makeColumn(t[3],t[4],t[5]),this.makeColumn(t[6],t[7],t[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(t){this.columns[0].x=t}set 1(t){this.columns[0].y=t}set 2(t){this.columns[0].z=t}set 3(t){}set 4(t){this.columns[1].x=t}set 5(t){this.columns[1].y=t}set 6(t){this.columns[1].z=t}set 7(t){}set 8(t){this.columns[2].x=t}set 9(t){this.columns[2].y=t}set 10(t){this.columns[2].z=t}set 11(t){}},be=class extends Te{constructor(){super(...arguments);a(this,"kind","mat3x3f")}makeColumn(n,r,o){return Q(n,r,o)}},we=class{constructor(...t){a(this,"columns");a(this,"length",16);this.columns=[this.makeColumn(t[0],t[1],t[2],t[3]),this.makeColumn(t[4],t[5],t[6],t[7]),this.makeColumn(t[8],t[9],t[10],t[11]),this.makeColumn(t[12],t[13],t[14],t[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(t){this.columns[0].x=t}set 1(t){this.columns[0].y=t}set 2(t){this.columns[0].z=t}set 3(t){this.columns[0].w=t}set 4(t){this.columns[1].x=t}set 5(t){this.columns[1].y=t}set 6(t){this.columns[1].z=t}set 7(t){this.columns[1].w=t}set 8(t){this.columns[2].x=t}set 9(t){this.columns[2].y=t}set 10(t){this.columns[2].z=t}set 11(t){this.columns[2].w=t}set 12(t){this.columns[3].x=t}set 13(t){this.columns[3].y=t}set 14(t){this.columns[3].z=t}set 15(t){this.columns[3].w=t}},ve=class extends we{constructor(){super(...arguments);a(this,"kind","mat4x4f")}makeColumn(n,r,o,s){return y(n,r,o,s)}},pt=ge({type:"mat2x2f",rows:2,columns:2,makeFromElements:(...e)=>new fe(...e)}),dt=ge({type:"mat3x3f",rows:3,columns:3,makeFromElements:(...e)=>new be(...e)}),ft=ge({type:"mat4x4f",rows:4,columns:4,makeFromElements:(...e)=>new ve(...e)});function Tt(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((t,n)=>e[n])}function bt(e){return new ze(e)}var ze=class{constructor(t){this.inner=t;a(this,"type","atomic");a(this,"~repr")}};function l(e,t){return w(e)?new re(e.inner,[t,...e.attribs]):T(e)?new oe(e.inner,[t,...e.attribs]):te(e)?new oe(e,[t]):new re(e,[t])}function wt(e,t){return l(t,{type:"@align",value:e})}function vt(e,t){return l(t,{type:"@size",value:e})}function gt(e,t){return l(t,{type:"@location",value:e})}function zt(e){return(w(e)||T(e))&&e.attribs.find(ue)!==void 0}function ir(e){return!w(e)&&!T(e)?"":e.attribs.map(t=>`${t.type}(${t.value}) `).join("")}var ne=class{constructor(t,n){this.inner=t;this.attribs=n;a(this,"~repr");var s,x;let r=(s=n.find(K))==null?void 0:s.value,o=(x=n.find(H))==null?void 0:x.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(U(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<f(this.inner))throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${o}, expected at least: ${f(this.inner)}.`);if(o<=0)throw new Error(`Custom data size must be a positive number. Got: ${o}.`)}}},re=class extends ne{constructor(){super(...arguments);a(this,"type","decorated")}},oe=class extends ne{constructor(){super(...arguments);a(this,"type","loose-decorated")}};var ht={vertexIndex:l(m,{type:"@builtin",value:"vertex_index"}),instanceIndex:l(m,{type:"@builtin",value:"instance_index"}),position:l(y,{type:"@builtin",value:"position"}),clipDistances:l(me(m,8),{type:"@builtin",value:"clip_distances"}),frontFacing:l(p,{type:"@builtin",value:"front_facing"}),fragDepth:l(p,{type:"@builtin",value:"frag_depth"}),sampleIndex:l(m,{type:"@builtin",value:"sample_index"}),sampleMask:l(m,{type:"@builtin",value:"sample_mask"}),localInvocationId:l(v,{type:"@builtin",value:"local_invocation_id"}),localInvocationIndex:l(m,{type:"@builtin",value:"local_invocation_index"}),globalInvocationId:l(v,{type:"@builtin",value:"global_invocation_id"}),workgroupId:l(v,{type:"@builtin",value:"workgroup_id"}),numWorkgroups:l(v,{type:"@builtin",value:"num_workgroups"})};export{Vt as a,kt as b,a as c,U as d,j as e,G as f,Je as g,K as h,H as i,ie as j,ue as k,w as l,te as m,h as n,V as o,T as p,Mt as q,Ye as r,Be as s,ke as t,Ae as u,De as v,Fe as w,Bt as x,g as y,$e as z,m as A,R as B,p as C,Ke as D,b as E,Ze as F,J as G,q as H,Q as I,et as J,ye as K,v as L,y as M,tt as N,X as O,Y as P,We as Q,Kt as R,Ht as S,Jt as T,qt as U,Qt as V,Xt as W,Yt as X,Zt as Y,en as Z,tn as _,nn as $,rn as aa,on as ba,an as ca,sn as da,un as ea,ln as fa,yn as ga,xn as ha,mn as ia,cn as ja,pn as ka,dn as la,fn as ma,Tn as na,bn as oa,wn as pa,vn as qa,gn as ra,zn as sa,hn as ta,Vn as ua,kn as va,An as wa,Dn as xa,Fn as ya,Bn as za,Sn as Aa,Cn as Ba,Wn as Ca,In as Da,d as Ea,$ as Fa,st as Ga,f as Ha,xt as Ia,wt as Ja,vt as Ka,gt as La,zt as Ma,ir as Na,Qe as Oa,me as Pa,mt as Qa,ct as Ra,pt as Sa,dt as Ta,ft as Ua,Tt as Va,bt as Wa,ht as Xa};
|
4
|
+
//# sourceMappingURL=chunk-U7YXBTRR.js.map
|