typegpu 0.2.0-alpha.0 → 0.3.0-alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +2 -2
- package/chunk-CKSBATTP.cjs +2 -0
- package/chunk-CKSBATTP.cjs.map +1 -0
- package/chunk-IQYHODCR.js +2 -0
- package/chunk-IQYHODCR.js.map +1 -0
- package/data/index.cjs +1 -1
- package/data/index.d.cts +116 -373
- package/data/index.d.ts +116 -373
- package/data/index.js +1 -1
- package/index.cjs +14 -47
- package/index.cjs.map +1 -1
- package/index.d.cts +505 -168
- package/index.d.ts +505 -168
- package/index.js +14 -47
- package/index.js.map +1 -1
- package/package.json +3 -14
- package/utilityTypes-0b50gROn.d.cts +1122 -0
- package/utilityTypes-0b50gROn.d.ts +1122 -0
- package/chunk-5EPBCOO4.js +0 -8
- package/chunk-5EPBCOO4.js.map +0 -1
- package/chunk-SBJR5ZQJ.cjs +0 -8
- package/chunk-SBJR5ZQJ.cjs.map +0 -1
- package/types-qmW7FFqN.d.cts +0 -880
- package/types-qmW7FFqN.d.ts +0 -880
package/chunk-5EPBCOO4.js
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
var Ke=Object.defineProperty,He=Object.defineProperties;var qe=Object.getOwnPropertyDescriptors;var G=Object.getOwnPropertySymbols;var Pe=Object.prototype.hasOwnProperty,_e=Object.prototype.propertyIsEnumerable;var ue=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e);var ie=(e,t,n)=>t in e?Ke(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Rt=(e,t)=>{for(var n in t||(t={}))Pe.call(t,n)&&ie(e,n,t[n]);if(G)for(var n of G(t))_e.call(t,n)&&ie(e,n,t[n]);return e},Ct=(e,t)=>He(e,qe(t));var Ut=(e,t)=>{var n={};for(var r in e)Pe.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&G)for(var r of G(e))t.indexOf(r)<0&&_e.call(e,r)&&(n[r]=e[r]);return n};var s=(e,t,n)=>(ie(e,typeof t!="symbol"?t+"":t,n),n);var Je=function(e,t){this[0]=e,this[1]=t};var f=e=>{var t=e[ue("asyncIterator")],n=!1,r,a={};return t==null?(t=e[ue("iterator")](),r=o=>a[o]=i=>t[o](i)):(t=t.call(e),r=o=>a[o]=i=>{if(n){if(n=!1,o==="throw")throw i;return i}return n=!0,{done:!1,value:new Je(new Promise(y=>{var h=t[o](i);if(!(h instanceof Object))throw TypeError("Object expected");y(h)}),1)}}),a[ue("iterator")]=()=>a,r("next"),"throw"in t?r("throw"):a.throw=o=>{throw o},"return"in t&&r("return"),a};import{MaxValue as Qe,Measurer as Xe,Schema as Ye}from"typed-binary";var Re=class e extends Error{constructor(n,r){let a=r.map(o=>`- ${o}`);a.length>20&&(a=[...a.slice(0,11),"...",...a.slice(-10)]);super(`Resolution of the following tree failed:
|
2
|
-
${a.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)}},Ce=class e extends Error{constructor(n){super(`Missing value for '${n}'`);this.slot=n;Object.setPrototypeOf(this,e.prototype)}},p=class e extends Error{constructor(){super("Recursive types are not supported in WGSL"),Object.setPrototypeOf(this,e.prototype)}},Ue=class e extends Error{constructor(t){var n;super(`Buffer '${(n=t.label)!=null?n:"<unnamed>"}' is not bindable as a uniform. Use .$usage(tgu.Uniform) to allow it.`),Object.setPrototypeOf(this,e.prototype)}};var K=class extends Ye{constructor({schema:n,byteAlignment:r,code:a}){super();s(this,"size");s(this,"byteAlignment");s(this,"expressionCode");s(this,"_innerSchema");s(this,"isLoose",!1);s(this,"label");this._innerSchema=n,this.byteAlignment=r,this.expressionCode=a,this.size=this.measure(Qe).size,this.label=a}resolveReferences(){throw new p}write(n,r){this._innerSchema.write(n,r)}read(n){return this._innerSchema.read(n)}measure(n,r=new Xe){return this._innerSchema.measure(n,r),r}resolve(n){return this.expressionCode}};import*as w from"typed-binary";var le=0;function $t(e){le++;try{return e()}finally{le--}}var z=()=>le>0;var ye=(e,t)=>({__unwrapped:void 0,isLoose:!1,kind:t,size:4,byteAlignment:4,expressionCode:t,write(n,r){e.write(n,r)},read(n){return e.read(n)},measure(n,r=new w.Measurer){return e.measure(n,r),r},resolveReferences(n){throw new p},seekProperty(n,r){throw new Error("Method not implemented.")},resolve(){return t},toString(){return t}}),Kt=new K({schema:w.bool,byteAlignment:4,code:"bool"}),Ze=e=>z()?`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))),H=Object.assign(Ze,ye(w.u32,"u32")),et=e=>{if(z())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))},q=Object.assign(et,ye(w.i32,"i32")),tt=e=>z()?`f32(${e})`:typeof e=="boolean"?e?1:0:e,J=Object.assign(tt,ye(w.f32,"f32"));import{MaxValue as v,Measurer as je,Schema as We}from"typed-binary";function Q(){return new me}var me=class{constructor(){s(this,"label")}$name(t){return this.label=t,this}resolve(t){return t.nameFor(this)}toString(){var t;return`id:${(t=this.label)!=null?t:"<unnamed>"}`}};var nt=["vertex_index","instance_index","position","clip_distances","front_facing","frag_depth","sample_index","sample_mask","fragment","local_invocation_id","local_invocation_index","global_invocation_id","workgroup_id","num_workgroups"],pe=new Map(nt.map(e=>[Symbol(e),e])),Xt=new Map(Array.from(pe).map(([e,t])=>[t,e])),Be=new Map;function Yt(e){let t=pe.get(e);if(!t)throw new Error(`The symbol ${String(e)} in not a valid 'builtin'`);return t}function Me(e){let t=Be.get(e);return t===void 0&&(t=Q().$name(pe.get(e)),Be.set(e,t)),t}var en=Symbol("Unknown data type");function ce(e){return!!e&&(typeof e=="object"||typeof e=="function")&&"resolve"in e}function tn(e){return typeof e=="number"||typeof e=="boolean"||typeof e=="string"||ce(e)}function nn(e){return e==="sampler"||e==="sampler_comparison"}function rn(e){return["texture_depth_2d","texture_depth_2d_array","texture_depth_cube","texture_depth_cube_array","texture_depth_multisampled_2d"].includes(e)}function an(e){return e==="texture_external"}function Le(e){return e.isLoose}function Ee(e){return!e.isLoose}function on(e){return!!e&&typeof e=="object"&&"getMappedRange"in e&&"mapAsync"in e}function sn(e){return e.__brand==="TgpuSlot"}function xe(e,...t){let n=e.flatMap((r,a)=>{let o=t[a];return o===void 0?[r]:Array.isArray(o)?[r,...o]:[r,o]});return new Te(n)}var Te=class{constructor(t){this.segments=t;s(this,"_label")}get label(){return this._label}$name(t){return this._label=t,this}resolve(t){let n="";for(let r of this.segments)if(ce(r))n+=t.resolve(r);else if(typeof r=="function"){let a=r(o=>t.unwrap(o));n+=t.resolve(a)}else typeof r=="symbol"?(t.addBuiltin(r),n+=t.resolve(Me(r))):n+=String(r);return n}with(t,n){return new de(this,[t,n])}toString(){var t;return`code:${(t=this._label)!=null?t:"<unnamed>"}`}},de=class e{constructor(t,n){this._innerFn=t;this._slotValuePair=n}get label(){return this._innerFn.label}with(t,n){return new e(this,[t,n])}resolve(t){return t.resolve(this._innerFn,[this._slotValuePair])}toString(){var r,a;let[t,n]=this._slotValuePair;return`code:${(r=this.label)!=null?r:"<unnamed>"}[${(a=t.label)!=null?a:"<unnamed>"}=${n}]`}};function rt(e,t){let n="size"in e?e.size:e.currentByteOffset,r=t-1,a=n&r;"skipBytes"in e?e.skipBytes(t-a&r):e.add(t-a&r)}var l=rt;import{Measurer as $e,Schema as Ne}from"typed-binary";var B=(e,t)=>{let n=t-1,r=~n;return e&n?(e&r)+t:e};import{MaxValue as at,Measurer as ot}from"typed-binary";function be(e,t){return fe(e)?new M(e.inner,[t,...e.attributes]):we(e)?new L(e.inner,[t,...e.attributes]):Le(e)?new L(e,[t]):new M(e,[t])}function st(e,t){return be(t,{type:"align",alignment:e})}function ut(e,t){return be(t,{type:"size",size:e})}function it(e,t){return be(t,{type:"location",location:e})}function fe(e){return e instanceof M}function we(e){return e instanceof L}function Fe(e){return e.alignAttrib}function Oe(e){return!fe(e)&&!we(e)?"":e.attributes.map(t=>t.type==="align"?`@align(${t.alignment}) `:t.type==="size"?`@size(${t.size}) `:t.type==="location"?`@location(${t.location}) `:"").join("")}var X=class{constructor(t,n){this.inner=t;this.attributes=n;s(this,"__unwrapped");s(this,"label");s(this,"byteAlignment");s(this,"size");s(this,"alignAttrib");s(this,"sizeAttrib");s(this,"locationAttrib");var r,a,o,i;if(this.alignAttrib=(r=n.find(y=>y.type==="align"))==null?void 0:r.alignment,this.sizeAttrib=(a=n.find(y=>y.type==="size"))==null?void 0:a.size,this.locationAttrib=(o=n.find(y=>y.type==="location"))==null?void 0:o.location,this.byteAlignment=(i=this.alignAttrib)!=null?i:t.byteAlignment,this.size=this.measure(at).size,this.byteAlignment<=0)throw new Error(`Custom data alignment must be a positive number, got: ${this.byteAlignment}.`);if(Math.log2(this.byteAlignment)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${this.byteAlignment}.`);if(Ee(this.inner)&&this.byteAlignment%this.inner.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${this.byteAlignment}, expected multiple of: ${this.inner.byteAlignment}.`);if(this.size<this.inner.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${this.size}, expected at least: ${this.inner.size}.`);if(this.size<=0)throw new Error(`Custom data size must be a positive number. Got: ${this.size}.`)}resolveReferences(t){throw new p}write(t,n){var a;l(t,(a=this.alignAttrib)!=null?a:1);let r=t.currentByteOffset;this.inner.write(t,n),t.seekTo(r+this.size)}read(t){var a;l(t,(a=this.alignAttrib)!=null?a:1);let n=t.currentByteOffset,r=this.inner.read(t);return t.seekTo(n+this.size),r}measure(t,n=new ot){var r;return l(n,(r=this.alignAttrib)!=null?r:1),this.sizeAttrib!==void 0?n.add(this.sizeAttrib):this.inner.measure(t,n)}seekProperty(t,n){return this.inner.seekProperty(t,n)}},M=class extends X{constructor(){super(...arguments);s(this,"isLoose",!1)}resolve(n){return n.resolve(this.inner)}},L=class extends X{constructor(){super(...arguments);s(this,"isLoose",!0)}};var lt=(e,t)=>new Y(e,t),yt=(e,t)=>new Z(e,t);function ge(e){return e instanceof Y}function mt(e){return e instanceof Z}var Y=class extends Ne{constructor(n,r){super();this.elementType=n;this.elementCount=r;s(this,"_size");s(this,"isRuntimeSized");s(this,"byteAlignment");s(this,"stride");s(this,"isLoose",!1);this.byteAlignment=n.byteAlignment,this.stride=B(n.size,n.byteAlignment),this._size=this.stride*r,this.isRuntimeSized=r===0}get size(){if(this.isRuntimeSized)throw new Error("Cannot get the size of a runtime-sized array");return this._size}write(n,r){if(this.isRuntimeSized)throw new Error("Cannot write a runtime-sized array");l(n,this.byteAlignment);let a=n.currentByteOffset;for(let o=0;o<Math.min(this.elementCount,r.length);o++)l(n,this.byteAlignment),this.elementType.write(n,r[o]);n.seekTo(a+this.size)}read(n){if(this.isRuntimeSized)throw new Error("Cannot read a runtime-sized array");l(n,this.byteAlignment);let r=[];for(let a=0;a<this.elementCount;a++)l(n,this.byteAlignment),r.push(this.elementType.read(n));return l(n,this.byteAlignment),r}measure(n,r=new $e){return this.isRuntimeSized?r.unbounded:(l(r,this.byteAlignment),r.add(this.size))}resolve(n){let r=n.resolve(this.elementType),a=this.isRuntimeSized?`array<${r}>`:`array<${r}, ${this.elementCount}>`;return n.resolve(a)}},Z=class extends Ne{constructor(n,r){var a;super();this.elementType=n;this.elementCount=r;s(this,"byteAlignment");s(this,"size");s(this,"stride");s(this,"isLoose",!0);this.byteAlignment=(a=Fe(n))!=null?a:1,this.stride=B(n.size,this.byteAlignment),this.size=this.stride*r}write(n,r){l(n,this.byteAlignment);let a=n.currentByteOffset;for(let o=0;o<Math.min(this.elementCount,r.length);o++)l(n,this.byteAlignment),this.elementType.write(n,r[o]);n.seekTo(a+this.size)}read(n){l(n,this.byteAlignment);let r=[];for(let a=0;a<this.elementCount;a++)l(n,this.byteAlignment),r.push(this.elementType.read(n));return l(n,this.byteAlignment),r}measure(n,r=new $e){return l(r,this.byteAlignment),r.add(this.size)}};var pt=e=>new ee(e),ct=e=>new te(e);function Tt(e){return e instanceof ee}function dt(e){return e instanceof te}function xt([e,t]){return xe` ${Oe(t)}${e}: ${t},\n`}var ee=class extends We{constructor(n){super();this.properties=n;s(this,"_label");s(this,"_size");s(this,"byteAlignment");s(this,"isLoose",!1);s(this,"isRuntimeSized");this.byteAlignment=Object.values(n).map(r=>r.byteAlignment).reduce((r,a)=>r>a?r:a),this._size=this.measure(v).size,this.isRuntimeSized=Number.isNaN(this._size)}get size(){if(this.isRuntimeSized)throw new Error("Cannot get size of struct with runtime sized properties");return this._size}get label(){return this._label}$name(n){return this._label=n,this}resolveReferences(){throw new p}write(n,r){if(this.isRuntimeSized)throw new Error("Cannot write struct with runtime sized properties");l(n,this.byteAlignment);for(let[a,o]of Object.entries(this.properties))l(n,o.byteAlignment),o.write(n,r[a]);l(n,this.byteAlignment)}read(n){if(this.isRuntimeSized)throw new Error("Cannot read struct with runtime sized properties");l(n,this.byteAlignment);let r={};for(let[a,o]of Object.entries(this.properties))l(n,o.byteAlignment),r[a]=o.read(n);return l(n,this.byteAlignment),r}measure(n,r=new je){let a=r;l(a,this.byteAlignment);let o=n===v;for(let[i,y]of Object.entries(this.properties)){if(a.isUnbounded)throw new Error("Only the last property of a struct can be unbounded");if(l(a,y.byteAlignment),a=y.measure(o?v:n[i],a),a.isUnbounded&&!ge(y))throw new Error("Cannot nest unbounded struct within another struct")}return l(a,this.byteAlignment),a}resolve(n){let r=Q().$name(this._label);return n.addDeclaration(xe`
|
4
|
-
struct ${r} {
|
5
|
-
${Object.entries(this.properties).map(xt)}\
|
6
|
-
}
|
7
|
-
`),n.resolve(r)}},te=class extends We{constructor(n){super();this.properties=n;s(this,"_label");s(this,"byteAlignment",1);s(this,"isLoose",!0);s(this,"size");this.size=this.measure(v).size}get label(){return this._label}$name(n){return this._label=n,this}resolveReferences(){throw new p}write(n,r){for(let[a,o]of Object.entries(this.properties))o.write(n,r[a])}read(n){let r={};for(let[a,o]of Object.entries(this.properties))r[a]=o.read(n);return r}measure(n,r=new je){let a=n===v;for(let[o,i]of Object.entries(this.properties))i.measure(a?v:n[o],r);return r}};import{Measurer as bt,f32 as he,i32 as ze,u32 as ve}from"typed-binary";function g(e){let t={__unwrapped:void 0,isLoose:!1,size:e.length*4,label:e.label,byteAlignment:e.byteAlignment,kind:e.label,expressionCode:e.label,resolveReferences(r){throw new p},write(r,a){for(let o of a)e.unitType.write(r,o)},read(r){return e.make(...Array.from({length:e.length}).map(a=>e.unitType.read(r)))},measure(r,a=new bt){return a.add(this.size)},seekProperty(r,a){throw new Error("Method not implemented.")},resolve(){return e.label},toString(){return e.label}};return Object.assign((...r)=>{var o;let a=r;if(z())return`${t.kind}(${a.join(", ")})`;if(a.length<=1)return e.makeFromScalar((o=a[0])!=null?o:0);if(a.length===e.length)return e.make(...a);throw new Error(`'${e.label}' constructor called with invalid number of arguments.`)},t)}var E=class{constructor(t,n){this.x=t;this.y=n;s(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}},A=class e extends E{constructor(){super(...arguments);s(this,"kind","vec2f")}make2(n,r){return new e(n,r)}make3(n,r,a){return new k(n,r,a)}make4(n,r,a,o){return new P(n,r,a,o)}},D=class e extends E{constructor(){super(...arguments);s(this,"kind","vec2i")}make2(n,r){return new e(n,r)}make3(n,r,a){return new V(n,r,a)}make4(n,r,a,o){return new _(n,r,a,o)}},S=class e extends E{constructor(){super(...arguments);s(this,"kind","vec2u")}make2(n,r){return new e(n,r)}make3(n,r,a){return new I(n,r,a)}make4(n,r,a,o){return new R(n,r,a,o)}},F=class{constructor(t,n,r){this.x=t;this.y=n;this.z=r;s(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}},k=class e extends F{constructor(){super(...arguments);s(this,"kind","vec3f")}make2(n,r){return new A(n,r)}make3(n,r,a){return new e(n,r,a)}make4(n,r,a,o){return new P(n,r,a,o)}},V=class e extends F{constructor(){super(...arguments);s(this,"kind","vec3i")}make2(n,r){return new D(n,r)}make3(n,r,a){return new e(n,r,a)}make4(n,r,a,o){return new _(n,r,a,o)}},I=class e extends F{constructor(){super(...arguments);s(this,"kind","vec3u")}make2(n,r){return new S(n,r)}make3(n,r,a){return new e(n,r,a)}make4(n,r,a,o){return new R(n,r,a,o)}},O=class{constructor(t,n,r,a){this.x=t;this.y=n;this.z=r;this.w=a;s(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}},P=class e extends O{constructor(){super(...arguments);s(this,"kind","vec4f")}make2(n,r){return new A(n,r)}make3(n,r,a){return new k(n,r,a)}make4(n,r,a,o){return new e(n,r,a,o)}},_=class e extends O{constructor(){super(...arguments);s(this,"kind","vec4i")}make2(n,r){return new D(n,r)}make3(n,r,a){return new V(n,r,a)}make4(n,r,a,o){return new e(n,r,a,o)}},R=class e extends O{constructor(){super(...arguments);s(this,"kind","vec4u")}make2(n,r){return new S(n,r)}make3(n,r,a){return new I(n,r,a)}make4(n,r,a,o){return new e(n,r,a,o)}},m={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),a=0;for(let o of t){switch(o){case"x":r[a]=n.x;break;case"y":r[a]=n.y;break;case"z":r[a]=n.z;break;case"w":r[a]=n.w;break;default:return Reflect.get(n,t)}a++}return t.length===4?new Proxy(n.make4(r[0],r[1],r[2],r[3]),m):t.length===3?new Proxy(n.make3(r[0],r[1],r[2]),m):t.length===2?new Proxy(n.make2(r[0],r[1]),m):Reflect.get(e,t)}},x=g({unitType:he,byteAlignment:8,length:2,label:"vec2f",make:(e,t)=>new Proxy(new A(e,t),m),makeFromScalar:e=>new Proxy(new A(e,e),m)}),$=g({unitType:ze,byteAlignment:8,length:2,label:"vec2i",make:(e,t)=>new Proxy(new D(e,t),m),makeFromScalar:e=>new Proxy(new D(e,e),m)}),N=g({unitType:ve,byteAlignment:8,length:2,label:"vec2u",make:(e,t)=>new Proxy(new S(e,t),m),makeFromScalar:e=>new Proxy(new S(e,e),m)}),C=g({unitType:he,byteAlignment:16,length:3,label:"vec3f",make:(e,t,n)=>new Proxy(new k(e,t,n),m),makeFromScalar:e=>new Proxy(new k(e,e,e),m)}),Ae=g({unitType:ze,byteAlignment:16,length:3,label:"vec3i",make:(e,t,n)=>new Proxy(new V(e,t,n),m),makeFromScalar:e=>new Proxy(new V(e,e,e),m)}),De=g({unitType:ve,byteAlignment:16,length:3,label:"vec3u",make:(e,t,n)=>new Proxy(new I(e,t,n),m),makeFromScalar:e=>new Proxy(new I(e,e,e),m)}),T=g({unitType:he,byteAlignment:16,length:4,label:"vec4f",make:(e,t,n,r)=>new Proxy(new P(e,t,n,r),m),makeFromScalar:e=>new Proxy(new P(e,e,e,e),m)}),j=g({unitType:ze,byteAlignment:16,length:4,label:"vec4i",make:(e,t,n,r)=>new Proxy(new _(e,t,n,r),m),makeFromScalar:e=>new Proxy(new _(e,e,e,e),m)}),W=g({unitType:ve,byteAlignment:16,length:4,label:"vec4u",make:(e,t,n,r)=>new Proxy(new R(e,t,n,r),m),makeFromScalar:e=>new Proxy(new R(e,e,e,e),m)});import{Measurer as ft}from"typed-binary";function Ie(e){let t={__unwrapped:void 0,isLoose:!1,label:e.label,byteAlignment:e.columnType.byteAlignment,size:B(e.columnType.size*e.columns,e.columnType.byteAlignment),resolveReferences(){throw new p},write(r,a){for(let o of a.columns)e.columnType.write(r,o)},read(r){let a=new Array(e.columns);for(let o=0;o<e.columns;++o)a[o]=e.columnType.read(r);return e.makeFromColumnVectors(...a)},measure(r,a=new ft){return a.add(this.size)},seekProperty(){throw new Error("Method not implemented.")},resolve(){return e.label}};return Object.assign((...r)=>{let a=[];for(let o of r)typeof o=="number"?a.push(o):a.push(...o);for(let o=a.length;o<e.columns*e.rows;++o)a.push(0);return e.makeFromElements(...a)},t)}var Se=class{constructor(...t){s(this,"columns");s(this,"length",4);this.columns=[this.makeColumn(t[0],t[1]),this.makeColumn(t[2],t[3])]}*elements(){yield*f(this.columns[0]),yield*f(this.columns[1])}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}},ne=class extends Se{makeColumn(t,n){return x(t,n)}},ke=class{constructor(...t){s(this,"columns");s(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])]}*elements(){yield*f(this.columns[0]),yield*f(this.columns[1]),yield*f(this.columns[2])}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){}},re=class extends ke{makeColumn(t,n,r){return C(t,n,r)}},Ve=class{constructor(...t){s(this,"columns");s(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])]}*elements(){yield*f(this.columns[0]),yield*f(this.columns[1]),yield*f(this.columns[2]),yield*f(this.columns[3])}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}},ae=class extends Ve{makeColumn(t,n,r,a){return T(t,n,r,a)}},Gn=Ie({label:"mat2x2f",columnType:x,rows:2,columns:2,makeFromColumnVectors:(...e)=>new ne(...e[0],...e[1]),makeFromElements:(...e)=>new ne(...e)}),Kn=Ie({label:"mat3x3f",columnType:C,rows:3,columns:3,makeFromColumnVectors(...[e,t,n]){return new re(...e,...t,...n)},makeFromElements:(...e)=>new re(...e)}),Hn=Ie({label:"mat4x4f",columnType:T,rows:4,columns:4,makeFromColumnVectors(...[e,t,n,r]){return new ae(...e,...t,...n,...r)},makeFromElements:(...e)=>new ae(...e)});import{BufferReader as wt,Measurer as gt,Schema as ht}from"typed-binary";var u=class extends ht{constructor(n,r){var o;super();this.size=n;this.kind=r;s(this,"underlyingType");s(this,"elementSize");s(this,"elementCount");s(this,"isSigned");s(this,"byteAlignment",1);s(this,"isLoose",!0);this.underlyingType=Dt[r],this.isSigned=(o=St[r])!=null?o:!1,this.elementCount=this.underlyingType.size/4;let a=n/this.elementCount;if(a!==1&&a!==2&&a!==4)throw new Error("Invalid element size");this.elementSize=a}write(n,r){if(typeof r=="number"){switch(this.underlyingType){case H:n.writeUint32(r);break;case J:n.writeFloat32(r);break;case q:n.writeInt32(r);break;default:throw new Error("Invalid underlying type")}return}zt(n,r,this.elementSize,this.isSigned)}read(n){let r=new ArrayBuffer(this.size),a=new DataView(r);for(let d=0;d<this.size;d++)a.setUint8(d,n.readByte());if(this.elementCount===1)switch(this.underlyingType){case H:return a.getUint32(0);case J:return a.getFloat32(0);case q:return a.getInt32(0);default:throw new Error("Invalid underlying type")}let o=this.underlyingType,i=Ge[o.label],y=new Array(this.elementCount),h=new wt(r);for(let d=0;d<this.elementCount;d++)y[d]=At(i,this.elementSize,h,this.isSigned);switch(o){case N:case x:case $:return o(y[0],y[1]);case De:case C:case Ae:return o(y[0],y[1],y[2]);case W:case T:case j:return o(y[0],y[1],y[2],y[3]);default:throw new Error("Invalid underlying type")}}measure(n,r=new gt){return r.add(this.size)}},Ge={vec2u:"u32",vec3u:"u32",vec4u:"u32",vec2f:"f32",vec3f:"f32",vec4f:"f32",vec2i:"i32",vec3i:"i32",vec4i:"i32"};function zt(e,t,n,r){let a=Ge[t.kind];for(let o of t)vt(a,o,n,e,r)}function vt(e,t,n,r,a=!0){let o=new ArrayBuffer(n),i=new DataView(o),y=(c,U)=>{let se=a?U*127+128:U*255;i.setUint8(c,Math.floor(se))},h=(c,U)=>{let se=a?U*32767+32768:U*65535;i.setUint16(c,Math.floor(se))},b={u32:[i.setUint8,i.setUint16,i.setUint32],f32:[y,h,i.setFloat32],i32:[i.setInt8,i.setInt16,i.setInt32]}[e][Math.log2(n)];b&&b.call(i,0,t);for(let c=0;c<n;c++)r.writeByte(i.getUint8(c))}function At(e,t,n,r=!0){let a=new ArrayBuffer(t),o=new DataView(a);for(let b=0;b<t;b++)o.setUint8(b,n.readByte());let i=b=>{let c=o.getUint8(b);return r?(c-128)/127:c/255},y=b=>{let c=o.getUint16(b);return r?(c-32768)/32767:c/65535},d={u32:[o.getUint8,o.getUint16,o.getUint32],f32:[i,y,o.getFloat32],i32:[o.getInt8,o.getInt16,o.getInt32]}[e][Math.log2(t)];if(d)return d.call(o,0);throw new Error("Invalid primitive")}var Dt={uint8x2:N,uint8x4:W,sint8x2:$,sint8x4:j,unorm8x2:x,unorm8x4:T,snorm8x2:x,snorm8x4:T,uint16x2:N,uint16x4:W,sint16x2:$,sint16x4:j,unorm16x2:x,unorm16x4:T,snorm16x2:x,snorm16x4:T,float16x2:x,float16x4:T,float32:J,float32x2:x,float32x3:C,float32x4:T,uint32:H,uint32x2:N,uint32x3:De,uint32x4:W,sint32:q,sint32x2:$,sint32x3:Ae,sint32x4:j,unorm10_10_10_2:T},St={unorm8x2:!1,unorm8x4:!1,snorm8x2:!0,snorm8x4:!0,unorm16x2:!1,unorm16x4:!1,snorm16x2:!0,snorm16x4:!0,float16x2:!0,float16x4:!0,unorm10_10_10_2:!1},Zn=new u(2,"uint8x2"),er=new u(4,"uint8x4"),tr=new u(2,"sint8x2"),nr=new u(4,"sint8x4"),rr=new u(2,"unorm8x2"),ar=new u(4,"unorm8x4"),or=new u(2,"snorm8x2"),sr=new u(4,"snorm8x4"),ur=new u(4,"uint16x2"),ir=new u(8,"uint16x4"),lr=new u(4,"sint16x2"),yr=new u(8,"sint16x4"),mr=new u(4,"unorm16x2"),pr=new u(8,"unorm16x4"),cr=new u(4,"snorm16x2"),Tr=new u(8,"snorm16x4"),dr=new u(4,"float16x2"),xr=new u(8,"float16x4"),br=new u(4,"float32"),fr=new u(8,"float32x2"),wr=new u(12,"float32x3"),gr=new u(16,"float32x4"),hr=new u(4,"uint32"),zr=new u(8,"uint32x2"),vr=new u(12,"uint32x3"),Ar=new u(16,"uint32x4"),Dr=new u(4,"sint32"),Sr=new u(8,"sint32x2"),kr=new u(12,"sint32x3"),Vr=new u(16,"sint32x4"),Ir=new u(4,"unorm10_10_10_2");function kt(e){return{scope:"function",pointsTo:e}}import{Measurer as Vt,Schema as It}from"typed-binary";function Pt(e){return new oe(e)}function _t(e){return e instanceof oe}var oe=class extends It{constructor(n){super();this.innerData=n;s(this,"size");s(this,"byteAlignment");s(this,"isLoose",!1);this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new p}write(n,r){this.innerData.write(n,r)}read(n){return this.innerData.read(n)}measure(n,r=new Vt){return this.innerData.measure(n,r)}resolve(n){return`atomic<${n.resolve(this.innerData)}>`}};export{Rt as a,Ct as b,Ut as c,s as d,$t as e,z as f,Re as g,Ce as h,p as i,Ue as j,K as k,Kt as l,H as m,q as n,J as o,pe as p,Xt as q,Yt as r,Me as s,en as t,ce as u,tn as v,nn as w,rn as x,an as y,on as z,sn as A,xe as B,st as C,ut as D,it as E,fe as F,we as G,lt as H,yt as I,ge as J,mt as K,pt as L,ct as M,Tt as N,dt as O,x as P,$ as Q,N as R,C as S,Ae as T,De as U,T as V,j as W,W as X,Gn as Y,Kn as Z,Hn as _,Zn as $,er as aa,tr as ba,nr as ca,rr as da,ar as ea,or as fa,sr as ga,ur as ha,ir as ia,lr as ja,yr as ka,mr as la,pr as ma,cr as na,Tr as oa,dr as pa,xr as qa,br as ra,fr as sa,wr as ta,gr as ua,hr as va,zr as wa,vr as xa,Ar as ya,Dr as za,Sr as Aa,kr as Ba,Vr as Ca,Ir as Da,kt as Ea,Pt as Fa,_t as Ga};
|
8
|
-
//# sourceMappingURL=chunk-5EPBCOO4.js.map
|
package/chunk-5EPBCOO4.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/data/std140.ts","../src/errors.ts","../src/data/numeric.ts","../src/gpuMode.ts","../src/data/struct.ts","../src/tgpuIdentifier.ts","../src/builtinIdentifiers.ts","../src/types.ts","../src/tgpuCode.ts","../src/data/alignIO.ts","../src/data/array.ts","../src/mathUtils.ts","../src/data/attributes.ts","../src/data/vector.ts","../src/data/matrix.ts","../src/data/vertexFormatData.ts","../src/data/pointer.ts","../src/data/atomic.ts"],"sourcesContent":["/*\n * Typed-binary types that adhere to the `std140` layout rules.\n */\n\nimport {\n type AnySchema,\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, TgpuData } from '../types';\n\nexport class SimpleTgpuData<TSchema extends AnySchema>\n extends Schema<Unwrap<TSchema>>\n implements TgpuData<Unwrap<TSchema>>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n public readonly expressionCode: string;\n\n private readonly _innerSchema: TSchema;\n public readonly isLoose = false as const;\n public readonly label?: string | undefined;\n\n /**\n * byteAlignment has to be a power of 2\n */\n constructor({\n schema,\n byteAlignment,\n code,\n }: {\n schema: TSchema;\n byteAlignment: number;\n code: string;\n }) {\n super();\n\n this._innerSchema = schema;\n this.byteAlignment = byteAlignment;\n this.expressionCode = code;\n this.size = this.measure(MaxValue).size;\n this.label = code;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n return this._innerSchema.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n this._innerSchema.measure(value, measurer);\n\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return this.expressionCode;\n }\n}\n","import type { TgpuBuffer } from './core/buffer/buffer';\nimport type { AnyTgpuData, TgpuResolvable, TgpuSlot } from './types';\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: TgpuResolvable[],\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(ancestor: TgpuResolvable): 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 RecursiveDataTypeError extends Error {\n constructor() {\n super('Recursive types are not supported in WGSL');\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, RecursiveDataTypeError.prototype);\n }\n}\n\n/**\n * @category Errors\n */\nexport class NotUniformError extends Error {\n constructor(value: TgpuBuffer<AnyTgpuData>) {\n super(\n `Buffer '${value.label ?? '<unnamed>'}' is not bindable as a uniform. Use .$usage(tgu.Uniform) to allow it.`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, NotUniformError.prototype);\n }\n}\n\n/**\n * @category Errors\n */\nexport class NotStorageError extends Error {\n constructor(value: TgpuBuffer<AnyTgpuData>) {\n super(\n `Buffer '${value.label ?? '<unnamed>'}' is not bindable as storage. Use .$usage(tgu.Storage) to allow it.`,\n );\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, NotStorageError.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","import * as TB from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport { inGPUMode } from '../gpuMode';\nimport type { TgpuData } from '../types';\nimport { SimpleTgpuData } from './std140';\n\nconst primitiveNumeric = <TKind extends string>(\n schema: TB.Uint32Schema | TB.Float32Schema | TB.Int32Schema,\n code: TKind,\n) => {\n return {\n // Type-token, not available at runtime\n __unwrapped: undefined as unknown as number,\n\n isLoose: false as const,\n kind: code,\n size: 4,\n byteAlignment: 4,\n expressionCode: code,\n\n write(output: TB.ISerialOutput, value: number): void {\n schema.write(output, value);\n },\n\n read(input: TB.ISerialInput): number {\n return schema.read(input);\n },\n\n measure(\n value: number | TB.MaxValue,\n measurer: TB.IMeasurer = new TB.Measurer(),\n ): TB.IMeasurer {\n schema.measure(value, measurer);\n return measurer;\n },\n\n resolveReferences(ctx: TB.IRefResolver): void {\n throw new RecursiveDataTypeError();\n },\n\n seekProperty(\n reference: number | TB.MaxValue,\n prop: never,\n ): { bufferOffset: number; schema: TB.ISchema<unknown> } | null {\n throw new Error('Method not implemented.');\n },\n\n resolve(): string {\n return code;\n },\n\n toString(): string {\n return code;\n },\n };\n};\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 type Bool = TgpuData<boolean>;\n/**\n * A schema that represents a boolean value. (equivalent to `bool` in WGSL)\n */\nexport const bool: Bool = new SimpleTgpuData({\n schema: TB.bool,\n byteAlignment: 4,\n code: 'bool',\n});\n\n/**\n * Unsigned 32-bit integer schema representing a single WGSL u32 value.\n */\nexport type U32 = TgpuData<number> & { kind: 'u32' } & ((\n v: number | boolean,\n ) => number);\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 * 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: U32 = Object.assign(u32Cast, primitiveNumeric(TB.u32, 'u32'));\n\n/**\n * Signed 32-bit integer schema representing a single WGSL i32 value.\n */\nexport type I32 = TgpuData<number> & { kind: 'i32' } & ((\n v: number | boolean,\n ) => number);\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 * 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: I32 = Object.assign(i32Cast, primitiveNumeric(TB.i32, 'i32'));\n\n/**\n * 32-bit float schema representing a single WGSL f32 value.\n */\nexport type F32 = TgpuData<number> & { kind: 'f32' } & ((\n v: number | boolean,\n ) => number);\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 return v;\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: F32 = Object.assign(f32Cast, primitiveNumeric(TB.f32, 'f32'));\n","let gpuDepth = 0;\n\nexport function onGPU<T>(callback: () => T): T {\n gpuDepth++;\n try {\n return callback();\n } finally {\n gpuDepth--;\n }\n}\n\nexport const inGPUMode = () => gpuDepth > 0;\n","import {\n type IMeasurer,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type Parsed,\n Schema,\n type UnwrapRecord,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { TgpuNamable } from '../namable';\nimport { code } from '../tgpuCode';\nimport { identifier } from '../tgpuIdentifier';\nimport type {\n AnyTgpuData,\n AnyTgpuLooseData,\n ResolutionCtx,\n TgpuData,\n TgpuLooseData,\n} from '../types';\nimport alignIO from './alignIO';\nimport { isArraySchema } from './array';\nimport { getAttributesString } from './attributes';\n\n// ----------\n// Public API\n// ----------\n\nexport interface TgpuBaseStruct<TProps extends Record<string, unknown>>\n extends ISchema<UnwrapRecord<TProps>> {\n readonly properties: TProps;\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, AnyTgpuData>>\n extends TgpuBaseStruct<TProps>,\n TgpuData<UnwrapRecord<TProps>>,\n TgpuNamable {}\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 properties Record with `string` keys and `TgpuData` values,\n * each entry describing one struct member.\n */\nexport const struct = <TProps extends Record<string, AnyTgpuData>>(\n properties: TProps,\n): TgpuStruct<TProps> => new TgpuStructImpl(properties);\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 TgpuLooseStruct<\n TProps extends Record<string, AnyTgpuData | AnyTgpuLooseData>,\n> extends TgpuBaseStruct<TProps>,\n TgpuLooseData<UnwrapRecord<TProps>> {}\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 = <\n TProps extends Record<string, AnyTgpuData | AnyTgpuLooseData>,\n>(\n properties: TProps,\n): TgpuLooseStruct<TProps> => new TgpuLooseStructImpl(properties);\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 * isStructSchema(d.struct({ a: d.u32 })) // true\n * isStructSchema(d.looseStruct({ a: d.u32 })) // false\n * isStructSchema(d.vec3f) // false\n */\nexport function isStructSchema<\n T extends TgpuStruct<Record<string, AnyTgpuData>>,\n>(schema: T | unknown): schema is T {\n return schema instanceof TgpuStructImpl;\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 * isLooseStructSchema(d.struct({ a: d.u32 })) // false\n * isLooseStructSchema(d.looseStruct({ a: d.u32 })) // true\n * isLooseStructSchema(d.vec3f) // false\n */\nexport function isLooseStructSchema<\n T extends TgpuLooseStruct<Record<string, AnyTgpuData | AnyTgpuLooseData>>,\n>(schema: T | unknown): schema is T {\n return schema instanceof TgpuLooseStructImpl;\n}\n\n// --------------\n// Implementation\n// --------------\n\nfunction generateField([key, field]: [string, AnyTgpuData]) {\n return code` ${getAttributesString(field)}${key}: ${field},\\n`;\n}\n\nclass TgpuStructImpl<TProps extends Record<string, AnyTgpuData>>\n extends Schema<UnwrapRecord<TProps>>\n implements TgpuData<UnwrapRecord<TProps>>\n{\n private _label: string | undefined;\n\n private _size: number;\n public readonly byteAlignment: number;\n public readonly isLoose = false as const;\n public readonly isRuntimeSized: boolean;\n\n constructor(public readonly properties: TProps) {\n super();\n\n this.byteAlignment = Object.values(properties)\n .map((prop) => prop.byteAlignment)\n .reduce((a, b) => (a > b ? a : b));\n\n this._size = this.measure(MaxValue).size;\n this.isRuntimeSized = Number.isNaN(this._size);\n }\n\n get size(): number {\n if (this.isRuntimeSized) {\n throw new Error(\n 'Cannot get size of struct with runtime sized properties',\n );\n }\n return this._size;\n }\n\n get label() {\n return this._label;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<UnwrapRecord<TProps>>): void {\n if (this.isRuntimeSized) {\n throw new Error('Cannot write struct with runtime sized properties');\n }\n alignIO(output, this.byteAlignment);\n\n for (const [key, property] of Object.entries(this.properties)) {\n alignIO(output, property.byteAlignment);\n property.write(output, value[key]);\n }\n\n alignIO(output, this.byteAlignment);\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n if (this.isRuntimeSized) {\n throw new Error('Cannot read struct with runtime sized properties');\n }\n alignIO(input, this.byteAlignment);\n const result = {} as Record<string, unknown>;\n\n for (const [key, property] of Object.entries(this.properties)) {\n alignIO(input, property.byteAlignment);\n result[key] = property.read(input);\n }\n\n alignIO(input, this.byteAlignment);\n return result as Parsed<UnwrapRecord<TProps>>;\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n let structMeasurer = measurer;\n alignIO(structMeasurer, this.byteAlignment);\n\n const maxing = value === MaxValue;\n for (const [key, property] of Object.entries(this.properties)) {\n if (structMeasurer.isUnbounded) {\n throw new Error('Only the last property of a struct can be unbounded');\n }\n\n alignIO(structMeasurer, property.byteAlignment);\n structMeasurer = property.measure(\n maxing ? MaxValue : value[key],\n structMeasurer,\n );\n\n if (structMeasurer.isUnbounded && !isArraySchema(property)) {\n throw new Error('Cannot nest unbounded struct within another struct');\n }\n }\n\n alignIO(structMeasurer, this.byteAlignment);\n return structMeasurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const ident = identifier().$name(this._label);\n\n ctx.addDeclaration(code`\nstruct ${ident} {\n${Object.entries(this.properties).map(generateField)}\\\n}\n`);\n\n return ctx.resolve(ident);\n }\n}\n\nclass TgpuLooseStructImpl<\n TProps extends Record<string, AnyTgpuData | AnyTgpuLooseData>,\n >\n extends Schema<UnwrapRecord<TProps>>\n implements TgpuLooseData<UnwrapRecord<TProps>>\n{\n private _label: string | undefined;\n\n public readonly byteAlignment = 1;\n public readonly isLoose = true as const;\n public readonly size: number;\n\n constructor(public readonly properties: TProps) {\n super();\n this.size = this.measure(MaxValue).size;\n }\n\n get label() {\n return this._label;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<UnwrapRecord<TProps>>): void {\n for (const [key, property] of Object.entries(this.properties)) {\n property.write(output, value[key]);\n }\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n const result = {} as Record<string, unknown>;\n\n for (const [key, property] of Object.entries(this.properties)) {\n result[key] = property.read(input);\n }\n\n return result as Parsed<UnwrapRecord<TProps>>;\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n const maxing = value === MaxValue;\n for (const [key, property] of Object.entries(this.properties)) {\n property.measure(maxing ? MaxValue : value[key], measurer);\n }\n\n return measurer;\n }\n}\n","import type { TgpuNamable } from './namable';\nimport type { ResolutionCtx, TgpuResolvable } from './types';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Helpful when creating new Resolvable types. For internal use.\n */\nexport function identifier() {\n return new TgpuIdentifierImpl();\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuIdentifierImpl implements TgpuResolvable, TgpuNamable {\n label?: string | undefined;\n\n $name(label: string | undefined) {\n this.label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.nameFor(this);\n }\n\n toString(): string {\n return `id:${this.label ?? '<unnamed>'}`;\n }\n}\n","import { identifier } from './tgpuIdentifier';\nimport type { TgpuIdentifier } from './types';\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 const builtinSymbolToName = new Map(\n builtinNames.map((name) => [Symbol(name), name]),\n);\n\nexport const builtinNameToSymbol = new Map(\n Array.from(builtinSymbolToName).map(([s, n]) => [n, s]),\n);\n\nconst identifierMap = new Map<symbol, TgpuIdentifier>();\n\nexport function nameForBuiltin(key: symbol): string {\n const name = builtinSymbolToName.get(key);\n if (!name) {\n throw new Error(`The symbol ${String(key)} in not a valid 'builtin'`);\n }\n\n return name;\n}\n\nexport function idForBuiltin(key: symbol) {\n let id = identifierMap.get(key);\n\n if (id === undefined) {\n id = identifier().$name(builtinSymbolToName.get(key));\n identifierMap.set(key, id);\n }\n\n return id;\n}\n","import type { ISchema, Unwrap } from 'typed-binary';\nimport type { TgpuBuffer } from './core/buffer/buffer';\nimport type { TgpuBufferUsage } from './core/buffer/bufferUsage';\nimport type { TgpuFnShellBase } from './core/function/fnCore';\nimport type { TgpuNamable } from './namable';\nimport type { Block } from './smol';\n\nexport type Wgsl = string | number | TgpuResolvable | symbol | boolean;\n\nexport const UnknownData = Symbol('Unknown data type');\nexport type UnknownData = typeof UnknownData;\n\nexport type Resource = {\n value: unknown;\n dataType: AnyTgpuData | UnknownData;\n};\n\nexport type TgpuShaderStage = 'compute' | 'vertex' | 'fragment';\n\nexport interface NumberArrayView {\n readonly length: number;\n [n: number]: number;\n}\n\n/**\n * Removes properties from record type that extend `Prop`\n */\nexport type OmitProps<T extends Record<string, unknown>, Prop> = Pick<\n T,\n {\n [Key in keyof T]: T[Key] extends Prop ? never : Key;\n }[keyof T]\n>;\n\n/**\n * Passed into each resolvable item. All sibling items share a resolution ctx,\n * and a new resolution ctx is made when going down each level in the tree.\n */\nexport interface ResolutionCtx {\n addDeclaration(item: TgpuResolvable): void;\n addBinding(bindable: TgpuBindable, identifier: TgpuIdentifier): void;\n addRenderResource(\n resource: TgpuRenderResource,\n identifier: TgpuIdentifier,\n ): void;\n addBuiltin(builtin: symbol): void;\n nameFor(token: TgpuResolvable): string;\n /**\n * Unwraps all layers of slot indirection and returns the concrete value if available.\n * @throws {MissingSlotValueError}\n */\n unwrap<T>(eventual: Eventual<T>): T;\n resolve(item: Wgsl, slotValueOverrides?: SlotValuePair<unknown>[]): string;\n transpileFn(fn: string): {\n argNames: string[];\n body: Block;\n externalNames: string[];\n };\n fnToWgsl(\n // biome-ignore lint/suspicious/noExplicitAny: <no need for generic magic>\n shell: TgpuFnShellBase<any, AnyTgpuData | undefined>,\n argNames: string[],\n body: Block,\n externalMap: Record<string, unknown>,\n ): {\n head: Wgsl;\n body: Wgsl;\n };\n}\n\nexport interface TgpuResolvable {\n readonly label?: string | undefined;\n resolve(ctx: ResolutionCtx): string;\n}\n\nexport interface TgpuIdentifier extends TgpuNamable, TgpuResolvable {}\n\nexport interface Builtin {\n symbol: symbol;\n name: string;\n stage: 'vertex' | 'fragment' | 'compute';\n direction: 'input' | 'output';\n identifier: TgpuIdentifier;\n}\n\nexport function isResolvable(value: unknown): value is TgpuResolvable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'resolve' in value\n );\n}\n\nexport function isWgsl(value: unknown): value is Wgsl {\n return (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'string' ||\n isResolvable(value)\n );\n}\n\n/**\n * Represents a value that is available at resolution time.\n */\nexport type Eventual<T> = T | TgpuSlot<T>;\n\nexport type EventualGetter = <T>(value: Eventual<T>) => T;\n\nexport type InlineResolve = (get: EventualGetter) => Wgsl;\n\nexport interface TgpuResolvableSlot<T extends Wgsl>\n extends TgpuResolvable,\n TgpuSlot<T> {}\n\nexport type SlotValuePair<T> = [TgpuSlot<T>, T];\n\nexport interface TgpuBindable<\n TData extends AnyTgpuData = AnyTgpuData,\n TUsage extends BufferUsage = BufferUsage,\n> extends TgpuResolvable {\n readonly allocatable: TgpuBuffer<TData>;\n readonly usage: TUsage;\n}\n\nexport type TgpuSamplerType = 'sampler' | 'sampler_comparison';\nexport type TgpuTypedTextureType =\n | 'texture_1d'\n | 'texture_2d'\n | 'texture_2d_array'\n | 'texture_3d'\n | 'texture_cube'\n | 'texture_cube_array'\n | 'texture_multisampled_2d';\nexport type TgpuDepthTextureType =\n | 'texture_depth_2d'\n | 'texture_depth_2d_array'\n | 'texture_depth_cube'\n | 'texture_depth_cube_array'\n | 'texture_depth_multisampled_2d';\nexport type TgpuStorageTextureType =\n | 'texture_storage_1d'\n | 'texture_storage_2d'\n | 'texture_storage_2d_array'\n | 'texture_storage_3d';\nexport type TgpuExternalTextureType = 'texture_external';\n\nexport type TgpuRenderResourceType =\n | TgpuSamplerType\n | TgpuTypedTextureType\n | TgpuDepthTextureType\n | TgpuStorageTextureType\n | TgpuExternalTextureType;\n\nexport interface TgpuRenderResource extends TgpuResolvable {\n readonly type: TgpuRenderResourceType;\n}\n\nexport type BufferUsage = 'uniform' | 'readonly' | 'mutable' | 'vertex';\nexport type TextureUsage = 'sampled' | 'storage';\n\nexport function isSamplerType(\n type: TgpuRenderResourceType,\n): type is TgpuSamplerType {\n return type === 'sampler' || type === 'sampler_comparison';\n}\n\nexport function isTypedTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuTypedTextureType {\n return [\n 'texture_1d',\n 'texture_2d',\n 'texture_2d_array',\n 'texture_3d',\n 'texture_cube',\n 'texture_cube_array',\n 'texture_multisampled_2d',\n ].includes(type);\n}\n\nexport function isDepthTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuDepthTextureType {\n return [\n 'texture_depth_2d',\n 'texture_depth_2d_array',\n 'texture_depth_cube',\n 'texture_depth_cube_array',\n 'texture_depth_multisampled_2d',\n ].includes(type);\n}\n\nexport function isStorageTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuStorageTextureType {\n return [\n 'texture_storage_1d',\n 'texture_storage_2d',\n 'texture_storage_2d_array',\n 'texture_storage_3d',\n ].includes(type);\n}\n\nexport function isExternalTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuExternalTextureType {\n return type === 'texture_external';\n}\n\nexport type ValueOf<T> = T extends TgpuSlot<infer I>\n ? ValueOf<I>\n : T extends TgpuBufferUsage<infer D>\n ? ValueOf<D>\n : T extends TgpuData<unknown>\n ? Unwrap<T>\n : T;\n\nexport interface TgpuData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly isLoose: false;\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport interface TgpuLooseData<TInner> extends ISchema<TInner> {\n readonly isLoose: true;\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport type AnyTgpuData = TgpuData<unknown>;\nexport type AnyTgpuLooseData = TgpuLooseData<unknown>;\n\nexport function isDataLoose<T>(\n data: TgpuData<T> | TgpuLooseData<T>,\n): data is TgpuLooseData<T> {\n return data.isLoose;\n}\nexport function isDataNotLoose<T>(\n data: TgpuData<T> | TgpuLooseData<T>,\n): data is TgpuData<T> {\n return !data.isLoose;\n}\n\nexport interface TgpuPointer<\n TScope extends 'function',\n TInner extends AnyTgpuData,\n> {\n readonly scope: TScope;\n readonly pointsTo: TInner;\n}\n\n/**\n * A virtual representation of a WGSL value.\n */\nexport type TgpuValue<TDataType> = {\n readonly __dataType: TDataType;\n};\n\nexport type AnyTgpuPointer = TgpuPointer<'function', AnyTgpuData>;\n\nexport type TgpuFnArgument = AnyTgpuPointer | AnyTgpuData;\n\nexport function isPointer(\n value: AnyTgpuPointer | AnyTgpuData,\n): value is AnyTgpuPointer {\n return 'pointsTo' in value;\n}\n\nexport function isGPUBuffer(value: unknown): value is GPUBuffer {\n return (\n !!value &&\n typeof value === 'object' &&\n 'getMappedRange' in value &&\n 'mapAsync' in value\n );\n}\n\n// -----------------\n// TypeGPU Resources\n// -----------------\n\n// Code\n\nexport interface BoundTgpuCode extends TgpuResolvable {\n with<T>(slot: TgpuSlot<T>, value: Eventual<T>): BoundTgpuCode;\n}\n\nexport interface TgpuCode extends BoundTgpuCode, TgpuNamable {}\n\n// Slot\n\nexport interface TgpuSlot<T> extends TgpuNamable {\n readonly __brand: 'TgpuSlot';\n\n readonly defaultValue: T | undefined;\n\n readonly label?: string | undefined;\n /**\n * Used to determine if code generated using either value `a` or `b` in place\n * of the slot will be equivalent. Defaults to `Object.is`.\n */\n areEqual(a: T, b: T): boolean;\n\n value: ValueOf<T>;\n}\n\nexport function isSlot<T>(value: unknown | TgpuSlot<T>): value is TgpuSlot<T> {\n return (value as TgpuSlot<T>).__brand === 'TgpuSlot';\n}\n","import { idForBuiltin } from './builtinIdentifiers';\nimport {\n type BoundTgpuCode,\n type Eventual,\n type InlineResolve,\n type ResolutionCtx,\n type SlotValuePair,\n type TgpuCode,\n type TgpuSlot,\n type Wgsl,\n isResolvable,\n} from './types';\n\n// ----------\n// Public API\n// ----------\n\nexport function code(\n strings: TemplateStringsArray,\n ...params: (Wgsl | Wgsl[] | InlineResolve)[]\n): TgpuCode {\n const segments: (Wgsl | InlineResolve)[] = strings.flatMap((string, idx) => {\n const param = params[idx];\n if (param === undefined) {\n return [string];\n }\n\n return Array.isArray(param) ? [string, ...param] : [string, param];\n });\n\n return new TgpuCodeImpl(segments);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuCodeImpl implements TgpuCode {\n private _label: string | undefined;\n\n constructor(public readonly segments: (Wgsl | InlineResolve)[]) {}\n\n get label() {\n return this._label;\n }\n\n $name(label?: string | undefined) {\n this._label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx) {\n let code = '';\n\n for (const s of this.segments) {\n if (isResolvable(s)) {\n code += ctx.resolve(s);\n } else if (typeof s === 'function') {\n const result = s((eventual) => ctx.unwrap(eventual));\n code += ctx.resolve(result);\n } else if (typeof s === 'symbol') {\n ctx.addBuiltin(s);\n code += ctx.resolve(idForBuiltin(s));\n } else {\n code += String(s);\n }\n }\n\n return code;\n }\n\n with<TValue>(slot: TgpuSlot<TValue>, value: Eventual<TValue>): BoundTgpuCode {\n return new BoundTgpuCodeImpl(this, [slot, value]);\n }\n\n toString(): string {\n return `code:${this._label ?? '<unnamed>'}`;\n }\n}\n\nclass BoundTgpuCodeImpl<T> implements BoundTgpuCode {\n constructor(\n private readonly _innerFn: BoundTgpuCode,\n private readonly _slotValuePair: SlotValuePair<T>,\n ) {}\n\n get label() {\n return this._innerFn.label;\n }\n\n with<TValue>(slot: TgpuSlot<TValue>, value: Eventual<TValue>): BoundTgpuCode {\n return new BoundTgpuCodeImpl(this, [slot, value]);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this._innerFn, [this._slotValuePair]);\n }\n\n toString(): string {\n const [slot, value] = this._slotValuePair;\n return `code:${this.label ?? '<unnamed>'}[${slot.label ?? '<unnamed>'}=${value}]`;\n }\n}\n","import type { IMeasurer, ISerialInput, ISerialOutput } from 'typed-binary';\n\n/**\n * @param io the IO to align\n * @param baseAlignment must be power of 2\n */\nfunction alignIO(\n io: ISerialInput | ISerialOutput | IMeasurer,\n baseAlignment: number,\n) {\n const currentPos = 'size' in io ? io.size : io.currentByteOffset;\n\n const bitMask = baseAlignment - 1;\n const offset = currentPos & bitMask;\n\n if ('skipBytes' in io) {\n io.skipBytes((baseAlignment - offset) & bitMask);\n } else {\n io.add((baseAlignment - offset) & bitMask);\n }\n}\n\nexport default alignIO;\n","import type * as TB from 'typed-binary';\nimport {\n type IMeasurer,\n type MaxValue,\n Measurer,\n type Parsed,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { roundUp } from '../mathUtils';\nimport type {\n AnyTgpuData,\n AnyTgpuLooseData,\n ResolutionCtx,\n TgpuData,\n TgpuLooseData,\n} from '../types';\nimport alignIO from './alignIO';\nimport { getCustomAlignment } from './attributes';\n\n// ----------\n// Public API\n// ----------\n\nexport interface TgpuBaseArray<\n TElement extends AnyTgpuData | AnyTgpuLooseData =\n | AnyTgpuData\n | AnyTgpuLooseData,\n> {\n readonly elementType: TElement;\n readonly elementCount: number;\n readonly stride: number;\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 AnyTgpuData>\n extends TgpuBaseArray<TElement>,\n TgpuData<Unwrap<TElement>[]> {}\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 count The number of elements in the array.\n */\nexport const arrayOf = <TElement extends AnyTgpuData>(\n elementType: TElement,\n count: number,\n): TgpuArray<TElement> => new TgpuArrayImpl(elementType, count);\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 TgpuLooseArray<TElement extends AnyTgpuData | AnyTgpuLooseData>\n extends TgpuBaseArray<TElement>,\n TgpuLooseData<Unwrap<TElement>[]> {}\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 AnyTgpuData | AnyTgpuLooseData>(\n elementType: TElement,\n count: number,\n): TgpuLooseArray<TElement> => new TgpuLooseArrayImpl(elementType, count);\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 * isArraySchema(d.arrayOf(d.u32, 4)) // true\n * isArraySchema(d.looseArrayOf(d.u32, 4)) // false\n * isArraySchema(d.vec3f) // false\n */\nexport function isArraySchema<T extends TgpuArray<AnyTgpuData>>(\n schema: T | unknown,\n): schema is T {\n return schema instanceof TgpuArrayImpl;\n}\n\n/**\n * Checks whether the passed in value is a looseArray 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 * isLooseArraySchema(d.arrayOf(d.u32, 4)) // false\n * isLooseArraySchema(d.looseArrayOf(d.u32, 4)) // true\n * isLooseArraySchema(d.vec3f) // false\n */\nexport function isLooseArraySchema<T extends TgpuLooseArray<AnyTgpuData>>(\n schema: T | unknown,\n): schema is T {\n return schema instanceof TgpuLooseArrayImpl;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuArrayImpl<TElement extends AnyTgpuData>\n extends Schema<Unwrap<TElement>[]>\n implements TgpuArray<TElement>\n{\n private _size: number;\n public readonly isRuntimeSized: boolean;\n public readonly byteAlignment: number;\n public readonly stride: number;\n public readonly isLoose = false;\n\n constructor(\n public readonly elementType: TElement,\n public readonly elementCount: number,\n ) {\n super();\n this.byteAlignment = elementType.byteAlignment;\n this.stride = roundUp(elementType.size, elementType.byteAlignment);\n this._size = this.stride * elementCount;\n this.isRuntimeSized = elementCount === 0;\n }\n\n get size() {\n if (this.isRuntimeSized) {\n throw new Error('Cannot get the size of a runtime-sized array');\n }\n return this._size;\n }\n\n write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]) {\n if (this.isRuntimeSized) {\n throw new Error('Cannot write a runtime-sized array');\n }\n alignIO(output, this.byteAlignment);\n const beginning = output.currentByteOffset;\n for (let i = 0; i < Math.min(this.elementCount, value.length); i++) {\n alignIO(output, this.byteAlignment);\n this.elementType.write(output, value[i]);\n }\n output.seekTo(beginning + this.size);\n }\n\n read(input: TB.ISerialInput): Parsed<Unwrap<TElement>>[] {\n if (this.isRuntimeSized) {\n throw new Error('Cannot read a runtime-sized array');\n }\n alignIO(input, this.byteAlignment);\n const elements: Parsed<Unwrap<TElement>>[] = [];\n for (let i = 0; i < this.elementCount; i++) {\n alignIO(input, this.byteAlignment);\n elements.push(this.elementType.read(input) as Parsed<Unwrap<TElement>>);\n }\n alignIO(input, this.byteAlignment);\n return elements;\n }\n\n measure(\n _: MaxValue | Parsed<Unwrap<TElement>>[],\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n if (this.isRuntimeSized) {\n return measurer.unbounded;\n }\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.size);\n }\n\n resolve(ctx: ResolutionCtx): string {\n const elementTypeResolved = ctx.resolve(this.elementType);\n const arrayType = this.isRuntimeSized\n ? `array<${elementTypeResolved}>`\n : `array<${elementTypeResolved}, ${this.elementCount}>`;\n return ctx.resolve(arrayType);\n }\n}\n\nclass TgpuLooseArrayImpl<TElement extends AnyTgpuData | AnyTgpuLooseData>\n extends Schema<Unwrap<TElement>[]>\n implements TgpuLooseArray<TElement>\n{\n public readonly byteAlignment: number;\n public readonly size: number;\n public readonly stride: number;\n public readonly isLoose = true;\n\n constructor(\n public readonly elementType: TElement,\n public readonly elementCount: number,\n ) {\n super();\n this.byteAlignment = getCustomAlignment(elementType) ?? 1;\n this.stride = roundUp(elementType.size, this.byteAlignment);\n this.size = this.stride * elementCount;\n }\n\n write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]) {\n alignIO(output, this.byteAlignment);\n const beginning = output.currentByteOffset;\n for (let i = 0; i < Math.min(this.elementCount, value.length); i++) {\n alignIO(output, this.byteAlignment);\n this.elementType.write(output, value[i]);\n }\n output.seekTo(beginning + this.size);\n }\n\n read(input: TB.ISerialInput): Parsed<Unwrap<TElement>>[] {\n alignIO(input, this.byteAlignment);\n const elements: Parsed<Unwrap<TElement>>[] = [];\n for (let i = 0; i < this.elementCount; i++) {\n alignIO(input, this.byteAlignment);\n elements.push(this.elementType.read(input) as Parsed<Unwrap<TElement>>);\n }\n alignIO(input, this.byteAlignment);\n return elements;\n }\n\n measure(\n _: MaxValue | Parsed<Unwrap<TElement>>[],\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.size);\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","import {\n type IMeasurer,\n type IRefResolver,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type Parsed,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport {\n type AnyTgpuData,\n type AnyTgpuLooseData,\n type ResolutionCtx,\n type TgpuData,\n type TgpuLooseData,\n isDataLoose,\n isDataNotLoose,\n} from '../types';\nimport alignIO from './alignIO';\n\n// ----------\n// Public API\n// ----------\n\nexport interface Align<T extends number> {\n type: 'align';\n alignment: T;\n}\n\nexport interface Size<T extends number> {\n type: 'size';\n size: T;\n}\n\nexport interface Location<T extends number> {\n type: 'location';\n location: T;\n}\n\nexport type AnyAttribute = Align<number> | Size<number> | Location<number>;\n\nexport interface BaseDecorated<\n TInner extends AnyTgpuData | AnyTgpuLooseData =\n | AnyTgpuData\n | AnyTgpuLooseData,\n TAttribs extends AnyAttribute[] = AnyAttribute[],\n> {\n readonly inner: TInner;\n readonly attributes: TAttribs;\n\n // Easy access to all attributes, if they exist\n readonly alignAttrib: number | undefined;\n readonly sizeAttrib: number | undefined;\n readonly locationAttrib: number | undefined;\n}\n\nexport interface Decorated<\n TInner extends AnyTgpuData,\n TAttribs extends AnyAttribute[],\n> extends BaseDecorated<TInner, TAttribs>,\n TgpuData<Unwrap<TInner>> {}\n\nexport interface LooseDecorated<\n TInner extends AnyTgpuLooseData,\n TAttribs extends AnyAttribute[],\n> extends BaseDecorated<TInner, TAttribs>,\n TgpuLooseData<Unwrap<TInner>> {}\n\nexport type ExtractAttributes<T> = T extends BaseDecorated<\n AnyTgpuData,\n infer Attribs\n>\n ? Attribs\n : [];\n\nexport type UnwrapDecorated<T> = T extends BaseDecorated<infer Inner>\n ? Inner\n : 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 AnyTgpuData | AnyTgpuLooseData,\n TAttrib extends AnyAttribute,\n> = TData extends AnyTgpuData\n ? Decorated<UnwrapDecorated<TData>, [TAttrib, ...ExtractAttributes<TData>]>\n : TData extends AnyTgpuLooseData\n ? LooseDecorated<\n UnwrapDecorated<TData>,\n [TAttrib, ...ExtractAttributes<TData>]\n >\n : never;\n\nexport function attribute<\n TData extends AnyTgpuData | AnyTgpuLooseData,\n TAttrib extends AnyAttribute,\n>(data: TData, attrib: TAttrib) {\n if (isDecorated(data)) {\n return new DecoratedImpl(data.inner, [attrib, ...data.attributes]);\n }\n\n if (isLooseDecorated(data)) {\n return new LooseDecoratedImpl(data.inner, [attrib, ...data.attributes]);\n }\n\n if (isDataLoose(data)) {\n return new LooseDecoratedImpl(data, [attrib]);\n }\n\n return new DecoratedImpl(data, [attrib]);\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<\n TAlign extends number,\n TData extends AnyTgpuData | AnyTgpuLooseData,\n>(alignment: TAlign, data: TData): Decorate<TData, Align<TAlign>> {\n return attribute(data, { type: 'align', alignment }) as Decorate<\n TData,\n Align<TAlign>\n >;\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<\n TSize extends number,\n TData extends AnyTgpuData | AnyTgpuLooseData,\n>(size: TSize, data: TData): Decorate<TData, Size<TSize>> {\n return attribute(data, { type: 'size', size }) as Decorate<\n TData,\n Size<TSize>\n >;\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<\n TLocation extends number,\n TData extends AnyTgpuData | AnyTgpuLooseData,\n>(location: TLocation, data: TData): Decorate<TData, Location<TLocation>> {\n return attribute(data, { type: 'location', location }) as Decorate<\n TData,\n Location<TLocation>\n >;\n}\n\nexport function isDecorated<T extends Decorated<AnyTgpuData, AnyAttribute[]>>(\n value: T | unknown,\n): value is T {\n return value instanceof DecoratedImpl;\n}\n\nexport function isLooseDecorated<\n T extends LooseDecorated<AnyTgpuLooseData, AnyAttribute[]>,\n>(value: T | unknown): value is T {\n return value instanceof LooseDecoratedImpl;\n}\n\nexport function getCustomAlignment(\n data: AnyTgpuData | AnyTgpuLooseData,\n): number | undefined {\n return (data as unknown as BaseDecorated).alignAttrib;\n}\n\nexport function getCustomLocation(\n data: AnyTgpuData | AnyTgpuLooseData,\n): number | undefined {\n return (data as unknown as BaseDecorated).locationAttrib;\n}\n\nexport function getAttributesString<T extends AnyTgpuData>(field: T): string {\n if (!isDecorated(field) && !isLooseDecorated(field)) {\n return '';\n }\n\n return field.attributes\n .map((attrib) => {\n if (attrib.type === 'align') {\n return `@align(${attrib.alignment}) `;\n }\n\n if (attrib.type === 'size') {\n return `@size(${attrib.size}) `;\n }\n\n if (attrib.type === 'location') {\n return `@location(${attrib.location}) `;\n }\n\n return '';\n })\n .join('');\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass BaseDecoratedImpl<\n TInner extends AnyTgpuData | AnyTgpuLooseData,\n TAttribs extends AnyAttribute[],\n> {\n // Type-token, not available at runtime\n public readonly __unwrapped!: Unwrap<TInner>;\n\n public readonly label?: string | undefined;\n public readonly byteAlignment: number;\n public readonly size: number;\n\n public readonly alignAttrib: number | undefined;\n public readonly sizeAttrib: number | undefined;\n public readonly locationAttrib: number | undefined;\n\n constructor(\n public readonly inner: TInner,\n public readonly attributes: TAttribs,\n ) {\n this.alignAttrib = attributes.find(\n (a): a is Align<number> => a.type === 'align',\n )?.alignment;\n this.sizeAttrib = attributes.find(\n (a): a is Size<number> => a.type === 'size',\n )?.size;\n this.locationAttrib = attributes.find(\n (a): a is Location<number> => a.type === 'location',\n )?.location;\n\n this.byteAlignment = this.alignAttrib ?? inner.byteAlignment;\n this.size = this.measure(MaxValue).size;\n\n if (this.byteAlignment <= 0) {\n throw new Error(\n `Custom data alignment must be a positive number, got: ${this.byteAlignment}.`,\n );\n }\n\n if (Math.log2(this.byteAlignment) % 1 !== 0) {\n throw new Error(\n `Alignment has to be a power of 2, got: ${this.byteAlignment}.`,\n );\n }\n\n if (isDataNotLoose(this.inner)) {\n if (this.byteAlignment % this.inner.byteAlignment !== 0) {\n throw new Error(\n `Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${this.byteAlignment}, expected multiple of: ${this.inner.byteAlignment}.`,\n );\n }\n }\n\n if (this.size < this.inner.size) {\n throw new Error(\n `Custom data size cannot be smaller then the standard data size. Got: ${this.size}, expected at least: ${this.inner.size}.`,\n );\n }\n\n if (this.size <= 0) {\n throw new Error(\n `Custom data size must be a positive number. Got: ${this.size}.`,\n );\n }\n }\n\n resolveReferences(_: IRefResolver): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<Unwrap<TInner>>): void {\n alignIO(output, this.alignAttrib ?? 1);\n\n const beginning = output.currentByteOffset;\n this.inner.write(output, value);\n output.seekTo(beginning + this.size);\n }\n\n read(input: ISerialInput): Parsed<Unwrap<TInner>> {\n alignIO(input, this.alignAttrib ?? 1);\n\n const beginning = input.currentByteOffset;\n const value = this.inner.read(input) as Parsed<Unwrap<TInner>>;\n input.seekTo(beginning + this.size);\n return value;\n }\n\n measure(\n value: MaxValue | Parsed<Unwrap<TInner>>,\n measurer: IMeasurer | undefined = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.alignAttrib ?? 1);\n\n if (this.sizeAttrib !== undefined) {\n return measurer.add(this.sizeAttrib);\n }\n\n return this.inner.measure(value, measurer);\n }\n\n seekProperty(\n reference: MaxValue | Parsed<Unwrap<TInner>>,\n prop: keyof Unwrap<TInner>,\n ): { bufferOffset: number; schema: ISchema<unknown> } | null {\n return this.inner.seekProperty(reference, prop as never);\n }\n}\n\nclass DecoratedImpl<TInner extends AnyTgpuData, TAttribs extends AnyAttribute[]>\n extends BaseDecoratedImpl<TInner, TAttribs>\n implements Decorated<TInner, TAttribs>\n{\n public readonly isLoose = false as const;\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this.inner);\n }\n}\n\nclass LooseDecoratedImpl<\n TInner extends AnyTgpuLooseData,\n TAttribs extends AnyAttribute[],\n >\n extends BaseDecoratedImpl<TInner, TAttribs>\n implements LooseDecorated<TInner, TAttribs>\n{\n public readonly isLoose = true as const;\n}\n","import {\n type IMeasurer,\n type IRefResolver,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n f32,\n i32,\n u32,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport { inGPUMode } from '../gpuMode';\nimport type { NumberArrayView, TgpuData } from '../types';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<ValueType> {\n unitType: ISchema<number>;\n byteAlignment: number;\n length: number;\n label: string;\n make: (...args: number[]) => ValueType;\n makeFromScalar: (value: number) => ValueType;\n}\n\ntype VecSchemaBase<ValueType> = TgpuData<ValueType> & {\n kind: string;\n expressionCode: string; // TODO: to remove\n toString(): string;\n};\n\nfunction makeVecSchema<ValueType extends vecBase>(\n options: VecSchemaOptions<ValueType>,\n): VecSchemaBase<ValueType> & ((...args: number[]) => ValueType) {\n const VecSchema: VecSchemaBase<ValueType> = {\n // Type-token, not available at runtime\n __unwrapped: undefined as unknown as ValueType,\n isLoose: false as const,\n\n size: options.length * 4,\n label: options.label,\n byteAlignment: options.byteAlignment,\n kind: options.label,\n expressionCode: options.label,\n\n resolveReferences(ctx: IRefResolver): void {\n throw new RecursiveDataTypeError();\n },\n\n write(output: ISerialOutput, value: Parsed<ValueType>): void {\n for (const element of value) {\n options.unitType.write(output, element);\n }\n },\n\n read(input: ISerialInput): Parsed<ValueType> {\n return options.make(\n ...Array.from({ length: options.length }).map((_) =>\n options.unitType.read(input),\n ),\n ) as Parsed<ValueType>;\n },\n\n measure(\n _value: Parsed<ValueType> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return measurer.add(this.size);\n },\n\n seekProperty(\n _reference: Parsed<ValueType> | MaxValue,\n _prop: never,\n ): { bufferOffset: number; schema: ISchema<unknown> } | null {\n throw new Error('Method not implemented.');\n },\n\n resolve(): string {\n return options.label;\n },\n\n toString(): string {\n return options.label;\n },\n };\n\n const construct = (...args: number[]): ValueType => {\n const values = args; // TODO: Allow users to pass in vectors that fill part of the values.\n\n if (inGPUMode()) {\n return `${VecSchema.kind}(${values.join(', ')})` as unknown as ValueType;\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.label}' constructor called with invalid number of arguments.`,\n );\n };\n\n return Object.assign(construct, VecSchema);\n}\n\nabstract class vec2Impl implements vec2 {\n public readonly length = 2;\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\nclass vec2fImpl extends vec2Impl {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec2iImpl extends vec2Impl {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec2uImpl extends vec2Impl {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec3Impl implements vec3 {\n public readonly length = 3;\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\nclass vec3fImpl extends vec3Impl {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec3iImpl extends vec3Impl {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec3uImpl extends vec3Impl {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec4Impl implements vec4 {\n public readonly length = 4;\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\nclass vec4fImpl extends vec4Impl {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec4iImpl extends vec4Impl {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec4uImpl extends vec4Impl {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\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\ninterface vec2 extends NumberArrayView {\n x: number;\n y: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec3 extends NumberArrayView {\n x: number;\n y: number;\n z: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec4 extends NumberArrayView {\n x: number;\n y: number;\n z: number;\n w: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\nconst vecProxyHandler: ProxyHandler<vecBase> = {\n get: (target, prop) => {\n if (typeof prop === 'symbol' || !Number.isNaN(Number.parseInt(prop))) {\n return Reflect.get(target, prop);\n }\n\n const targetAsVec4 = target as unknown as vec4uImpl;\n const values = new Array(prop.length) as number[];\n\n let idx = 0;\n for (const char of prop as string) {\n switch (char) {\n case 'x':\n values[idx] = targetAsVec4.x;\n break;\n case 'y':\n values[idx] = targetAsVec4.y;\n break;\n case 'z':\n values[idx] = targetAsVec4.z;\n break;\n case 'w':\n values[idx] = targetAsVec4.w;\n break;\n default:\n return Reflect.get(targetAsVec4, prop);\n }\n idx++;\n }\n\n if (prop.length === 4) {\n return new Proxy(\n targetAsVec4.make4(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n values[3] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 3) {\n return new Proxy(\n targetAsVec4.make3(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 2) {\n return new Proxy(\n targetAsVec4.make2(values[0] as number, values[1] as number),\n vecProxyHandler,\n );\n }\n\n return Reflect.get(target, prop);\n },\n};\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Type encompassing all available kinds of vector.\n */\nexport type VecKind =\n | 'vec2f'\n | 'vec2i'\n | 'vec2u'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u';\n\n/**\n * Common interface for all vector types, no matter their size and inner type.\n */\nexport interface vecBase {\n kind: VecKind;\n [Symbol.iterator](): Iterator<number>;\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec2f or vec2<f32>.\n * A vector with 2 elements of type d.f32\n */\nexport interface vec2f extends vec2, Swizzle2<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2f';\n}\n/**\n * Interface representing its WGSL vector type counterpart: vec2i or vec2<i32>.\n * A vector with 2 elements of type d.i32\n */\nexport interface vec2i extends vec2, Swizzle2<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2i';\n}\n/**\n * Interface representing its WGSL vector type counterpart: vec2u or vec2<u32>.\n * A vector with 2 elements of type d.u32\n */\nexport interface vec2u extends vec2, Swizzle2<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2u';\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec3f or vec3<f32>.\n * A vector with 3 elements of type d.f32\n */\nexport interface vec3f extends vec3, Swizzle3<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3f';\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec3i or vec3<i32>.\n * A vector with 3 elements of type d.i32\n */\nexport interface vec3i extends vec3, Swizzle3<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3i';\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec3u or vec3<u32>.\n * A vector with 3 elements of type d.u32\n */\nexport interface vec3u extends vec3, Swizzle3<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3u';\n}\n\n/**\n * Interface representing its WGSL vector type counterpart: vec4f or vec4<f32>.\n * A vector with 4 elements of type d.f32\n */\nexport interface vec4f extends vec4, Swizzle4<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4f';\n}\n/**\n * Interface representing its WGSL vector type counterpart: vec4i or vec4<i32>.\n * A vector with 4 elements of type d.i32\n */\nexport interface vec4i extends vec4, Swizzle4<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4i';\n}\n/**\n * Interface representing its WGSL vector type counterpart: vec4u or vec4<u32>.\n * A vector with 4 elements of type d.u32\n */\nexport interface vec4u extends vec4, Swizzle4<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4u';\n}\n\n/**\n * Type of the `d.vec2f` object/function: vector data type schema/constructor\n */\nexport type Vec2f = TgpuData<vec2f> & { kind: 'vec2f' } & ((\n x: number,\n y: number,\n ) => vec2f) &\n ((xy: number) => vec2f) &\n (() => vec2f);\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 unitType: f32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2f',\n make: (x: number, y: number) =>\n new Proxy(new vec2fImpl(x, y), vecProxyHandler) as vec2f,\n makeFromScalar: (x) =>\n new Proxy(new vec2fImpl(x, x), vecProxyHandler) as vec2f,\n}) as Vec2f;\n\n/**\n * Type of the `d.vec2i` object/function: vector data type schema/constructor\n */\nexport type Vec2i = TgpuData<vec2i> & { kind: 'vec2i' } & ((\n x: number,\n y: number,\n ) => vec2i) &\n ((xy: number) => vec2i) &\n (() => vec2i);\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 unitType: i32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2i',\n make: (x: number, y: number) =>\n new Proxy(new vec2iImpl(x, y), vecProxyHandler) as vec2i,\n makeFromScalar: (x) =>\n new Proxy(new vec2iImpl(x, x), vecProxyHandler) as vec2i,\n}) as Vec2i;\n\n/**\n * Type of the `d.vec2u` object/function: vector data type schema/constructor\n */\nexport type Vec2u = TgpuData<vec2u> & { kind: 'vec2u' } & ((\n x: number,\n y: number,\n ) => vec2u) &\n ((xy: number) => vec2u) &\n (() => vec2u);\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 unitType: u32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2u',\n make: (x: number, y: number) =>\n new Proxy(new vec2uImpl(x, y), vecProxyHandler) as vec2u,\n makeFromScalar: (x) =>\n new Proxy(new vec2uImpl(x, x), vecProxyHandler) as vec2u,\n}) as Vec2u;\n\n/**\n * Type of the `d.vec3f` object/function: vector data type schema/constructor\n */\nexport type Vec3f = TgpuData<vec3f> & { kind: 'vec3f' } & ((\n x: number,\n y: number,\n z: number,\n ) => vec3f) &\n ((xyz: number) => vec3f) &\n (() => vec3f);\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 unitType: f32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3f',\n make: (x, y, z) =>\n new Proxy(new vec3fImpl(x, y, z), vecProxyHandler) as vec3f,\n makeFromScalar: (x) =>\n new Proxy(new vec3fImpl(x, x, x), vecProxyHandler) as vec3f,\n}) as Vec3f;\n\n/**\n * Type of the `d.vec3i` object/function: vector data type schema/constructor\n */\nexport type Vec3i = TgpuData<vec3i> & { kind: 'vec3i' } & ((\n x: number,\n y: number,\n z: number,\n ) => vec3i) &\n ((xyz: number) => vec3i) &\n (() => vec3i);\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 unitType: i32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3i',\n make: (x, y, z) =>\n new Proxy(new vec3iImpl(x, y, z), vecProxyHandler) as vec3i,\n makeFromScalar: (x) =>\n new Proxy(new vec3iImpl(x, x, x), vecProxyHandler) as vec3i,\n}) as Vec3i;\n\n/**\n * Type of the `d.vec3u` object/function: vector data type schema/constructor\n */\nexport type Vec3u = TgpuData<vec3u> & { kind: 'vec3u' } & ((\n x: number,\n y: number,\n z: number,\n ) => vec3u) &\n ((xyz: number) => vec3u) &\n (() => vec3u);\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 unitType: u32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3u',\n make: (x, y, z) =>\n new Proxy(new vec3uImpl(x, y, z), vecProxyHandler) as vec3u,\n makeFromScalar: (x) =>\n new Proxy(new vec3uImpl(x, x, x), vecProxyHandler) as vec3u,\n}) as Vec3u;\n\n/**\n * Type of the `d.vec4f` object/function: vector data type schema/constructor\n */\nexport type Vec4f = TgpuData<vec4f> & { kind: 'vec4f' } & ((\n x: number,\n y: number,\n z: number,\n w: number,\n ) => vec4f) &\n ((xyzw: number) => vec4f) &\n (() => vec4f);\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 unitType: f32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4f',\n make: (x, y, z, w) =>\n new Proxy(new vec4fImpl(x, y, z, w), vecProxyHandler) as vec4f,\n makeFromScalar: (x) =>\n new Proxy(new vec4fImpl(x, x, x, x), vecProxyHandler) as vec4f,\n}) as Vec4f;\n\n/**\n * Type of the `d.vec4i` object/function: vector data type schema/constructor\n */\nexport type Vec4i = TgpuData<vec4i> & { kind: 'vec4i' } & ((\n x: number,\n y: number,\n z: number,\n w: number,\n ) => vec4i) &\n ((xyzw: number) => vec4i) &\n (() => vec4i);\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 unitType: i32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4i',\n make: (x, y, z, w) =>\n new Proxy(new vec4iImpl(x, y, z, w), vecProxyHandler) as vec4i,\n makeFromScalar: (x) =>\n new Proxy(new vec4iImpl(x, x, x, x), vecProxyHandler) as vec4i,\n}) as Vec4i;\n\n/**\n * Type of the `d.vec4u` object/function: vector data type schema/constructor\n */\nexport type Vec4u = TgpuData<vec4u> & { kind: 'vec4u' } & ((\n x: number,\n y: number,\n z: number,\n w: number,\n ) => vec4u) &\n ((xyzw: number) => vec4u) &\n (() => vec4u);\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 unitType: u32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4u',\n make: (x, y, z, w) =>\n new Proxy(new vec4uImpl(x, y, z, w), vecProxyHandler) as vec4u,\n makeFromScalar: (x) =>\n new Proxy(new vec4uImpl(x, x, x, x), vecProxyHandler) as vec4u,\n}) as Vec4u;\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport { roundUp } from '../mathUtils';\nimport type { NumberArrayView, TgpuData } from '../types';\nimport { vec2f, vec3f, vec4f, type vecBase } from './vector';\n\n// --------------\n// Implementation\n// --------------\n\ninterface MatSchemaOptions<ValueType, ColumnType extends vecBase> {\n label: string;\n columnType: TgpuData<ColumnType>;\n rows: number;\n columns: number;\n makeFromColumnVectors(...columns: ColumnType[]): ValueType;\n makeFromElements(...elements: number[]): ValueType;\n}\n\ntype MatSchema<\n ValueType extends matBase<ColumnType>,\n ColumnType extends vecBase,\n> = TgpuData<ValueType> & ((...args: (number | ColumnType)[]) => ValueType);\n\nfunction createMatSchema<\n ValueType extends matBase<ColumnType>,\n ColumnType extends vecBase,\n>(\n options: MatSchemaOptions<ValueType, ColumnType>,\n): MatSchema<ValueType, ColumnType> {\n const MatSchema: TgpuData<ValueType> = {\n // Type-token, not available at runtime.\n __unwrapped: undefined as unknown as ValueType,\n isLoose: false as const,\n\n label: options.label,\n byteAlignment: options.columnType.byteAlignment,\n size: roundUp(\n options.columnType.size * options.columns,\n options.columnType.byteAlignment,\n ),\n\n resolveReferences() {\n throw new RecursiveDataTypeError();\n },\n\n write(output: ISerialOutput, value: Parsed<ValueType>): void {\n for (const col of value.columns) {\n options.columnType.write(output, col as Parsed<ColumnType>);\n }\n },\n\n read(input: ISerialInput): Parsed<ValueType> {\n const columns = new Array(options.columns) as ColumnType[];\n\n for (let c = 0; c < options.columns; ++c) {\n columns[c] = options.columnType.read(input) as ColumnType;\n }\n\n return options.makeFromColumnVectors(...columns) as Parsed<ValueType>;\n },\n\n measure(_value: MaxValue, measurer: IMeasurer = new Measurer()): IMeasurer {\n return measurer.add(this.size);\n },\n\n seekProperty() {\n throw new Error('Method not implemented.');\n },\n\n resolve(): string {\n return options.label;\n },\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 elements.push(...arg);\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);\n}\n\ninterface matBase<TColumn> extends NumberArrayView {\n readonly columns: readonly TColumn[];\n elements(): Iterable<number>;\n}\n\nabstract class mat2x2Impl<TColumn extends vec2f> 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 *elements() {\n yield* this.columns[0];\n yield* this.columns[1];\n }\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<vec2f> implements mat2x2f {\n makeColumn(e0: number, e1: number): vec2f {\n return vec2f(e0, e1);\n }\n}\n\nabstract class mat3x3Impl<TColumn extends vec3f> 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 *elements() {\n yield* this.columns[0];\n yield* this.columns[1];\n yield* this.columns[2];\n }\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<vec3f> implements mat3x3f {\n makeColumn(x: number, y: number, z: number): vec3f {\n return vec3f(x, y, z);\n }\n}\n\nabstract class mat4x4Impl<TColumn extends vec4f> 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 *elements() {\n yield* this.columns[0];\n yield* this.columns[1];\n yield* this.columns[2];\n yield* this.columns[3];\n }\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<vec4f> implements mat4x4f {\n makeColumn(x: number, y: number, z: number, w: number): vec4f {\n return vec4f(x, y, z, w);\n }\n}\n\n// ----------\n// Public API\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 */\ninterface 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 mat2x2f extends mat2x2<vec2f> {}\n\n/**\n * Type of the `d.mat2x2f` object/function: matrix data type schema/constructor\n */\nexport type Mat2x2f = TgpuData<mat2x2f> &\n ((...elements: number[]) => mat2x2f) &\n ((...columns: vec2f[]) => mat2x2f) &\n (() => mat2x2f);\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({\n label: 'mat2x2f',\n columnType: vec2f,\n rows: 2,\n columns: 2,\n makeFromColumnVectors: (...columns: [vec2f, vec2f]) =>\n new mat2x2fImpl(...columns[0], ...columns[1]),\n makeFromElements: (...elements: number[]) => new mat2x2fImpl(...elements),\n}) as Mat2x2f;\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 */\ninterface 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 mat3x3f extends mat3x3<vec3f> {}\n\n/**\n * Type of the `d.mat3x3f` object/function: matrix data type schema/constructor\n */\nexport type Mat3x3f = TgpuData<mat3x3f> &\n ((...elements: number[]) => mat3x3f) &\n ((...columns: vec3f[]) => mat3x3f) &\n (() => mat3x3f);\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({\n label: 'mat3x3f',\n columnType: vec3f,\n rows: 3,\n columns: 3,\n makeFromColumnVectors(...[v0, v1, v2]: [vec3f, vec3f, vec3f]) {\n return new mat3x3fImpl(...v0, ...v1, ...v2);\n },\n makeFromElements: (...elements: number[]) => new mat3x3fImpl(...elements),\n}) as Mat3x3f;\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 */\ninterface 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 mat4x4f extends mat4x4<vec4f> {}\n\n/**\n * Type of the `d.mat4x4f` object/function: matrix data type schema/constructor\n */\nexport type Mat4x4f = TgpuData<mat4x4f> &\n ((...elements: number[]) => mat4x4f) &\n ((...columns: vec4f[]) => mat4x4f) &\n (() => mat4x4f);\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({\n label: 'mat4x4f',\n columnType: vec4f,\n rows: 4,\n columns: 4,\n makeFromColumnVectors(...[v0, v1, v2, v3]: [vec4f, vec4f, vec4f, vec4f]) {\n return new mat4x4fImpl(...v0, ...v1, ...v2, ...v3);\n },\n makeFromElements: (...elements: number[]) => new mat4x4fImpl(...elements),\n}) as Mat4x4f;\n","import type {\n IMeasurer,\n ISerialInput,\n ISerialOutput,\n MaxValue,\n Parsed,\n} from 'typed-binary';\nimport { BufferReader, Measurer, Schema } from 'typed-binary';\nimport type { VertexFormat } from '../shared/vertexFormat';\nimport type { TgpuLooseData } from '../types';\nimport { f32, i32, u32 } from './numeric';\nimport {\n type Vec2f,\n type Vec2i,\n type Vec2u,\n type Vec3f,\n type Vec3i,\n type Vec3u,\n type Vec4f,\n type Vec4i,\n type Vec4u,\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 extends TgpuLooseData<FormatToWGSLType<T>> {\n readonly kind: T;\n}\n\nclass TgpuVertexFormatDataImpl<T extends VertexFormat>\n extends Schema<FormatToWGSLType<T>>\n implements TgpuVertexFormatData<T>\n{\n private underlyingType: FormatToWGSLType<T>;\n private elementSize: 1 | 2 | 4;\n private elementCount: number;\n private isSigned: boolean;\n readonly byteAlignment = 1;\n readonly isLoose = true;\n\n constructor(\n readonly size: number,\n readonly kind: T,\n ) {\n super();\n this.underlyingType = formatToWGSLType[kind];\n this.isSigned = normalizedToIsSigned[kind] ?? false;\n this.elementCount = this.underlyingType.size / 4;\n const elementSize = size / this.elementCount;\n if (elementSize !== 1 && elementSize !== 2 && elementSize !== 4) {\n throw new Error('Invalid element size');\n }\n this.elementSize = elementSize;\n }\n\n write(\n output: ISerialOutput,\n value: Parsed<typeof this.underlyingType>,\n ): void {\n if (typeof value === 'number') {\n // since the value is not a vector, we can just write it directly\n // (all single component attributes are 32-bit)\n switch (this.underlyingType) {\n case u32:\n output.writeUint32(value);\n break;\n case f32:\n output.writeFloat32(value);\n break;\n case i32:\n output.writeInt32(value);\n break;\n default:\n throw new Error('Invalid underlying type');\n }\n return;\n }\n writeSizedVector(output, value, this.elementSize, this.isSigned);\n }\n\n read(input: ISerialInput): Parsed<typeof this.underlyingType> {\n const readBuffer = new ArrayBuffer(this.size);\n const readView = new DataView(readBuffer);\n for (let i = 0; i < this.size; i++) {\n readView.setUint8(i, input.readByte());\n }\n if (this.elementCount === 1) {\n switch (this.underlyingType) {\n case u32:\n return readView.getUint32(0) as Parsed<typeof this.underlyingType>;\n case f32:\n return readView.getFloat32(0) as Parsed<typeof this.underlyingType>;\n case i32:\n return readView.getInt32(0) as Parsed<typeof this.underlyingType>;\n default:\n throw new Error('Invalid underlying type');\n }\n }\n\n const vector = this.underlyingType as\n | Vec2u\n | Vec3u\n | Vec4u\n | Vec2f\n | Vec3f\n | Vec4f\n | Vec2i\n | Vec3i\n | Vec4i;\n const primitive =\n vectorKindToPrimitive[vector.label as keyof typeof vectorKindToPrimitive];\n\n const values = new Array(this.elementCount);\n const reader = new BufferReader(readBuffer);\n for (let i = 0; i < this.elementCount; i++) {\n values[i] = readSizedPrimitive(\n primitive,\n this.elementSize,\n reader,\n this.isSigned,\n );\n }\n\n switch (vector) {\n case vec2u:\n case vec2f:\n case vec2i:\n return vector(values[0], values[1]) as Parsed<\n typeof this.underlyingType\n >;\n case vec3u:\n case vec3f:\n case vec3i:\n return vector(values[0], values[1], values[2]) as Parsed<\n typeof this.underlyingType\n >;\n case vec4u:\n case vec4f:\n case vec4i:\n return vector(values[0], values[1], values[2], values[3]) as Parsed<\n typeof this.underlyingType\n >;\n default:\n throw new Error('Invalid underlying type');\n }\n }\n\n measure(\n _: Parsed<FormatToWGSLType<T>, Record<string, never>> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return measurer.add(this.size);\n }\n}\n\nconst vectorKindToPrimitive = {\n vec2u: 'u32',\n vec3u: 'u32',\n vec4u: 'u32',\n vec2f: 'f32',\n vec3f: 'f32',\n vec4f: 'f32',\n vec2i: 'i32',\n vec3i: 'i32',\n vec4i: 'i32',\n} as const;\n\nfunction writeSizedVector(\n output: ISerialOutput,\n value: vec2u | vec3u | vec4u | vec2f | vec3f | vec4f | vec2i | vec3i | vec4i,\n elementSize: 1 | 2 | 4,\n isSigned: boolean,\n): void {\n const primitive = vectorKindToPrimitive[value.kind];\n for (const entry of value) {\n writeSizedPrimitive(primitive, entry, elementSize, output, isSigned);\n }\n}\n\nfunction writeSizedPrimitive(\n primitive: 'u32' | 'f32' | 'i32',\n value: number,\n size: 1 | 2 | 4,\n output: ISerialOutput,\n floatSigned = true,\n): void {\n const buffer = new ArrayBuffer(size);\n const view = new DataView(buffer);\n\n const writef8 = (offset: number, value: number) => {\n const asInt = floatSigned ? value * 127 + 128 : value * 255;\n view.setUint8(offset, Math.floor(asInt));\n };\n const writef16 = (offset: number, value: number) => {\n const asInt = floatSigned ? value * 32767 + 32768 : value * 65535;\n view.setUint16(offset, Math.floor(asInt));\n };\n\n const setters = {\n u32: [view.setUint8, view.setUint16, view.setUint32],\n f32: [writef8, writef16, view.setFloat32],\n i32: [view.setInt8, view.setInt16, view.setInt32],\n };\n\n const setter = setters[primitive][Math.log2(size)];\n if (setter) {\n setter.call(view, 0, value);\n }\n for (let i = 0; i < size; i++) {\n output.writeByte(view.getUint8(i));\n }\n}\n\nfunction readSizedPrimitive(\n primitive: 'u32' | 'f32' | 'i32',\n size: 1 | 2 | 4,\n input: ISerialInput,\n floatSigned = true,\n): number {\n const buffer = new ArrayBuffer(size);\n const view = new DataView(buffer);\n for (let i = 0; i < size; i++) {\n view.setUint8(i, input.readByte());\n }\n\n const readf8 = (offset: number) => {\n const asInt = view.getUint8(offset);\n return floatSigned ? (asInt - 128) / 127 : asInt / 255;\n };\n const readf16 = (offset: number) => {\n const asInt = view.getUint16(offset);\n return floatSigned ? (asInt - 32768) / 32767 : asInt / 65535;\n };\n\n const getters = {\n u32: [view.getUint8, view.getUint16, view.getUint32],\n f32: [readf8, readf16, view.getFloat32],\n i32: [view.getInt8, view.getInt16, view.getInt32],\n };\n\n const getter = getters[primitive][Math.log2(size)];\n if (getter) {\n return getter.call(view, 0);\n }\n throw new Error('Invalid primitive');\n}\n\nconst formatToWGSLType = {\n uint8x2: vec2u,\n uint8x4: vec4u,\n sint8x2: vec2i,\n sint8x4: vec4i,\n unorm8x2: vec2f,\n unorm8x4: vec4f,\n snorm8x2: vec2f,\n snorm8x4: vec4f,\n uint16x2: vec2u,\n uint16x4: vec4u,\n sint16x2: vec2i,\n sint16x4: vec4i,\n unorm16x2: vec2f,\n unorm16x4: vec4f,\n snorm16x2: vec2f,\n snorm16x4: vec4f,\n float16x2: vec2f,\n float16x4: vec4f,\n float32: f32,\n float32x2: vec2f,\n float32x3: vec3f,\n float32x4: vec4f,\n uint32: u32,\n uint32x2: vec2u,\n uint32x3: vec3u,\n uint32x4: vec4u,\n sint32: i32,\n sint32x2: vec2i,\n sint32x3: vec3i,\n sint32x4: vec4i,\n unorm10_10_10_2: vec4f,\n} as const;\n\nconst normalizedToIsSigned = {\n unorm8x2: false,\n unorm8x4: false,\n snorm8x2: true,\n snorm8x4: true,\n unorm16x2: false,\n unorm16x4: false,\n snorm16x2: true,\n snorm16x4: true,\n float16x2: true,\n float16x4: true,\n unorm10_10_10_2: false,\n} as Record<VertexFormat, boolean | undefined>;\n\nexport type uint8x2 = TgpuVertexFormatData<'uint8x2'>;\nexport const uint8x2 = new TgpuVertexFormatDataImpl(2, 'uint8x2') as uint8x2;\n\nexport type uint8x4 = TgpuVertexFormatData<'uint8x4'>;\nexport const uint8x4 = new TgpuVertexFormatDataImpl(4, 'uint8x4') as uint8x4;\n\nexport type sint8x2 = TgpuVertexFormatData<'sint8x2'>;\nexport const sint8x2 = new TgpuVertexFormatDataImpl(2, 'sint8x2') as sint8x2;\n\nexport type sint8x4 = TgpuVertexFormatData<'sint8x4'>;\nexport const sint8x4 = new TgpuVertexFormatDataImpl(4, 'sint8x4') as sint8x4;\n\nexport type unorm8x2 = TgpuVertexFormatData<'unorm8x2'>;\nexport const unorm8x2 = new TgpuVertexFormatDataImpl(2, 'unorm8x2') as unorm8x2;\n\nexport type unorm8x4 = TgpuVertexFormatData<'unorm8x4'>;\nexport const unorm8x4 = new TgpuVertexFormatDataImpl(4, 'unorm8x4') as unorm8x4;\n\nexport type snorm8x2 = TgpuVertexFormatData<'snorm8x2'>;\nexport const snorm8x2 = new TgpuVertexFormatDataImpl(2, 'snorm8x2') as snorm8x2;\n\nexport type snorm8x4 = TgpuVertexFormatData<'snorm8x4'>;\nexport const snorm8x4 = new TgpuVertexFormatDataImpl(4, 'snorm8x4') as snorm8x4;\n\nexport type uint16x2 = TgpuVertexFormatData<'uint16x2'>;\nexport const uint16x2 = new TgpuVertexFormatDataImpl(4, 'uint16x2') as uint16x2;\n\nexport type uint16x4 = TgpuVertexFormatData<'uint16x4'>;\nexport const uint16x4 = new TgpuVertexFormatDataImpl(8, 'uint16x4') as uint16x4;\n\nexport type sint16x2 = TgpuVertexFormatData<'sint16x2'>;\nexport const sint16x2 = new TgpuVertexFormatDataImpl(4, 'sint16x2') as sint16x2;\n\nexport type sint16x4 = TgpuVertexFormatData<'sint16x4'>;\nexport const sint16x4 = new TgpuVertexFormatDataImpl(8, 'sint16x4') as sint16x4;\n\nexport type unorm16x2 = TgpuVertexFormatData<'unorm16x2'>;\nexport const unorm16x2 = new TgpuVertexFormatDataImpl(\n 4,\n 'unorm16x2',\n) as unorm16x2;\n\nexport type unorm16x4 = TgpuVertexFormatData<'unorm16x4'>;\nexport const unorm16x4 = new TgpuVertexFormatDataImpl(\n 8,\n 'unorm16x4',\n) as unorm16x4;\n\nexport type snorm16x2 = TgpuVertexFormatData<'snorm16x2'>;\nexport const snorm16x2 = new TgpuVertexFormatDataImpl(\n 4,\n 'snorm16x2',\n) as snorm16x2;\n\nexport type snorm16x4 = TgpuVertexFormatData<'snorm16x4'>;\nexport const snorm16x4 = new TgpuVertexFormatDataImpl(\n 8,\n 'snorm16x4',\n) as snorm16x4;\n\nexport type float16x2 = TgpuVertexFormatData<'float16x2'>;\nexport const float16x2 = new TgpuVertexFormatDataImpl(\n 4,\n 'float16x2',\n) as float16x2;\n\nexport type float16x4 = TgpuVertexFormatData<'float16x4'>;\nexport const float16x4 = new TgpuVertexFormatDataImpl(\n 8,\n 'float16x4',\n) as float16x4;\n\nexport type float32 = TgpuVertexFormatData<'float32'>;\nexport const float32 = new TgpuVertexFormatDataImpl(4, 'float32') as float32;\n\nexport type float32x2 = TgpuVertexFormatData<'float32x2'>;\nexport const float32x2 = new TgpuVertexFormatDataImpl(\n 8,\n 'float32x2',\n) as float32x2;\n\nexport type float32x3 = TgpuVertexFormatData<'float32x3'>;\nexport const float32x3 = new TgpuVertexFormatDataImpl(\n 12,\n 'float32x3',\n) as float32x3;\n\nexport type float32x4 = TgpuVertexFormatData<'float32x4'>;\nexport const float32x4 = new TgpuVertexFormatDataImpl(\n 16,\n 'float32x4',\n) as float32x4;\n\nexport type uint32 = TgpuVertexFormatData<'uint32'>;\nexport const uint32 = new TgpuVertexFormatDataImpl(4, 'uint32') as uint32;\n\nexport type uint32x2 = TgpuVertexFormatData<'uint32x2'>;\nexport const uint32x2 = new TgpuVertexFormatDataImpl(8, 'uint32x2') as uint32x2;\n\nexport type uint32x3 = TgpuVertexFormatData<'uint32x3'>;\nexport const uint32x3 = new TgpuVertexFormatDataImpl(\n 12,\n 'uint32x3',\n) as uint32x3;\n\nexport type uint32x4 = TgpuVertexFormatData<'uint32x4'>;\nexport const uint32x4 = new TgpuVertexFormatDataImpl(\n 16,\n 'uint32x4',\n) as uint32x4;\n\nexport type sint32 = TgpuVertexFormatData<'sint32'>;\nexport const sint32 = new TgpuVertexFormatDataImpl(4, 'sint32') as sint32;\n\nexport type sint32x2 = TgpuVertexFormatData<'sint32x2'>;\nexport const sint32x2 = new TgpuVertexFormatDataImpl(8, 'sint32x2') as sint32x2;\n\nexport type sint32x3 = TgpuVertexFormatData<'sint32x3'>;\nexport const sint32x3 = new TgpuVertexFormatDataImpl(\n 12,\n 'sint32x3',\n) as sint32x3;\n\nexport type sint32x4 = TgpuVertexFormatData<'sint32x4'>;\nexport const sint32x4 = new TgpuVertexFormatDataImpl(\n 16,\n 'sint32x4',\n) as sint32x4;\n\nexport type unorm10_10_10_2 = TgpuVertexFormatData<'unorm10_10_10_2'>;\nexport const unorm10_10_10_2 = new TgpuVertexFormatDataImpl(\n 4,\n 'unorm10_10_10_2',\n) as unorm10_10_10_2;\n","import type { AnyTgpuData, TgpuPointer } from '../types';\n\nexport function ptr<TDataType extends AnyTgpuData>(\n pointsTo: TDataType,\n): TgpuPointer<'function', TDataType> {\n return {\n scope: 'function',\n pointsTo,\n };\n}\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, TgpuData } from '../types';\nimport type { I32, U32 } from './numeric';\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<TSchema> {\n return new AtomicImpl(data);\n}\n\n/**\n * Atomic schema constructed via `d.atomic` function.\n */\nexport interface Atomic<TSchema extends U32 | I32>\n extends TgpuData<Unwrap<TSchema>> {}\n\n/**\n * Checks whether the passed in value is a d.atomic schema.\n *\n * @example\n * isAtomicSchema(d.atomic(d.u32)) // true\n * isAtomicSchema(d.u32) // false\n */\nexport function isAtomicSchema<T extends Atomic<U32 | I32>>(\n schema: T | unknown,\n): schema is T {\n return schema instanceof AtomicImpl;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass AtomicImpl<TSchema extends U32 | I32>\n extends Schema<Unwrap<TSchema>>\n implements Atomic<TSchema>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n public readonly isLoose = false as const;\n\n constructor(private readonly innerData: TSchema) {\n super();\n this.size = this.innerData.size;\n this.byteAlignment = this.innerData.byteAlignment;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n this.innerData.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n return this.innerData.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return this.innerData.measure(value, measurer);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return `atomic<${ctx.resolve(this.innerData)}>`;\n }\n}\n"],"mappings":"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","names":["MaxValue","Measurer","Schema","ResolutionError","_ResolutionError","cause","trace","entries","ancestor","newTrace","MissingSlotValueError","_MissingSlotValueError","slot","RecursiveDataTypeError","_RecursiveDataTypeError","NotUniformError","_NotUniformError","value","_a","SimpleTgpuData","Schema","schema","byteAlignment","code","__publicField","MaxValue","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx","TB","gpuDepth","onGPU","callback","inGPUMode","primitiveNumeric","schema","code","output","value","input","measurer","ctx","RecursiveDataTypeError","reference","prop","bool","SimpleTgpuData","u32Cast","v","inGPUMode","u32","i32Cast","i32","f32Cast","f32","MaxValue","Measurer","Schema","identifier","TgpuIdentifierImpl","__publicField","label","ctx","_a","builtinNames","builtinSymbolToName","name","builtinNameToSymbol","s","n","identifierMap","nameForBuiltin","key","idForBuiltin","id","identifier","UnknownData","isResolvable","value","isWgsl","isSamplerType","type","isDepthTextureType","type","isExternalTextureType","type","isDataLoose","data","isDataNotLoose","isGPUBuffer","value","isSlot","code","strings","params","segments","string","idx","param","TgpuCodeImpl","__publicField","label","ctx","s","isResolvable","result","eventual","idForBuiltin","slot","value","BoundTgpuCodeImpl","_a","_BoundTgpuCodeImpl","_innerFn","_slotValuePair","_b","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","Measurer","Schema","roundUp","value","modulo","bitMask","invBitMask","MaxValue","Measurer","attribute","data","attrib","isDecorated","DecoratedImpl","isLooseDecorated","LooseDecoratedImpl","isDataLoose","align","alignment","size","location","value","getCustomAlignment","getAttributesString","field","isDecorated","isLooseDecorated","attrib","BaseDecoratedImpl","inner","attributes","__publicField","_a","_b","_c","_d","a","MaxValue","isDataNotLoose","_","RecursiveDataTypeError","output","value","alignIO_default","beginning","input","measurer","Measurer","reference","prop","DecoratedImpl","ctx","LooseDecoratedImpl","arrayOf","elementType","count","TgpuArrayImpl","looseArrayOf","TgpuLooseArrayImpl","isArraySchema","schema","isLooseArraySchema","Schema","elementCount","__publicField","roundUp","output","value","alignIO_default","beginning","i","input","elements","_","measurer","Measurer","ctx","elementTypeResolved","arrayType","_a","getCustomAlignment","struct","properties","TgpuStructImpl","looseStruct","TgpuLooseStructImpl","isStructSchema","schema","isLooseStructSchema","generateField","key","field","code","getAttributesString","Schema","__publicField","prop","a","b","MaxValue","label","RecursiveDataTypeError","output","value","alignIO_default","property","input","result","measurer","Measurer","structMeasurer","maxing","isArraySchema","ctx","ident","identifier","Measurer","f32","i32","u32","makeVecSchema","options","VecSchema","ctx","RecursiveDataTypeError","output","value","element","input","_","_value","measurer","Measurer","_reference","_prop","args","_a","values","inGPUMode","vec2Impl","x","y","__publicField","vec2fImpl","_vec2fImpl","z","vec3fImpl","w","vec4fImpl","vec2iImpl","_vec2iImpl","vec3iImpl","vec4iImpl","vec2uImpl","_vec2uImpl","vec3uImpl","vec4uImpl","vec3Impl","_vec3fImpl","_vec3iImpl","_vec3uImpl","vec4Impl","_vec4fImpl","_vec4iImpl","_vec4uImpl","vecProxyHandler","target","prop","targetAsVec4","idx","char","vec2f","f32","vec2i","i32","vec2u","u32","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","Measurer","createMatSchema","options","MatSchema","roundUp","RecursiveDataTypeError","output","value","col","input","columns","c","_value","measurer","Measurer","args","elements","arg","i","mat2x2Impl","__publicField","__yieldStar","mat2x2fImpl","e0","e1","vec2f","mat3x3Impl","_","mat3x3fImpl","x","y","z","vec3f","mat4x4Impl","mat4x4fImpl","w","vec4f","mat2x2f","mat3x3f","v0","v1","v2","mat4x4f","v3","BufferReader","Measurer","Schema","TgpuVertexFormatDataImpl","Schema","size","kind","_a","__publicField","formatToWGSLType","normalizedToIsSigned","elementSize","output","value","u32","f32","i32","writeSizedVector","input","readBuffer","readView","i","vector","primitive","vectorKindToPrimitive","values","reader","BufferReader","readSizedPrimitive","vec2u","vec2f","vec2i","vec3u","vec3f","vec3i","vec4u","vec4f","vec4i","_","measurer","Measurer","isSigned","entry","writeSizedPrimitive","floatSigned","buffer","view","writef8","offset","asInt","writef16","setter","readf8","readf16","getter","uint8x2","uint8x4","sint8x2","sint8x4","unorm8x2","unorm8x4","snorm8x2","snorm8x4","uint16x2","uint16x4","sint16x2","sint16x4","unorm16x2","unorm16x4","snorm16x2","snorm16x4","float16x2","float16x4","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","unorm10_10_10_2","ptr","pointsTo","Measurer","Schema","atomic","data","AtomicImpl","isAtomicSchema","schema","Schema","innerData","__publicField","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx"]}
|
package/chunk-SBJR5ZQJ.cjs
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var Ke=Object.defineProperty,He=Object.defineProperties;var qe=Object.getOwnPropertyDescriptors;var G=Object.getOwnPropertySymbols;var Pe=Object.prototype.hasOwnProperty,_e=Object.prototype.propertyIsEnumerable;var ue=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e);var ie=(e,t,n)=>t in e?Ke(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Rt= exports.a =(e,t)=>{for(var n in t||(t={}))Pe.call(t,n)&&ie(e,n,t[n]);if(G)for(var n of G(t))_e.call(t,n)&&ie(e,n,t[n]);return e},Ct= exports.b =(e,t)=>He(e,qe(t));var Ut=(e,t)=>{var n={};for(var r in e)Pe.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&G)for(var r of G(e))t.indexOf(r)<0&&_e.call(e,r)&&(n[r]=e[r]);return n};var s=(e,t,n)=>(ie(e,typeof t!="symbol"?t+"":t,n),n);var Je=function(e,t){this[0]=e,this[1]=t};var f=e=>{var t=e[ue("asyncIterator")],n=!1,r,a={};return t==null?(t=e[ue("iterator")](),r=o=>a[o]=i=>t[o](i)):(t=t.call(e),r=o=>a[o]=i=>{if(n){if(n=!1,o==="throw")throw i;return i}return n=!0,{done:!1,value:new Je(new Promise(y=>{var h=t[o](i);if(!(h instanceof Object))throw TypeError("Object expected");y(h)}),1)}}),a[ue("iterator")]=()=>a,r("next"),"throw"in t?r("throw"):a.throw=o=>{throw o},"return"in t&&r("return"),a};var _typedbinary = require('typed-binary'); var w = _interopRequireWildcard(_typedbinary);var Re=class e extends Error{constructor(n,r){let a=r.map(o=>`- ${o}`);a.length>20&&(a=[...a.slice(0,11),"...",...a.slice(-10)]);super(`Resolution of the following tree failed:
|
2
|
-
${a.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)}},Ce= exports.h =class e extends Error{constructor(n){super(`Missing value for '${n}'`);this.slot=n;Object.setPrototypeOf(this,e.prototype)}},p= exports.i =class e extends Error{constructor(){super("Recursive types are not supported in WGSL"),Object.setPrototypeOf(this,e.prototype)}},Ue= exports.j =class e extends Error{constructor(t){var n;super(`Buffer '${(n=t.label)!=null?n:"<unnamed>"}' is not bindable as a uniform. Use .$usage(tgu.Uniform) to allow it.`),Object.setPrototypeOf(this,e.prototype)}};var K=class extends _typedbinary.Schema{constructor({schema:n,byteAlignment:r,code:a}){super();s(this,"size");s(this,"byteAlignment");s(this,"expressionCode");s(this,"_innerSchema");s(this,"isLoose",!1);s(this,"label");this._innerSchema=n,this.byteAlignment=r,this.expressionCode=a,this.size=this.measure(_typedbinary.MaxValue).size,this.label=a}resolveReferences(){throw new p}write(n,r){this._innerSchema.write(n,r)}read(n){return this._innerSchema.read(n)}measure(n,r=new _typedbinary.Measurer){return this._innerSchema.measure(n,r),r}resolve(n){return this.expressionCode}};var le=0;function $t(e){le++;try{return e()}finally{le--}}var z=()=>le>0;var ye=(e,t)=>({__unwrapped:void 0,isLoose:!1,kind:t,size:4,byteAlignment:4,expressionCode:t,write(n,r){e.write(n,r)},read(n){return e.read(n)},measure(n,r=new w.Measurer){return e.measure(n,r),r},resolveReferences(n){throw new p},seekProperty(n,r){throw new Error("Method not implemented.")},resolve(){return t},toString(){return t}}),Kt= exports.l =new K({schema:w.bool,byteAlignment:4,code:"bool"}),Ze=e=>z()?`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))),H= exports.m =Object.assign(Ze,ye(w.u32,"u32")),et=e=>{if(z())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))},q= exports.n =Object.assign(et,ye(w.i32,"i32")),tt=e=>z()?`f32(${e})`:typeof e=="boolean"?e?1:0:e,J= exports.o =Object.assign(tt,ye(w.f32,"f32"));function Q(){return new me}var me=class{constructor(){s(this,"label")}$name(t){return this.label=t,this}resolve(t){return t.nameFor(this)}toString(){var t;return`id:${(t=this.label)!=null?t:"<unnamed>"}`}};var nt=["vertex_index","instance_index","position","clip_distances","front_facing","frag_depth","sample_index","sample_mask","fragment","local_invocation_id","local_invocation_index","global_invocation_id","workgroup_id","num_workgroups"],pe= exports.p =new Map(nt.map(e=>[Symbol(e),e])),Xt= exports.q =new Map(Array.from(pe).map(([e,t])=>[t,e])),Be=new Map;function Yt(e){let t=pe.get(e);if(!t)throw new Error(`The symbol ${String(e)} in not a valid 'builtin'`);return t}function Me(e){let t=Be.get(e);return t===void 0&&(t=Q().$name(pe.get(e)),Be.set(e,t)),t}var en=Symbol("Unknown data type");function ce(e){return!!e&&(typeof e=="object"||typeof e=="function")&&"resolve"in e}function tn(e){return typeof e=="number"||typeof e=="boolean"||typeof e=="string"||ce(e)}function nn(e){return e==="sampler"||e==="sampler_comparison"}function rn(e){return["texture_depth_2d","texture_depth_2d_array","texture_depth_cube","texture_depth_cube_array","texture_depth_multisampled_2d"].includes(e)}function an(e){return e==="texture_external"}function Le(e){return e.isLoose}function Ee(e){return!e.isLoose}function on(e){return!!e&&typeof e=="object"&&"getMappedRange"in e&&"mapAsync"in e}function sn(e){return e.__brand==="TgpuSlot"}function xe(e,...t){let n=e.flatMap((r,a)=>{let o=t[a];return o===void 0?[r]:Array.isArray(o)?[r,...o]:[r,o]});return new Te(n)}var Te=class{constructor(t){this.segments=t;s(this,"_label")}get label(){return this._label}$name(t){return this._label=t,this}resolve(t){let n="";for(let r of this.segments)if(ce(r))n+=t.resolve(r);else if(typeof r=="function"){let a=r(o=>t.unwrap(o));n+=t.resolve(a)}else typeof r=="symbol"?(t.addBuiltin(r),n+=t.resolve(Me(r))):n+=String(r);return n}with(t,n){return new de(this,[t,n])}toString(){var t;return`code:${(t=this._label)!=null?t:"<unnamed>"}`}},de=class e{constructor(t,n){this._innerFn=t;this._slotValuePair=n}get label(){return this._innerFn.label}with(t,n){return new e(this,[t,n])}resolve(t){return t.resolve(this._innerFn,[this._slotValuePair])}toString(){var r,a;let[t,n]=this._slotValuePair;return`code:${(r=this.label)!=null?r:"<unnamed>"}[${(a=t.label)!=null?a:"<unnamed>"}=${n}]`}};function rt(e,t){let n="size"in e?e.size:e.currentByteOffset,r=t-1,a=n&r;"skipBytes"in e?e.skipBytes(t-a&r):e.add(t-a&r)}var l=rt;var B=(e,t)=>{let n=t-1,r=~n;return e&n?(e&r)+t:e};function be(e,t){return fe(e)?new M(e.inner,[t,...e.attributes]):we(e)?new L(e.inner,[t,...e.attributes]):Le(e)?new L(e,[t]):new M(e,[t])}function st(e,t){return be(t,{type:"align",alignment:e})}function ut(e,t){return be(t,{type:"size",size:e})}function it(e,t){return be(t,{type:"location",location:e})}function fe(e){return e instanceof M}function we(e){return e instanceof L}function Fe(e){return e.alignAttrib}function Oe(e){return!fe(e)&&!we(e)?"":e.attributes.map(t=>t.type==="align"?`@align(${t.alignment}) `:t.type==="size"?`@size(${t.size}) `:t.type==="location"?`@location(${t.location}) `:"").join("")}var X=class{constructor(t,n){this.inner=t;this.attributes=n;s(this,"__unwrapped");s(this,"label");s(this,"byteAlignment");s(this,"size");s(this,"alignAttrib");s(this,"sizeAttrib");s(this,"locationAttrib");var r,a,o,i;if(this.alignAttrib=(r=n.find(y=>y.type==="align"))==null?void 0:r.alignment,this.sizeAttrib=(a=n.find(y=>y.type==="size"))==null?void 0:a.size,this.locationAttrib=(o=n.find(y=>y.type==="location"))==null?void 0:o.location,this.byteAlignment=(i=this.alignAttrib)!=null?i:t.byteAlignment,this.size=this.measure(_typedbinary.MaxValue).size,this.byteAlignment<=0)throw new Error(`Custom data alignment must be a positive number, got: ${this.byteAlignment}.`);if(Math.log2(this.byteAlignment)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${this.byteAlignment}.`);if(Ee(this.inner)&&this.byteAlignment%this.inner.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${this.byteAlignment}, expected multiple of: ${this.inner.byteAlignment}.`);if(this.size<this.inner.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${this.size}, expected at least: ${this.inner.size}.`);if(this.size<=0)throw new Error(`Custom data size must be a positive number. Got: ${this.size}.`)}resolveReferences(t){throw new p}write(t,n){var a;l(t,(a=this.alignAttrib)!=null?a:1);let r=t.currentByteOffset;this.inner.write(t,n),t.seekTo(r+this.size)}read(t){var a;l(t,(a=this.alignAttrib)!=null?a:1);let n=t.currentByteOffset,r=this.inner.read(t);return t.seekTo(n+this.size),r}measure(t,n=new _typedbinary.Measurer){var r;return l(n,(r=this.alignAttrib)!=null?r:1),this.sizeAttrib!==void 0?n.add(this.sizeAttrib):this.inner.measure(t,n)}seekProperty(t,n){return this.inner.seekProperty(t,n)}},M=class extends X{constructor(){super(...arguments);s(this,"isLoose",!1)}resolve(n){return n.resolve(this.inner)}},L=class extends X{constructor(){super(...arguments);s(this,"isLoose",!0)}};var lt=(e,t)=>new Y(e,t),yt= exports.I =(e,t)=>new Z(e,t);function ge(e){return e instanceof Y}function mt(e){return e instanceof Z}var Y=class extends _typedbinary.Schema{constructor(n,r){super();this.elementType=n;this.elementCount=r;s(this,"_size");s(this,"isRuntimeSized");s(this,"byteAlignment");s(this,"stride");s(this,"isLoose",!1);this.byteAlignment=n.byteAlignment,this.stride=B(n.size,n.byteAlignment),this._size=this.stride*r,this.isRuntimeSized=r===0}get size(){if(this.isRuntimeSized)throw new Error("Cannot get the size of a runtime-sized array");return this._size}write(n,r){if(this.isRuntimeSized)throw new Error("Cannot write a runtime-sized array");l(n,this.byteAlignment);let a=n.currentByteOffset;for(let o=0;o<Math.min(this.elementCount,r.length);o++)l(n,this.byteAlignment),this.elementType.write(n,r[o]);n.seekTo(a+this.size)}read(n){if(this.isRuntimeSized)throw new Error("Cannot read a runtime-sized array");l(n,this.byteAlignment);let r=[];for(let a=0;a<this.elementCount;a++)l(n,this.byteAlignment),r.push(this.elementType.read(n));return l(n,this.byteAlignment),r}measure(n,r=new _typedbinary.Measurer){return this.isRuntimeSized?r.unbounded:(l(r,this.byteAlignment),r.add(this.size))}resolve(n){let r=n.resolve(this.elementType),a=this.isRuntimeSized?`array<${r}>`:`array<${r}, ${this.elementCount}>`;return n.resolve(a)}},Z=class extends _typedbinary.Schema{constructor(n,r){var a;super();this.elementType=n;this.elementCount=r;s(this,"byteAlignment");s(this,"size");s(this,"stride");s(this,"isLoose",!0);this.byteAlignment=(a=Fe(n))!=null?a:1,this.stride=B(n.size,this.byteAlignment),this.size=this.stride*r}write(n,r){l(n,this.byteAlignment);let a=n.currentByteOffset;for(let o=0;o<Math.min(this.elementCount,r.length);o++)l(n,this.byteAlignment),this.elementType.write(n,r[o]);n.seekTo(a+this.size)}read(n){l(n,this.byteAlignment);let r=[];for(let a=0;a<this.elementCount;a++)l(n,this.byteAlignment),r.push(this.elementType.read(n));return l(n,this.byteAlignment),r}measure(n,r=new _typedbinary.Measurer){return l(r,this.byteAlignment),r.add(this.size)}};var pt=e=>new ee(e),ct= exports.M =e=>new te(e);function Tt(e){return e instanceof ee}function dt(e){return e instanceof te}function xt([e,t]){return xe` ${Oe(t)}${e}: ${t},\n`}var ee=class extends _typedbinary.Schema{constructor(n){super();this.properties=n;s(this,"_label");s(this,"_size");s(this,"byteAlignment");s(this,"isLoose",!1);s(this,"isRuntimeSized");this.byteAlignment=Object.values(n).map(r=>r.byteAlignment).reduce((r,a)=>r>a?r:a),this._size=this.measure(_typedbinary.MaxValue).size,this.isRuntimeSized=Number.isNaN(this._size)}get size(){if(this.isRuntimeSized)throw new Error("Cannot get size of struct with runtime sized properties");return this._size}get label(){return this._label}$name(n){return this._label=n,this}resolveReferences(){throw new p}write(n,r){if(this.isRuntimeSized)throw new Error("Cannot write struct with runtime sized properties");l(n,this.byteAlignment);for(let[a,o]of Object.entries(this.properties))l(n,o.byteAlignment),o.write(n,r[a]);l(n,this.byteAlignment)}read(n){if(this.isRuntimeSized)throw new Error("Cannot read struct with runtime sized properties");l(n,this.byteAlignment);let r={};for(let[a,o]of Object.entries(this.properties))l(n,o.byteAlignment),r[a]=o.read(n);return l(n,this.byteAlignment),r}measure(n,r=new _typedbinary.Measurer){let a=r;l(a,this.byteAlignment);let o=n===_typedbinary.MaxValue;for(let[i,y]of Object.entries(this.properties)){if(a.isUnbounded)throw new Error("Only the last property of a struct can be unbounded");if(l(a,y.byteAlignment),a=y.measure(o?_typedbinary.MaxValue:n[i],a),a.isUnbounded&&!ge(y))throw new Error("Cannot nest unbounded struct within another struct")}return l(a,this.byteAlignment),a}resolve(n){let r=Q().$name(this._label);return n.addDeclaration(xe`
|
4
|
-
struct ${r} {
|
5
|
-
${Object.entries(this.properties).map(xt)}\
|
6
|
-
}
|
7
|
-
`),n.resolve(r)}},te=class extends _typedbinary.Schema{constructor(n){super();this.properties=n;s(this,"_label");s(this,"byteAlignment",1);s(this,"isLoose",!0);s(this,"size");this.size=this.measure(_typedbinary.MaxValue).size}get label(){return this._label}$name(n){return this._label=n,this}resolveReferences(){throw new p}write(n,r){for(let[a,o]of Object.entries(this.properties))o.write(n,r[a])}read(n){let r={};for(let[a,o]of Object.entries(this.properties))r[a]=o.read(n);return r}measure(n,r=new _typedbinary.Measurer){let a=n===_typedbinary.MaxValue;for(let[o,i]of Object.entries(this.properties))i.measure(a?_typedbinary.MaxValue:n[o],r);return r}};function g(e){let t={__unwrapped:void 0,isLoose:!1,size:e.length*4,label:e.label,byteAlignment:e.byteAlignment,kind:e.label,expressionCode:e.label,resolveReferences(r){throw new p},write(r,a){for(let o of a)e.unitType.write(r,o)},read(r){return e.make(...Array.from({length:e.length}).map(a=>e.unitType.read(r)))},measure(r,a=new _typedbinary.Measurer){return a.add(this.size)},seekProperty(r,a){throw new Error("Method not implemented.")},resolve(){return e.label},toString(){return e.label}};return Object.assign((...r)=>{var o;let a=r;if(z())return`${t.kind}(${a.join(", ")})`;if(a.length<=1)return e.makeFromScalar((o=a[0])!=null?o:0);if(a.length===e.length)return e.make(...a);throw new Error(`'${e.label}' constructor called with invalid number of arguments.`)},t)}var E=class{constructor(t,n){this.x=t;this.y=n;s(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}},A=class e extends E{constructor(){super(...arguments);s(this,"kind","vec2f")}make2(n,r){return new e(n,r)}make3(n,r,a){return new k(n,r,a)}make4(n,r,a,o){return new P(n,r,a,o)}},D=class e extends E{constructor(){super(...arguments);s(this,"kind","vec2i")}make2(n,r){return new e(n,r)}make3(n,r,a){return new V(n,r,a)}make4(n,r,a,o){return new _(n,r,a,o)}},S=class e extends E{constructor(){super(...arguments);s(this,"kind","vec2u")}make2(n,r){return new e(n,r)}make3(n,r,a){return new I(n,r,a)}make4(n,r,a,o){return new R(n,r,a,o)}},F=class{constructor(t,n,r){this.x=t;this.y=n;this.z=r;s(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}},k=class e extends F{constructor(){super(...arguments);s(this,"kind","vec3f")}make2(n,r){return new A(n,r)}make3(n,r,a){return new e(n,r,a)}make4(n,r,a,o){return new P(n,r,a,o)}},V=class e extends F{constructor(){super(...arguments);s(this,"kind","vec3i")}make2(n,r){return new D(n,r)}make3(n,r,a){return new e(n,r,a)}make4(n,r,a,o){return new _(n,r,a,o)}},I=class e extends F{constructor(){super(...arguments);s(this,"kind","vec3u")}make2(n,r){return new S(n,r)}make3(n,r,a){return new e(n,r,a)}make4(n,r,a,o){return new R(n,r,a,o)}},O=class{constructor(t,n,r,a){this.x=t;this.y=n;this.z=r;this.w=a;s(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}},P=class e extends O{constructor(){super(...arguments);s(this,"kind","vec4f")}make2(n,r){return new A(n,r)}make3(n,r,a){return new k(n,r,a)}make4(n,r,a,o){return new e(n,r,a,o)}},_=class e extends O{constructor(){super(...arguments);s(this,"kind","vec4i")}make2(n,r){return new D(n,r)}make3(n,r,a){return new V(n,r,a)}make4(n,r,a,o){return new e(n,r,a,o)}},R=class e extends O{constructor(){super(...arguments);s(this,"kind","vec4u")}make2(n,r){return new S(n,r)}make3(n,r,a){return new I(n,r,a)}make4(n,r,a,o){return new e(n,r,a,o)}},m={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),a=0;for(let o of t){switch(o){case"x":r[a]=n.x;break;case"y":r[a]=n.y;break;case"z":r[a]=n.z;break;case"w":r[a]=n.w;break;default:return Reflect.get(n,t)}a++}return t.length===4?new Proxy(n.make4(r[0],r[1],r[2],r[3]),m):t.length===3?new Proxy(n.make3(r[0],r[1],r[2]),m):t.length===2?new Proxy(n.make2(r[0],r[1]),m):Reflect.get(e,t)}},x= exports.P =g({unitType:_typedbinary.f32,byteAlignment:8,length:2,label:"vec2f",make:(e,t)=>new Proxy(new A(e,t),m),makeFromScalar:e=>new Proxy(new A(e,e),m)}),$= exports.Q =g({unitType:_typedbinary.i32,byteAlignment:8,length:2,label:"vec2i",make:(e,t)=>new Proxy(new D(e,t),m),makeFromScalar:e=>new Proxy(new D(e,e),m)}),N= exports.R =g({unitType:_typedbinary.u32,byteAlignment:8,length:2,label:"vec2u",make:(e,t)=>new Proxy(new S(e,t),m),makeFromScalar:e=>new Proxy(new S(e,e),m)}),C= exports.S =g({unitType:_typedbinary.f32,byteAlignment:16,length:3,label:"vec3f",make:(e,t,n)=>new Proxy(new k(e,t,n),m),makeFromScalar:e=>new Proxy(new k(e,e,e),m)}),Ae= exports.T =g({unitType:_typedbinary.i32,byteAlignment:16,length:3,label:"vec3i",make:(e,t,n)=>new Proxy(new V(e,t,n),m),makeFromScalar:e=>new Proxy(new V(e,e,e),m)}),De= exports.U =g({unitType:_typedbinary.u32,byteAlignment:16,length:3,label:"vec3u",make:(e,t,n)=>new Proxy(new I(e,t,n),m),makeFromScalar:e=>new Proxy(new I(e,e,e),m)}),T= exports.V =g({unitType:_typedbinary.f32,byteAlignment:16,length:4,label:"vec4f",make:(e,t,n,r)=>new Proxy(new P(e,t,n,r),m),makeFromScalar:e=>new Proxy(new P(e,e,e,e),m)}),j= exports.W =g({unitType:_typedbinary.i32,byteAlignment:16,length:4,label:"vec4i",make:(e,t,n,r)=>new Proxy(new _(e,t,n,r),m),makeFromScalar:e=>new Proxy(new _(e,e,e,e),m)}),W= exports.X =g({unitType:_typedbinary.u32,byteAlignment:16,length:4,label:"vec4u",make:(e,t,n,r)=>new Proxy(new R(e,t,n,r),m),makeFromScalar:e=>new Proxy(new R(e,e,e,e),m)});function Ie(e){let t={__unwrapped:void 0,isLoose:!1,label:e.label,byteAlignment:e.columnType.byteAlignment,size:B(e.columnType.size*e.columns,e.columnType.byteAlignment),resolveReferences(){throw new p},write(r,a){for(let o of a.columns)e.columnType.write(r,o)},read(r){let a=new Array(e.columns);for(let o=0;o<e.columns;++o)a[o]=e.columnType.read(r);return e.makeFromColumnVectors(...a)},measure(r,a=new _typedbinary.Measurer){return a.add(this.size)},seekProperty(){throw new Error("Method not implemented.")},resolve(){return e.label}};return Object.assign((...r)=>{let a=[];for(let o of r)typeof o=="number"?a.push(o):a.push(...o);for(let o=a.length;o<e.columns*e.rows;++o)a.push(0);return e.makeFromElements(...a)},t)}var Se=class{constructor(...t){s(this,"columns");s(this,"length",4);this.columns=[this.makeColumn(t[0],t[1]),this.makeColumn(t[2],t[3])]}*elements(){yield*f(this.columns[0]),yield*f(this.columns[1])}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}},ne=class extends Se{makeColumn(t,n){return x(t,n)}},ke=class{constructor(...t){s(this,"columns");s(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])]}*elements(){yield*f(this.columns[0]),yield*f(this.columns[1]),yield*f(this.columns[2])}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){}},re=class extends ke{makeColumn(t,n,r){return C(t,n,r)}},Ve=class{constructor(...t){s(this,"columns");s(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])]}*elements(){yield*f(this.columns[0]),yield*f(this.columns[1]),yield*f(this.columns[2]),yield*f(this.columns[3])}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}},ae=class extends Ve{makeColumn(t,n,r,a){return T(t,n,r,a)}},Gn= exports.Y =Ie({label:"mat2x2f",columnType:x,rows:2,columns:2,makeFromColumnVectors:(...e)=>new ne(...e[0],...e[1]),makeFromElements:(...e)=>new ne(...e)}),Kn= exports.Z =Ie({label:"mat3x3f",columnType:C,rows:3,columns:3,makeFromColumnVectors(...[e,t,n]){return new re(...e,...t,...n)},makeFromElements:(...e)=>new re(...e)}),Hn= exports._ =Ie({label:"mat4x4f",columnType:T,rows:4,columns:4,makeFromColumnVectors(...[e,t,n,r]){return new ae(...e,...t,...n,...r)},makeFromElements:(...e)=>new ae(...e)});var u=class extends _typedbinary.Schema{constructor(n,r){var o;super();this.size=n;this.kind=r;s(this,"underlyingType");s(this,"elementSize");s(this,"elementCount");s(this,"isSigned");s(this,"byteAlignment",1);s(this,"isLoose",!0);this.underlyingType=Dt[r],this.isSigned=(o=St[r])!=null?o:!1,this.elementCount=this.underlyingType.size/4;let a=n/this.elementCount;if(a!==1&&a!==2&&a!==4)throw new Error("Invalid element size");this.elementSize=a}write(n,r){if(typeof r=="number"){switch(this.underlyingType){case H:n.writeUint32(r);break;case J:n.writeFloat32(r);break;case q:n.writeInt32(r);break;default:throw new Error("Invalid underlying type")}return}zt(n,r,this.elementSize,this.isSigned)}read(n){let r=new ArrayBuffer(this.size),a=new DataView(r);for(let d=0;d<this.size;d++)a.setUint8(d,n.readByte());if(this.elementCount===1)switch(this.underlyingType){case H:return a.getUint32(0);case J:return a.getFloat32(0);case q:return a.getInt32(0);default:throw new Error("Invalid underlying type")}let o=this.underlyingType,i=Ge[o.label],y=new Array(this.elementCount),h=new (0, _typedbinary.BufferReader)(r);for(let d=0;d<this.elementCount;d++)y[d]=At(i,this.elementSize,h,this.isSigned);switch(o){case N:case x:case $:return o(y[0],y[1]);case De:case C:case Ae:return o(y[0],y[1],y[2]);case W:case T:case j:return o(y[0],y[1],y[2],y[3]);default:throw new Error("Invalid underlying type")}}measure(n,r=new _typedbinary.Measurer){return r.add(this.size)}},Ge={vec2u:"u32",vec3u:"u32",vec4u:"u32",vec2f:"f32",vec3f:"f32",vec4f:"f32",vec2i:"i32",vec3i:"i32",vec4i:"i32"};function zt(e,t,n,r){let a=Ge[t.kind];for(let o of t)vt(a,o,n,e,r)}function vt(e,t,n,r,a=!0){let o=new ArrayBuffer(n),i=new DataView(o),y=(c,U)=>{let se=a?U*127+128:U*255;i.setUint8(c,Math.floor(se))},h=(c,U)=>{let se=a?U*32767+32768:U*65535;i.setUint16(c,Math.floor(se))},b={u32:[i.setUint8,i.setUint16,i.setUint32],f32:[y,h,i.setFloat32],i32:[i.setInt8,i.setInt16,i.setInt32]}[e][Math.log2(n)];b&&b.call(i,0,t);for(let c=0;c<n;c++)r.writeByte(i.getUint8(c))}function At(e,t,n,r=!0){let a=new ArrayBuffer(t),o=new DataView(a);for(let b=0;b<t;b++)o.setUint8(b,n.readByte());let i=b=>{let c=o.getUint8(b);return r?(c-128)/127:c/255},y=b=>{let c=o.getUint16(b);return r?(c-32768)/32767:c/65535},d={u32:[o.getUint8,o.getUint16,o.getUint32],f32:[i,y,o.getFloat32],i32:[o.getInt8,o.getInt16,o.getInt32]}[e][Math.log2(t)];if(d)return d.call(o,0);throw new Error("Invalid primitive")}var Dt={uint8x2:N,uint8x4:W,sint8x2:$,sint8x4:j,unorm8x2:x,unorm8x4:T,snorm8x2:x,snorm8x4:T,uint16x2:N,uint16x4:W,sint16x2:$,sint16x4:j,unorm16x2:x,unorm16x4:T,snorm16x2:x,snorm16x4:T,float16x2:x,float16x4:T,float32:J,float32x2:x,float32x3:C,float32x4:T,uint32:H,uint32x2:N,uint32x3:De,uint32x4:W,sint32:q,sint32x2:$,sint32x3:Ae,sint32x4:j,unorm10_10_10_2:T},St={unorm8x2:!1,unorm8x4:!1,snorm8x2:!0,snorm8x4:!0,unorm16x2:!1,unorm16x4:!1,snorm16x2:!0,snorm16x4:!0,float16x2:!0,float16x4:!0,unorm10_10_10_2:!1},Zn= exports.$ =new u(2,"uint8x2"),er= exports.aa =new u(4,"uint8x4"),tr= exports.ba =new u(2,"sint8x2"),nr= exports.ca =new u(4,"sint8x4"),rr= exports.da =new u(2,"unorm8x2"),ar= exports.ea =new u(4,"unorm8x4"),or= exports.fa =new u(2,"snorm8x2"),sr= exports.ga =new u(4,"snorm8x4"),ur= exports.ha =new u(4,"uint16x2"),ir= exports.ia =new u(8,"uint16x4"),lr= exports.ja =new u(4,"sint16x2"),yr= exports.ka =new u(8,"sint16x4"),mr= exports.la =new u(4,"unorm16x2"),pr= exports.ma =new u(8,"unorm16x4"),cr= exports.na =new u(4,"snorm16x2"),Tr= exports.oa =new u(8,"snorm16x4"),dr= exports.pa =new u(4,"float16x2"),xr= exports.qa =new u(8,"float16x4"),br= exports.ra =new u(4,"float32"),fr= exports.sa =new u(8,"float32x2"),wr= exports.ta =new u(12,"float32x3"),gr= exports.ua =new u(16,"float32x4"),hr= exports.va =new u(4,"uint32"),zr= exports.wa =new u(8,"uint32x2"),vr= exports.xa =new u(12,"uint32x3"),Ar= exports.ya =new u(16,"uint32x4"),Dr= exports.za =new u(4,"sint32"),Sr= exports.Aa =new u(8,"sint32x2"),kr= exports.Ba =new u(12,"sint32x3"),Vr= exports.Ca =new u(16,"sint32x4"),Ir= exports.Da =new u(4,"unorm10_10_10_2");function kt(e){return{scope:"function",pointsTo:e}}function Pt(e){return new oe(e)}function _t(e){return e instanceof oe}var oe=class extends _typedbinary.Schema{constructor(n){super();this.innerData=n;s(this,"size");s(this,"byteAlignment");s(this,"isLoose",!1);this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new p}write(n,r){this.innerData.write(n,r)}read(n){return this.innerData.read(n)}measure(n,r=new _typedbinary.Measurer){return this.innerData.measure(n,r)}resolve(n){return`atomic<${n.resolve(this.innerData)}>`}};exports.a = Rt; exports.b = Ct; exports.c = Ut; exports.d = s; exports.e = $t; exports.f = z; exports.g = Re; exports.h = Ce; exports.i = p; exports.j = Ue; exports.k = K; exports.l = Kt; exports.m = H; exports.n = q; exports.o = J; exports.p = pe; exports.q = Xt; exports.r = Yt; exports.s = Me; exports.t = en; exports.u = ce; exports.v = tn; exports.w = nn; exports.x = rn; exports.y = an; exports.z = on; exports.A = sn; exports.B = xe; exports.C = st; exports.D = ut; exports.E = it; exports.F = fe; exports.G = we; exports.H = lt; exports.I = yt; exports.J = ge; exports.K = mt; exports.L = pt; exports.M = ct; exports.N = Tt; exports.O = dt; exports.P = x; exports.Q = $; exports.R = N; exports.S = C; exports.T = Ae; exports.U = De; exports.V = T; exports.W = j; exports.X = W; exports.Y = Gn; exports.Z = Kn; exports._ = Hn; exports.$ = Zn; exports.aa = er; exports.ba = tr; exports.ca = nr; exports.da = rr; exports.ea = ar; exports.fa = or; exports.ga = sr; exports.ha = ur; exports.ia = ir; exports.ja = lr; exports.ka = yr; exports.la = mr; exports.ma = pr; exports.na = cr; exports.oa = Tr; exports.pa = dr; exports.qa = xr; exports.ra = br; exports.sa = fr; exports.ta = wr; exports.ua = gr; exports.va = hr; exports.wa = zr; exports.xa = vr; exports.ya = Ar; exports.za = Dr; exports.Aa = Sr; exports.Ba = kr; exports.Ca = Vr; exports.Da = Ir; exports.Ea = kt; exports.Fa = Pt; exports.Ga = _t;
|
8
|
-
//# sourceMappingURL=chunk-SBJR5ZQJ.cjs.map
|