typegpu 0.5.9 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/chunk-3K53YJSU.cjs +10 -0
  2. package/chunk-3K53YJSU.cjs.map +1 -0
  3. package/chunk-BF35NEOX.cjs +43 -0
  4. package/chunk-BF35NEOX.cjs.map +1 -0
  5. package/chunk-IH2QU6TV.js +43 -0
  6. package/chunk-IH2QU6TV.js.map +1 -0
  7. package/chunk-S27MYQ6U.js +10 -0
  8. package/chunk-S27MYQ6U.js.map +1 -0
  9. package/data/index.cjs +1 -1
  10. package/data/index.cjs.map +1 -1
  11. package/data/index.d.cts +30 -4
  12. package/data/index.d.ts +30 -4
  13. package/data/index.js +1 -1
  14. package/index.cjs +18 -29
  15. package/index.cjs.map +1 -1
  16. package/index.d.cts +95 -9
  17. package/index.d.ts +95 -9
  18. package/index.js +18 -29
  19. package/index.js.map +1 -1
  20. package/{matrix-BULDDGYa.d.ts → matrix-BXuR-7-A.d.ts} +1 -1
  21. package/{matrix-BnXitNJ7.d.cts → matrix-DzXuhOr3.d.cts} +1 -1
  22. package/package.json +1 -1
  23. package/std/index.cjs +1 -1
  24. package/std/index.cjs.map +1 -1
  25. package/std/index.d.cts +22 -9
  26. package/std/index.d.ts +22 -9
  27. package/std/index.js +1 -1
  28. package/std/index.js.map +1 -1
  29. package/{tgpuComputeFn-BxPDI5hQ.d.ts → tgpuConstant-BAmV6caN.d.cts} +3254 -2840
  30. package/{tgpuComputeFn-BxPDI5hQ.d.cts → tgpuConstant-BAmV6caN.d.ts} +3254 -2840
  31. package/chunk-734H4JWF.js +0 -2
  32. package/chunk-734H4JWF.js.map +0 -1
  33. package/chunk-BJSN5UVV.cjs +0 -41
  34. package/chunk-BJSN5UVV.cjs.map +0 -1
  35. package/chunk-BZVU4Q6A.cjs +0 -2
  36. package/chunk-BZVU4Q6A.cjs.map +0 -1
  37. package/chunk-CDUKTYES.cjs +0 -2
  38. package/chunk-CDUKTYES.cjs.map +0 -1
  39. package/chunk-CGVYLGBG.js +0 -2
  40. package/chunk-CGVYLGBG.js.map +0 -1
  41. package/chunk-SWJVYRFM.js +0 -41
  42. package/chunk-SWJVYRFM.js.map +0 -1
  43. /package/{LICENSE.md → LICENSE} +0 -0
package/index.js CHANGED
@@ -1,31 +1,20 @@
1
- import{S as V,T as Q,V as S,X as st,_ as tr,a as L,aa as mt,b as Me,ba as Ue,ca as cn}from"./chunk-734H4JWF.js";import{c as fn}from"./chunk-CGVYLGBG.js";import{A as de,Aa as G,B as at,Ba as k,C as rn,Ca as er,D as nn,Da as dn,E as Y,F as an,G as on,H as sn,I as fe,K as be,L as z,M as A,Ma as ut,N as Ht,Na as pt,O as un,Oa as lt,U as ot,V as it,W as Se,X as ve,Y as q,Z as pn,a as d,aa as ee,b,ba as O,c as I,ca as $,d as v,da as h,e as p,ea as ln,f as w,fa as mn,g as j,ga as Jt,h as Jr,ha as De,i as Yr,ia as Yt,j as le,ja as E,k as H,ka as R,l as Nt,la as C,m as jt,ma as f,n as zt,na as ke,o as me,oa as W,p as Ee,pa as Le,q as Ge,qa as te,r as Xr,ra as re,s as Z,sa as Xt,t as qt,ta as ce,u as Qt,ua as Oe,v as J,va as Fe,w as Zr,wa as Ie,x as en,xa as Zt,y as Kt,ya as P,z as tn,za as We}from"./chunk-SWJVYRFM.js";function gn(e){if(typeof e?.[I]=="function")return e[I].bind(e)}function dt(e,t){throw new Error(`Failed to handle ${e} at ${t}`)}var ba={f:{1:f,2:W,3:ce,4:P},h:{1:ke,2:Le,3:Oe,4:We},i:{1:C,2:te,3:Fe,4:G},u:{1:R,2:re,3:Ie,4:k},b:{1:E,2:Xt,3:Zt,4:er}},Sa={vec2f:W,vec2h:Le,vec2i:te,vec2u:re,"vec2<bool>":Xt,vec3f:ce,vec3h:Oe,vec3i:Fe,vec3u:Ie,"vec3<bool>":Zt,vec4f:P,vec4h:We,vec4i:G,vec4u:k,"vec4<bool>":er,mat2x2f:ut,mat3x3f:pt,mat4x4f:lt},yn={vec2f:f,vec2h:ke,vec2i:C,vec2u:R,"vec2<bool>":E,vec3f:f,vec3h:ke,vec3i:C,vec3u:R,"vec3<bool>":E,vec4f:f,vec4h:ke,vec4i:C,vec4u:R,"vec4<bool>":E,mat2x2f:W,mat3x3f:ce,mat4x4f:P};function Ne(e,t){if(A(e)||q(e))return e.propTypes[t]??$;if(e===E||fn(e))return $;let r=t.length;if(Y(e)&&r>=1&&r<=4){let n=e.type.includes("bool")?"b":e.type[4],a=ba[n][r];if(a)return a}return $}function rr(e){return z(e)||ve(e)?e.elementType:e.type in yn?yn[e.type]:$}function nr(e){if(/^0x[0-9a-f]+$/i.test(e))return h(e,De);if(/^0b[01]+$/i.test(e))return h(`${Number.parseInt(e.slice(2),2)}`,De);if(/^-?(?:\d+\.\d*|\d*\.\d+)$/i.test(e))return h(e,Yt);if(/^-?\d+(?:\.\d+)?e-?\d+$/i.test(e))return h(e,Yt);if(/^-?\d+$/i.test(e))return h(e,De)}var ar={rank:Number.POSITIVE_INFINITY,action:"none"};function Ae(e){return e.type==="decorated"?e.inner:e}function Tn(e){return Y(e)?dn[e.type]:void 0}function ft(e,t){let r=Ae(e),n=Ae(t);if(r.type===n.type)return{rank:0,action:"none"};if(r.type==="abstractFloat"){if(n.type==="f32")return{rank:1,action:"none"};if(n.type==="f16")return{rank:2,action:"none"}}if(r.type==="abstractInt"){if(n.type==="i32")return{rank:3,action:"none"};if(n.type==="u32")return{rank:4,action:"none"};if(n.type==="abstractFloat")return{rank:5,action:"none"};if(n.type==="f32")return{rank:6,action:"none"};if(n.type==="f16")return{rank:7,action:"none"}}if(Y(r)&&Y(n)){let a=Tn(r),o=Tn(n);if(a&&o)return ft(a,o)}return fe(r)&&fe(n)?{rank:0,action:"none"}:ar}function va(e,t){let r=Ae(e),n=Ae(t);if(r.type==="ptr"&&ft(r.inner,n).rank<Number.POSITIVE_INFINITY)return{rank:0,action:"deref"};if(n.type==="ptr"&&ft(r,n.inner).rank<Number.POSITIVE_INFINITY)return{rank:1,action:"ref"};let a={f32:0,f16:1,i32:2,u32:3,bool:4};if(r.type in a&&n.type in a){let o=r.type,i=n.type;if(o!==i){let s=a[o];return{rank:a[i]<s?10:20,action:"cast",targetType:n}}}return ar}function Da(e,t,r){let n=ft(e,t);return n.rank<Number.POSITIVE_INFINITY?n:r?va(e,t):ar}function xn(e,t,r){let n,a=Number.POSITIVE_INFINITY,o=new Map;for(let u of t){let c=0,m=[],g=!0;for(let T of e){let x=Da(T,u,r);if(x.rank===Number.POSITIVE_INFINITY){g=!1;break}c+=x.rank,m.push(x)}g&&c<a&&(a=c,n=u,o.set(n,m))}if(!n)return;let s=o.get(n).map((u,c)=>({sourceIndex:c,action:u.action,...u.action==="cast"&&{targetType:u.targetType}})),l=s.some(u=>u.action==="cast");return{targetType:n,actions:s,hasImplicitConversions:l}}function or(e){return e.type==="abstractFloat"?f:e.type==="abstractInt"?C:e}function hn(e,t){if(e.length===0)return;let r=[...new Set(e.map(Ae))],n=t?[...new Set(t.map(Ae))]:r,a=xn(e,n,!1);if(a)return a;let o=xn(e,n,!0);if(o)return o.hasImplicitConversions=o.actions.some(i=>i.action==="cast"),o}function Fa(e,t,r,n){if(r.action==="none")return h(t.value,n);let a=e.resolve(t.value);switch(r.action){case"ref":return h(`&${a}`,n);case"deref":return h(`*${a}`,n);case"cast":return h(`${e.resolve(n)}(${a})`,n);default:dt(r.action,"applyActionToSnippet")}}function M(e,t,r){let n=t.map(o=>o.dataType);if(n.some(o=>o===$))return;let a=hn(n,r);if(a)return a.hasImplicitConversions&&console.warn(`Implicit conversions from [
2
- ${t.map(o=>` ${o.value}: ${o.dataType.type}`).join(`,
3
- `)}
4
- ] to ${a.targetType.type} are supported, but not recommended.
5
- Consider using explicit conversions instead.`),t.map((o,i)=>{let s=a.actions[i];return le(s,"Action should not be undefined"),Fa(e,o,s,a.targetType)})}function ir(e,t,r){return Object.keys(t.propTypes).map(a=>{let o=r[a];if(!o)throw new Error(`Missing property ${a}`);let i=t.propTypes[a];return M(e,[o],[i])?.[0]??o})}function ge(e){if(ln(e))return e;if(tn(e))return h(e,e[b]);if(at(e)||an(e))return h(e,Sa[e.kind]);if(Array.isArray(e)){let t=e.map(ge).filter(Boolean),r=Z();if(!r)throw new Error("Tried to coerce array without a context");let n=M(r,t),a=hn(t.map(o=>o.dataType))?.targetType;return!n||!a?h(e,$):h(n.map(o=>o.value).join(", "),st(or(a),e.length))}return typeof e=="string"||typeof e=="function"||typeof e=="object"||typeof e=="symbol"||typeof e>"u"||e===null?h(e,$):typeof e=="number"||typeof e=="bigint"?h(e,nr(String(e))?.dataType??$):typeof e=="boolean"?h(e,E):h(e,$)}var K={get(e,t){if(t in e)return Reflect.get(e,t);if(t!=="~providing")return t==="toString"||t===Symbol.toStringTag||t===Symbol.toPrimitive?()=>e.toString():new Proxy({"~resolve":r=>`${r.resolve(e)}.${String(t)}`,toString:()=>`.value(...).${String(t)}:${p(e)??"<unnamed>"}`,[b]:Ne(e[b],String(t))},K)}};function je(e,t){let r=t,n;for(;n=gn(r);)r=n(e);return r}function wn(e,t){return new sr(e,t)}var sr=class{constructor(t,r){this.dataType=t;this._value=r;this[d]={dataType:t}}[d];$name(t){return w(this,t),this}"~resolve"(t){let r=t.names.makeUnique(p(this)),n=t.resolveValue(this._value,this.dataType);return t.addDeclaration(`const ${r} = ${n};`),r}toString(){return`const:${p(this)??"<unnamed>"}`}[I](){return new Proxy({"~resolve":t=>t.resolve(this),toString:()=>`.value:${p(this)??"<unnamed>"}`,[b]:this.dataType},K)}get value(){return J()?this[I]():this._value}};function Pe(e){return e?.resourceType==="slot"}function Be(e){return e?.resourceType==="derived"}function ze(e){return e?.["~providing"]!==void 0}function qe(e){return e?.resourceType==="accessor"}function ur(e){return typeof e?.["~resolve"]=="function"}function ct(e){return typeof e=="number"||typeof e=="boolean"||typeof e=="string"||ur(e)||be(e)||Pe(e)||Be(e)||ze(e)}function bn(e){return!!e&&typeof e=="object"&&"getMappedRange"in e&&"mapAsync"in e}function Sn(e){return e?.resourceType==="buffer-usage"}function pr(e){return!!e?.[d]}function ye(e,t){for(let[r,n]of Object.entries(t))e[r]=n,j(n)&&p(n)===void 0&&n.$name(r)}function vn(e,t,r){let n=[...e.matchAll(/:\s*(?<arg>.*?)\s*[,)]/g)].map(a=>a?a[1]:void 0);r(Object.fromEntries(t.flatMap((a,o)=>{let i=n?n[o]:void 0;return A(a)&&i!==void 0?[[i,a]]:[]})))}function Re(e,t,r){let n=e.match(/->\s(?<output>[\w\d_]+)\s{/),a=n?n[1]?.trim():void 0;A(t)&&a&&!/\s/g.test(a)&&r({[a]:t})}function Ia(e){return new RegExp(`(?<![\\w\\$_.])${e.replaceAll(".","\\.").replaceAll("$","\\$")}(?![\\w\\$_])`,"g")}function Te(e,t,r){return Object.entries(t).reduce((n,[a,o])=>ct(o)||Se(o)?n.replaceAll(Ia(a),e.resolve(o)):o!==null&&typeof o=="object"?([...r.matchAll(new RegExp(`${a.replaceAll(".","\\.").replaceAll("$","\\$")}\\.(?<prop>.*?)(?![\\w\\$_])`,"g"))].map(s=>s[1])??[]).reduce((s,l)=>l&&l in o?Te(e,{[`${a}.${l}`]:o[l]},s):s,n):n,r)}function Dn(e){return new lr(e)}var lr=class{constructor(t){this.declaration=t}externalsToApply=[];$uses(t){return this.externalsToApply.push(t),this}"~resolve"(t){let r={};for(let a of this.externalsToApply)ye(r,a);let n=Te(t,r,this.declaration);return t.addDeclaration(n),""}toString(){return`declare: ${this.declaration}`}};function Fn(e,t,r){return Yr(e,{ast:t,externals:r}),e}function In(e){return()=>{throw new Error(`The function "${e??"<unnamed>"}" is invokable only on the GPU. If you want to use it on the CPU, mark it with the "kernel & js" directive.`)}}import{FuncParameterType as Rn}from"tinyest";function Pn(e){let{strippedCode:t,argRange:r}=Ua(e),n=new gt(t);n.consume("(");let a=[];for(;!n.isAt(")");){let i=[];for(;n.isAt("@");)n.parseUntil(Un,An),n.consume(")"),i.push(n.lastParsed);n.parseUntil(Pa);let s=n.lastParsed,l;n.isAt(":")&&(n.consume(":"),n.parseUntil(Ba,Ca),l=n.lastParsed),a.push({identifier:s,attributes:i,type:l}),n.isAt(",")&&n.consume(",")}n.consume(")");let o;if(n.isAt("->")){n.consume("->");let i=[];for(;n.isAt("@");)n.parseUntil(Un,An),n.consume(")"),i.push(n.lastParsed);o={type:n.str.slice(n.pos),attributes:i}}return{args:a,ret:o,range:{begin:r[0],end:r[1]}}}function Ua(e){let t=new gt(e),r="",n;for(;!t.isFinished();){if(t.isAt(Aa)){t.advanceBy(1);continue}if(t.isAt("//")){t.consume("//"),t.parseUntil(Bn),t.advanceBy(1);continue}if(t.isAt("/*")){t.parseUntil(Ra,Va),t.consume("*/");continue}if(t.isAt("{"))return{strippedCode:r,argRange:[n,t.pos]};t.isAt("(")&&n===void 0&&(n=t.pos),n!==void 0&&(r+=t.str[t.pos]),t.advanceBy(1)}throw new Error("Invalid wgsl code!")}var gt=class{constructor(t){this.str=t;this.#e=0}#t;#e;get pos(){return this.#e}get lastParsed(){if(this.#t===void 0)throw new Error("Parse was not called yet!");return this.str.slice(this.#t,this.pos)}isFinished(){return this.#e>=this.str.length}isAt(t){if(typeof t=="string"){for(let r=0;r<t.length;r++)if(this.str[this.#e+r]!==t[r])return!1;return!0}for(let r of t)if(this.isAt(r))return!0;return!1}parseUntil(t,r){this.#t=this.#e;let n=0;for(;this.#e<this.str.length;){if(r&&this.isAt(r[0])&&(n+=1),r&&this.isAt(r[1])&&(n-=1),n===0&&this.isAt(t))return this.#e;this.#e+=1}throw new Error("Reached the end of the string without finding a match!")}advanceBy(t){this.#e+=t}consume(t){if(!this.isAt(t))throw new Error(`Expected '${t}' at position ${this.#e}, but found '${this.str.slice(this.#e,this.#e+t.length)}'`);this.advanceBy(t.length)}},Bn=new Set([`
6
- `,"\v","\f","\r","\x85","\u2028","\u2029"]),Aa=new Set([...Bn," "," ","\u200E","\u200F"]),Un=new Set([")"]),Pa=new Set([":",",",")"]),Ba=new Set([",",")"]),Ra=new Set(["*/"]),An=["(",")"],Ca=["<",">"],Va=["/*","*/"];function ne(e,t){let r=[];typeof t=="string"&&(e.isEntry?(A(e.argTypes[0])&&r.push({In:e.argTypes[0]}),A(e.returnType)&&r.push({Out:e.returnType})):(vn(t,e.argTypes,o=>r.push(o)),Re(t,e.returnType,o=>r.push(o))));let n={applyExternals(o){r.push(o)},resolve(o,i=""){let s={};for(let u of r)ye(s,u);let l=o.names.makeUnique(p(this));if(typeof t=="string"){let u=Te(o,s,t),c="",m="";if(e.isEntry){let g=A(e.argTypes[0])?`(in: ${o.resolve(e.argTypes[0])})`:"()",T=be(e.returnType)?Ue(e.returnType):"",x=e.returnType!==de?A(e.returnType)?`-> ${o.resolve(e.returnType)}`:`-> ${T!==""?T:"@location(0)"} ${o.resolve(e.returnType)}`:"";c=`${g} ${x} `,m=u}else{let g=Pn(u);if(g.args.length!==e.argTypes.length)throw new Error(`WGSL implementation has ${g.args.length} arguments, while the shell has ${e.argTypes.length} arguments.`);let T=g.args.map((y,F)=>`${y.identifier}: ${Cn(o,`parameter ${y.identifier}`,y.type,e.argTypes[F])}`).join(", "),x=e.returnType===de?"":`-> ${Cn(o,"return type",g.ret?.type,e.returnType)}`;c=`(${T}) ${x}`,m=u.slice(g.range.end)}o.addDeclaration(`${i}fn ${l}${c}${m}`)}else{let u=Jr(t);if(u?.externals){let x=Object.fromEntries(Object.entries(u.externals).filter(([y])=>!(y in s)));ye(s,x)}let c=u?.ast??o.transpileFn(String(t)),m=c.externalNames.filter(x=>!(x in s));if(m.length>0)throw new zt(p(this),m);let{head:g,body:T}=o.fnToWgsl({args:e.argTypes.map((x,y)=>h(c.params[y]?.type===Rn.identifier?c.params[y].name:`_arg_${y}`,x)),argAliases:Object.fromEntries(c.params.flatMap((x,y)=>x.type===Rn.destructuredObject?x.props.map(({name:F,alias:U})=>[U,h(`_arg_${y}.${F}`,e.argTypes[y].propTypes[F])]):[])),returnType:e.returnType,body:c.body,externalMap:s});o.addDeclaration(`${i}fn ${l}${o.resolve(g)}${o.resolve(T)}`)}return l}},a=p(t);return a!==void 0&&w(n,a),n}function Cn(e,t,r,n){let a=e.resolve(n).replace(/\s/g,"");if(!r)return a;let o=r.replace(/\s/g,"");if(o!==a)throw new Error(`Type mismatch between TGPU shell and WGSL code string: ${t}, JS type "${a}", WGSL type "${o}".`);return r}function _a(e){let t=0;return Object.fromEntries(Object.entries(e).map(([r,n])=>{if(mt(n))return[r,n];let a=ee(n);return a!==void 0?(t=a+1,[r,n]):[r,tr(t++,n)]}))}function ae(e){return O(e)?it(e)||ee(e)!==void 0?e:tr(0,e):cn(_a(e))}function oe(e,...t){return $a(e)?Ea(e,...t):e}function $a(e){return Array.isArray(e)&&"raw"in e&&Array.isArray(e.raw)&&e.raw.every(t=>typeof t=="string")}function Ea(e,...t){return e.slice(1).reduce((r,n,a)=>`${r}${t[a]}${n}`,e[0])}function Vn(e){let t={argTypes:e.in&&Object.keys(e.in).length!==0?[ae(e.in)]:[],returnType:de,workgroupSize:[e.workgroupSize[0]??1,e.workgroupSize[1]??1,e.workgroupSize[2]??1],isEntry:!0},r=(n,...a)=>Ga(t,e.workgroupSize,oe(n,...a));return Object.assign(Object.assign(r,t),{does:r})}function Ga(e,t,r){let n=ne(e,r),a=e.argTypes[0];return{shell:e,$uses(i){return n.applyExternals(i),this},[v]:n,$name(i){return w(n,i),j(a)&&a.$name(`${i}_Input`),this},"~resolve"(i){return n.resolve(i,`@compute @workgroup_size(${t.join(", ")}) `)},toString(){return`computeFn:${p(n)??"<unnamed>"}`}}}function _n(e,t){let r={[d]:!0,argTypes:e,returnType:t??de,isEntry:!1},n=(a,...o)=>La(r,oe(a,...o));return Object.assign(Object.assign(n,r),{does:n})}function mr(e){return!!e?.[d]&&e?.resourceType==="function"}function ka([e,t]){return`${p(e)??"<unnamed>"}=${t}`}function La(e,t){let r=ne(e,t),n={[d]:{implementation:t,argTypes:e.argTypes},shell:e,resourceType:"function",$uses(i){return r.applyExternals(i),this},[v]:r,$name(i){return w(r,i),this},with(i,s){return $n(o,[[qe(i)?i.slot:i,s]])},"~resolve"(i){if(typeof t=="string")return r.resolve(i);let s=i;if(s.callStack===void 0)throw new Error("Cannot resolve a TGSL function outside of a generation context");try{return s.callStack.push(e.returnType),r.resolve(i)}finally{s.callStack.pop()}}},a=Jt((...i)=>{if(typeof t=="string")throw new Error("Cannot execute on the CPU functions constructed with raw WGSL");return t(...i)},(...i)=>h(new yt(o,i.map(s=>s.value)),e.returnType??$),"tgpuFnCall",e.argTypes);a[d].implementation=t;let o=Object.assign(a,n);return Object.defineProperty(o,"toString",{value(){return`fn:${p(r)??"<unnamed>"}`}}),o}function $n(e,t){let r={[d]:{implementation:e[d].implementation,argTypes:e[d].argTypes},resourceType:"function",shell:e.shell,"~providing":{inner:e,pairs:t},$uses(o){return e.$uses(o),this},[v]:e,$name(o){return e.$name(o),this},with(o,i){return $n(a,[...t,[qe(o)?o.slot:o,i]])}},n=Jt((...o)=>e(...o),(...o)=>h(new yt(a,o.map(i=>i.value)),e.shell.returnType??$),"tgpuFnCall",e.shell.argTypes),a=Object.assign(n,r);return Object.defineProperty(a,"toString",{value(){return`fn:${p(e)??"<unnamed>"}[${t.map(ka).join(", ")}]`}}),a[d].implementation=e[d].implementation,a}var yt=class{constructor(t,r){this._fn=t;this._params=r;this[v]=t}[v];"~resolve"(t){return t.resolve(`${t.resolve(this._fn)}(${this._params.map(r=>t.resolve(r)).join(", ")})`)}toString(){return`call:${p(this)??"<unnamed>"}`}};function En(e){let t={argTypes:e.in&&Object.keys(e.in).length!==0?[ae(e.in)]:[],targets:e.out,returnType:ae(e.out),isEntry:!0},r=(n,...a)=>Oa(t,oe(n,...a));return Object.assign(Object.assign(r,t),{does:r})}function Oa(e,t){let r=ne(e,t),n=e.returnType,a=e.argTypes[0];return typeof t=="string"&&Re(t,n,i=>r.applyExternals(i)),{shell:e,outputType:n,$uses(i){return r.applyExternals(i),this},[v]:r,$name(i){return w(r,i),j(n)&&n.$name(`${i}_Output`),j(a)&&a.$name(`${i}_Input`),this},"~resolve"(i){if(typeof t=="string")return r.resolve(i,"@fragment ");let s=i;if(s.callStack===void 0)throw new Error("Cannot resolve a TGSL function outside of a generation context");try{return s.callStack.push(n),r.resolve(i,"@fragment ")}finally{s.callStack.pop()}},toString(){return`fragmentFn:${p(r)??"<unnamed>"}`}}}function Gn(e){if(Object.keys(e.out).length===0)throw new Error("A vertexFn output cannot be empty since it must include the 'position' builtin.");let t={attributes:[e.in??{}],returnType:ae(e.out),argTypes:e.in&&Object.keys(e.in).length!==0?[ae(e.in)]:[],isEntry:!0},r=(n,...a)=>Wa(t,oe(n,...a));return Object.assign(Object.assign(r,t),{does:r})}function Wa(e,t){let r=ne(e,t),n=e.returnType,a=e.argTypes[0];return typeof t=="string"&&Re(t,n,i=>r.applyExternals(i)),{shell:e,outputType:n,inputType:a,$uses(i){return r.applyExternals(i),this},[v]:r,$name(i){return w(r,i),j(n)&&n.$name(`${i}_Output`),j(a)&&a.$name(`${i}_Input`),this},"~resolve"(i){if(typeof t=="string")return r.resolve(i,"@vertex ");let s=i;if(s.callStack===void 0)throw new Error("Cannot resolve a TGSL function outside of a generation context");try{return s.callStack.push(n),r.resolve(i,"@vertex ")}finally{s.callStack.pop()}},toString(){return`vertexFn:${p(r)??"<unnamed>"}`}}}var ie=class{lastUniqueId=0;makeUnique(t){let r;return t?(r=t.replaceAll(/\s/g,"_"),r=r.replaceAll(/[^\w\d]/g,"")):r="item",`${r}_${this.lastUniqueId++}`}},se=class{_usedNames=new Set;makeUnique(t){if(t===void 0)throw new Error("Unnamed item found when using a strict name registry");let r=0,n=t;for(;this._usedNames.has(n);)r++,n=`${t}_${r}`;return this._usedNames.add(n),n}};function Qe(e){return typeof e?.format=="string"}function kn(e,t){let r=[];if(O(e)){if(!Qe(t))throw new Error("Shader expected a single attribute, not a record of attributes to be passed in.");return r.push(t._layout),{usedVertexLayouts:r,bufferDefinitions:[{arrayStride:t._layout.stride,stepMode:t._layout.stepMode,attributes:[{format:t.format,offset:t.offset,shaderLocation:ee(e)??0}]}]}}let n=[],a=new WeakMap,o=0;for(let[i,s]of Object.entries(e)){if(mt(s))continue;let l=t[i];if(!l)throw new Error(`An attribute by the name of '${i}' was not provided to the shader.`);let u=l._layout,c=a.get(u);c||(r.push(u),c=[],n.push({arrayStride:u.stride,stepMode:u.stepMode,attributes:c}),a.set(u,c)),o=ee(s)??o,c.push({format:l.format,offset:l.offset,shaderLocation:o++})}return{usedVertexLayouts:r,bufferDefinitions:n}}var Ma=["bool","f32","f16","i32","u32","vec2f","vec3f","vec4f","vec2h","vec3h","vec4h","vec2i","vec3i","vec4i","vec2u","vec3u","vec4u","vec2<bool>","vec3<bool>","vec4<bool>","mat2x2f","mat3x3f","mat4x4f"];function Na(e){return Ma.includes(e.type)}function dr(e,[t,r]){return` ${Ue(r)}${t}: ${e.resolve(r)},
7
- `}function ja(e,t){let r=e.names.makeUnique(p(t));return e.addDeclaration(`
8
- struct ${r} {
9
- ${Object.entries(t.propTypes).map(n=>dr(e,n)).join("")}}
10
- `),r}function za(e,t){let r=e.names.makeUnique(p(t));return e.addDeclaration(`
11
- struct ${r} {
12
- ${Object.entries(t.propTypes).map(n=>Qe(n[1])?dr(e,[n[0],Me[n[1].format]]):dr(e,n)).join("")}
13
- }
14
- `),r}function qa(e,t){let r=e.resolve(t.elementType);return t.elementCount===0?`array<${r}>`:`array<${r}, ${t.elementCount}>`}function Qa(e,t){let r=e.resolve(Qe(t.elementType)?Me[t.elementType.format]:t.elementType);return t.elementCount===0?`array<${r}>`:`array<${r}, ${t.elementCount}>`}function fr(e,t){if(Se(t))return t.type==="unstruct"?za(e,t):t.type==="disarray"?Qa(e,t):t.type==="loose-decorated"?e.resolve(Qe(t.inner)?Me[t.inner.format]:t.inner):e.resolve(Me[t.type]);if(Na(t))return t.type;if(t.type==="struct")return ja(e,t);if(t.type==="array")return qa(e,t);if(t.type==="atomic")return`atomic<${fr(e,t.inner)}>`;if(t.type==="decorated")return e.resolve(t.inner);if(t.type==="ptr")return t.addressSpace==="storage"?`ptr<storage, ${e.resolve(t.inner)}, ${t.access==="read-write"?"read_write":t.access}>`:`ptr<${t.addressSpace}, ${e.resolve(t.inner)}>`;if(t.type==="abstractInt"||t.type==="abstractFloat")throw new Error("Abstract types have no concrete representation in WGSL");if(t.type==="void")throw new Error("Void has no representation in WGSL");dt(t,"resolveData")}import{BufferReader as wr,BufferWriter as br,getSystemEndianness as Xa}from"typed-binary";import{Measurer as Ha}from"typed-binary";function Ka(e,t){let r="size"in e?e.size:e.currentByteOffset,n=t-1,a=r&n;"skipBytes"in e?e.skipBytes(t-a&n):e.add(t-a&n)}var B=Ka;var Ln=new WeakMap;function Tt(e){let t=Ln.get(e);if(t)return t;let r=new Ha,n={},a;for(let o in e.propTypes){let i=e.propTypes[o];if(i===void 0)throw new Error(`Property ${o} is undefined in struct`);let s=r.size;B(r,q(e)?Q(i):V(i)),a&&(a.padding=r.size-s);let l=S(i);n[o]={offset:r.size,size:l},a=n[o],r.add(l)}return a&&(a.padding=L(S(e),V(e))-r.size),Ln.set(e,n),n}var ht=(()=>{try{return new Function("return true"),!0}catch{return!1}})(),cr=new WeakMap,gr={u32:"u32",vec2u:"u32",vec3u:"u32",vec4u:"u32",i32:"i32",vec2i:"i32",vec3i:"i32",vec4i:"i32",f32:"f32",vec2f:"f32",vec3f:"f32",vec4f:"f32",vec2h:"f32",vec3h:"f32",vec4h:"f32",mat2x2f:"f32",mat3x3f:"f32",mat4x4f:"f32"},yr={u32:"setUint32",i32:"setInt32",f32:"setFloat32"};function xt(e,t,r){if(un(e)||ot(e))return xt(e.inner,t,r);if(A(e)||q(e)){let a=Tt(e),o=Object.entries(a).sort((s,l)=>s[1].offset-l[1].offset),i="";for(let[s,l]of o){let u=e.propTypes[s];u&&(i+=xt(u,`(${t} + ${l.offset})`,`${r}.${s}`))}return i}if(z(e)||ve(e)){let a=e,o=L(S(a.elementType),V(a.elementType)),i="";return i+=`for (let i = 0; i < ${a.elementCount}; i++) {
15
- `,i+=xt(a.elementType,`(${t} + i * ${o})`,`${r}[i]`),i+=`}
16
- `,i}if(Y(e)){let a=gr[e.type],o="",i=yr[a],s=["x","y","z","w"],l=rn(e)?2:nn(e)?3:4;for(let u=0;u<l;u++)o+=`output.${i}((${t} + ${u*4}), ${r}.${s[u]}, littleEndian);
17
- `;return o}if(fe(e)){let a=gr[e.type],o=yr[a],i=on(e)?2:sn(e)?3:4,s=i*i,l=L(i*4,8),u="";for(let c=0;c<s;c++){let m=Math.floor(c/i),g=c%i,T=m*l+g*4;u+=`output.${o}((${t} + ${T}), ${r}.columns[${m}].${["x","y","z","w"][g]}, littleEndian);
18
- `}return u}let n=gr[e.type];return`output.${yr[n]}(${t}, ${r}, littleEndian);
19
- `}function wt(e){if(cr.has(e))return cr.get(e);let t=xt(e,"offset","value"),r=new Function("output","offset","value","littleEndian=true",t);return cr.set(e,r),r}var Ce={bool(){throw new Error("Booleans are not host-shareable")},f32(e,t,r){e.writeFloat32(r)},f16(e,t,r){e.writeFloat16(r)},i32(e,t,r){e.writeInt32(r)},u32(e,t,r){e.writeUint32(r)},vec2f(e,t,r){e.writeFloat32(r.x),e.writeFloat32(r.y)},vec2h(e,t,r){e.writeFloat16(r.x),e.writeFloat16(r.y)},vec2i(e,t,r){e.writeInt32(r.x),e.writeInt32(r.y)},vec2u(e,t,r){e.writeUint32(r.x),e.writeUint32(r.y)},"vec2<bool>"(){throw new Error("Booleans are not host-shareable")},vec3f(e,t,r){e.writeFloat32(r.x),e.writeFloat32(r.y),e.writeFloat32(r.z)},vec3h(e,t,r){e.writeFloat16(r.x),e.writeFloat16(r.y),e.writeFloat16(r.z)},vec3i(e,t,r){e.writeInt32(r.x),e.writeInt32(r.y),e.writeInt32(r.z)},vec3u(e,t,r){e.writeUint32(r.x),e.writeUint32(r.y),e.writeUint32(r.z)},"vec3<bool>"(){throw new Error("Booleans are not host-shareable")},vec4f(e,t,r){e.writeFloat32(r.x),e.writeFloat32(r.y),e.writeFloat32(r.z),e.writeFloat32(r.w)},vec4h(e,t,r){e.writeFloat16(r.x),e.writeFloat16(r.y),e.writeFloat16(r.z),e.writeFloat16(r.w)},vec4i(e,t,r){e.writeInt32(r.x),e.writeInt32(r.y),e.writeInt32(r.z),e.writeInt32(r.w)},vec4u(e,t,r){e.writeUint32(r.x),e.writeUint32(r.y),e.writeUint32(r.z),e.writeUint32(r.w)},"vec4<bool>"(){throw new Error("Booleans are not host-shareable")},mat2x2f(e,t,r){for(let n=0;n<r.length;++n)e.writeFloat32(r[n])},mat3x3f(e,t,r){for(let n=0;n<r.length;++n)e.writeFloat32(r[n])},mat4x4f(e,t,r){for(let n=0;n<r.length;++n)e.writeFloat32(r[n])},struct(e,t,r){let n=V(t);B(e,n);for(let[a,o]of Object.entries(t.propTypes))B(e,V(o)),ue(e,o,r[a]);B(e,n)},array(e,t,r){if(t.elementCount===0)throw new Error("Cannot write using a runtime-sized schema.");let n=V(t);B(e,n);let a=e.currentByteOffset;for(let o=0;o<Math.min(t.elementCount,r.length);o++)B(e,n),ue(e,t.elementType,r[o]);e.seekTo(a+S(t))},ptr(){throw new Error("Pointers are not host-shareable")},atomic(e,t,r){Ce[t.inner.type]?.(e,t,r)},decorated(e,t,r){let n=Q(t);B(e,n);let a=e.currentByteOffset;Ce[t.inner?.type]?.(e,t.inner,r),e.seekTo(a+S(t))},uint8(e,t,r){e.writeUint8(r)},uint8x2(e,t,r){e.writeUint8(r.x),e.writeUint8(r.y)},uint8x4(e,t,r){e.writeUint8(r.x),e.writeUint8(r.y),e.writeUint8(r.z),e.writeUint8(r.w)},sint8(e,t,r){e.writeInt8(r)},sint8x2(e,t,r){e.writeInt8(r.x),e.writeInt8(r.y)},sint8x4(e,t,r){e.writeInt8(r.x),e.writeInt8(r.y),e.writeInt8(r.z),e.writeInt8(r.w)},unorm8(e,t,r){e.writeUint8(r*255)},unorm8x2(e,t,r){e.writeUint8(r.x*255),e.writeUint8(r.y*255)},unorm8x4(e,t,r){e.writeUint8(r.x*255),e.writeUint8(r.y*255),e.writeUint8(r.z*255),e.writeUint8(r.w*255)},snorm8(e,t,r){e.writeUint8(r*127+128)},snorm8x2(e,t,r){e.writeUint8(r.x*127+128),e.writeUint8(r.y*127+128)},snorm8x4(e,t,r){e.writeUint8(r.x*127+128),e.writeUint8(r.y*127+128),e.writeUint8(r.z*127+128),e.writeUint8(r.w*127+128)},uint16(e,t,r){e.writeUint16(r)},uint16x2(e,t,r){e.writeUint16(r.x),e.writeUint16(r.y)},uint16x4(e,t,r){e.writeUint16(r.x),e.writeUint16(r.y),e.writeUint16(r.z),e.writeUint16(r.w)},sint16(e,t,r){e.writeInt16(r)},sint16x2(e,t,r){e.writeInt16(r.x),e.writeInt16(r.y)},sint16x4(e,t,r){e.writeInt16(r.x),e.writeInt16(r.y),e.writeInt16(r.z),e.writeInt16(r.w)},unorm16(e,t,r){e.writeUint16(r*65535)},unorm16x2(e,t,r){e.writeUint16(r.x*65535),e.writeUint16(r.y*65535)},unorm16x4(e,t,r){e.writeUint16(r.x*65535),e.writeUint16(r.y*65535),e.writeUint16(r.z*65535),e.writeUint16(r.w*65535)},snorm16(e,t,r){e.writeUint16(r*32767+32768)},snorm16x2(e,t,r){e.writeUint16(r.x*32767+32768),e.writeUint16(r.y*32767+32768)},snorm16x4(e,t,r){e.writeUint16(r.x*32767+32768),e.writeUint16(r.y*32767+32768),e.writeUint16(r.z*32767+32768),e.writeUint16(r.w*32767+32768)},float16(e,t,r){e.writeFloat16(r)},float16x2(e,t,r){e.writeFloat16(r.x),e.writeFloat16(r.y)},float16x4(e,t,r){e.writeFloat16(r.x),e.writeFloat16(r.y),e.writeFloat16(r.z),e.writeFloat16(r.w)},float32(e,t,r){e.writeFloat32(r)},float32x2(e,t,r){e.writeFloat32(r.x),e.writeFloat32(r.y)},float32x3(e,t,r){e.writeFloat32(r.x),e.writeFloat32(r.y),e.writeFloat32(r.z)},float32x4(e,t,r){e.writeFloat32(r.x),e.writeFloat32(r.y),e.writeFloat32(r.z),e.writeFloat32(r.w)},uint32(e,t,r){e.writeUint32(r)},uint32x2(e,t,r){e.writeUint32(r.x),e.writeUint32(r.y)},uint32x3(e,t,r){e.writeUint32(r.x),e.writeUint32(r.y),e.writeUint32(r.z)},uint32x4(e,t,r){e.writeUint32(r.x),e.writeUint32(r.y),e.writeUint32(r.z),e.writeUint32(r.w)},sint32(e,t,r){e.writeInt32(r)},sint32x2(e,t,r){e.writeInt32(r.x),e.writeInt32(r.y)},sint32x3(e,t,r){e.writeInt32(r.x),e.writeInt32(r.y),e.writeInt32(r.z)},sint32x4(e,t,r){e.writeInt32(r.x),e.writeInt32(r.y),e.writeInt32(r.z),e.writeInt32(r.w)},"unorm10-10-10-2"(e,t,r){let n=0;n|=(r.x*1023&1023)<<22,n|=(r.x*1023&1023)<<12,n|=(r.y*1023&1023)<<2,n|=r.z*3&3,e.writeUint32(n)},"unorm8x4-bgra"(e,t,r){e.writeUint8(r.z*255),e.writeUint8(r.y*255),e.writeUint8(r.x*255),e.writeUint8(r.w*255)},disarray(e,t,r){let n=V(t);B(e,n);let a=e.currentByteOffset;for(let o=0;o<Math.min(t.elementCount,r.length);o++)B(e,n),Ce[t.elementType?.type]?.(e,t.elementType,r[o]);e.seekTo(a+S(t))},unstruct(e,t,r){for(let[n,a]of Object.entries(t.propTypes))Ce[a.type]?.(e,a,r[n])},"loose-decorated"(e,t,r){let n=Q(t);B(e,n);let a=e.currentByteOffset,o=Ce[t.inner?.type];return o?.(e,t.inner,r),e.seekTo(a+S(t)),r}};function ue(e,t,r){let n=Ce[t.type];if(!n)throw new Error(`Cannot write data of type '${t.type}'.`);n(e,t,r)}var xe={bool(){throw new Error("Booleans are not host-shareable")},f32(e){return e.readFloat32()},f16(e){return e.readFloat16()},i32(e){return e.readInt32()},u32(e){return e.readUint32()},vec2f(e){return W(e.readFloat32(),e.readFloat32())},vec3f(e){return ce(e.readFloat32(),e.readFloat32(),e.readFloat32())},vec4f(e){return P(e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32())},vec2h(e){return Le(e.readFloat16(),e.readFloat16())},vec3h(e){return Oe(e.readFloat16(),e.readFloat16(),e.readFloat16())},vec4h(e){return We(e.readFloat16(),e.readFloat16(),e.readFloat16(),e.readFloat16())},vec2i(e){return te(e.readInt32(),e.readInt32())},vec3i(e){return Fe(e.readInt32(),e.readInt32(),e.readInt32())},vec4i(e){return G(e.readInt32(),e.readInt32(),e.readInt32(),e.readInt32())},vec2u(e){return re(e.readUint32(),e.readUint32())},vec3u(e){return Ie(e.readUint32(),e.readUint32(),e.readUint32())},vec4u(e){return k(e.readUint32(),e.readUint32(),e.readUint32(),e.readUint32())},"vec2<bool>"(){throw new Error("Booleans are not host-shareable")},"vec3<bool>"(){throw new Error("Booleans are not host-shareable")},"vec4<bool>"(){throw new Error("Booleans are not host-shareable")},mat2x2f(e){return ut(e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32())},mat3x3f(e){let t=()=>{let r=e.readFloat32();return e.readFloat32(),r};return pt(e.readFloat32(),e.readFloat32(),t(),e.readFloat32(),e.readFloat32(),t(),e.readFloat32(),e.readFloat32(),t())},mat4x4f(e){return lt(e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32())},struct(e,t){let r=V(t);B(e,r);let n={};for(let[a,o]of Object.entries(t.propTypes))B(e,V(o)),n[a]=N(e,o);return B(e,r),n},array(e,t){if(t.elementCount===0)throw new Error("Cannot read using a runtime-sized schema.");let r=V(t),n=[];for(let a=0;a<t.elementCount;a++){B(e,r);let o=t.elementType,i=N(e,o);n.push(i)}return B(e,r),n},ptr(){throw new Error("Pointers are not host-shareable")},atomic(e,t){return N(e,t.inner)},decorated(e,t){let r=Q(t);B(e,r);let n=e.currentByteOffset,a=N(e,t.inner);return e.seekTo(n+S(t)),a},uint8:e=>e.readUint8(),uint8x2:e=>re(e.readUint8(),e.readUint8()),uint8x4:e=>k(e.readUint8(),e.readUint8(),e.readUint8(),e.readUint8()),sint8:e=>e.readInt8(),sint8x2:e=>te(e.readInt8(),e.readInt8()),sint8x4:e=>G(e.readInt8(),e.readInt8(),e.readInt8(),e.readInt8()),unorm8:e=>e.readUint8()/255,unorm8x2:e=>W(e.readUint8()/255,e.readUint8()/255),unorm8x4:e=>P(e.readUint8()/255,e.readUint8()/255,e.readUint8()/255,e.readUint8()/255),snorm8:e=>(e.readUint8()-128)/127,snorm8x2:e=>W((e.readUint8()-128)/127,(e.readUint8()-128)/127),snorm8x4:e=>P((e.readUint8()-128)/127,(e.readUint8()-128)/127,(e.readUint8()-128)/127,(e.readUint8()-128)/127),uint16:e=>e.readUint16(),uint16x2:e=>re(e.readUint16(),e.readUint16()),uint16x4:e=>k(e.readUint16(),e.readUint16(),e.readUint16(),e.readUint16()),sint16:e=>e.readInt16(),sint16x2:e=>te(e.readInt16(),e.readInt16()),sint16x4:e=>G(e.readInt16(),e.readInt16(),e.readInt16(),e.readInt16()),unorm16:e=>e.readUint16()/65535,unorm16x2:e=>W(e.readUint16()/65535,e.readUint16()/65535),unorm16x4:e=>P(e.readUint16()/65535,e.readUint16()/65535,e.readUint16()/65535,e.readUint16()/65535),snorm16:e=>(e.readUint16()-32768)/32767,snorm16x2:e=>W(xe.snorm16(e),xe.snorm16(e)),snorm16x4:e=>P(xe.snorm16(e),xe.snorm16(e),xe.snorm16(e),xe.snorm16(e)),float16(e){return e.readFloat16()},float16x2:e=>W(e.readFloat16(),e.readFloat16()),float16x4:e=>P(e.readFloat16(),e.readFloat16(),e.readFloat16(),e.readFloat16()),float32:e=>e.readFloat32(),float32x2:e=>W(e.readFloat32(),e.readFloat32()),float32x3:e=>ce(e.readFloat32(),e.readFloat32(),e.readFloat32()),float32x4:e=>P(e.readFloat32(),e.readFloat32(),e.readFloat32(),e.readFloat32()),uint32:e=>e.readUint32(),uint32x2:e=>re(e.readUint32(),e.readUint32()),uint32x3:e=>Ie(e.readUint32(),e.readUint32(),e.readUint32()),uint32x4:e=>k(e.readUint32(),e.readUint32(),e.readUint32(),e.readUint32()),sint32:e=>e.readInt32(),sint32x2:e=>te(e.readInt32(),e.readInt32()),sint32x3:e=>Fe(e.readInt32(),e.readInt32(),e.readInt32()),sint32x4:e=>G(e.readInt32(),e.readInt32(),e.readInt32(),e.readInt32()),"unorm10-10-10-2"(e){let t=e.readUint32(),r=(t>>22)/1023,n=(t>>12&1023)/1023,a=(t>>2&1023)/1023,o=(t&3)/3;return P(r,n,a,o)},"unorm8x4-bgra"(e){let t=e.readByte()/255,r=e.readByte()/255,n=e.readByte()/255,a=e.readByte()/255;return P(n,r,t,a)},unstruct(e,t){let r={};for(let[n,a]of Object.entries(t.propTypes))r[n]=N(e,a);return r},disarray(e,t){let r=V(t),n=[];for(let a=0;a<t.elementCount;a++)B(e,r),n.push(N(e,t.elementType));return B(e,r),n},"loose-decorated"(e,t){B(e,Q(t));let r=e.currentByteOffset,n=N(e,t.inner);return e.seekTo(r+S(t)),n}};function N(e,t){let r=xe[t.type];if(!r)throw new Error(`Cannot read data of type '${t.type}'.`);return r(e,t)}import{BufferWriter as Ya}from"typed-binary";function On(e,t){let r=S(e);if(r===0||t===void 0||t===null)return[];let n=new ArrayBuffer(r),a=new Ya(n),o=[];function i(u,c,m,g){if(c!=null){if(A(u)||q(u)){let T=Tt(u);for(let[x,y]of Object.entries(T)){let F=u.propTypes[x];if(!F)continue;let U=c[x];U!==void 0&&i(F,U,m+y.offset,y.padding??g)}return}if(z(u)||ve(u)){let T=u,x=L(S(T.elementType),V(T.elementType));if(!Array.isArray(c))throw new Error("Partial value for array must be an array");let y=c??[];y.sort((F,U)=>F.idx-U.idx);for(let{idx:F,value:U}of y)i(T.elementType,U,m+F*x,x-S(T.elementType))}else{let T=S(u);a.seekTo(m),ue(a,u,c),o.push({start:m,end:m+T,padding:g})}}}if(i(e,t,0),o.length===0)return[];let s=[],l=o[0];for(let u=1;u<o.length;u++){let c=o[u];if(!c||!l)throw new Error("Internal error: missing segment");c.start===l.end+(l.padding??0)?(l.end=c.end,l.padding=c.padding):(s.push({data:new Uint8Array(n,l.start,l.end-l.start)}),l=c)}if(!l)throw new Error("Internal error: missing segment");return s.push({data:new Uint8Array(n,l.start,l.end-l.start)}),s}function he(e){return!!e?.usableAsStorage}var Ke=class e extends Error{constructor(t){super(`Resource '${p(t)??"<unnamed>"}' cannot be bound as 'storage'. Use .$usage('storage') to allow it.`),Object.setPrototypeOf(this,e.prototype)}};function bt(e){return!!e.usableAsUniform}var jn={uniform:"uniform",mutable:"storage, read_write",readonly:"storage, read"},He=class{constructor(t,r){this.usage=t;this.buffer=r;this[d]={dataType:r.dataType},this[v]=r}resourceType="buffer-usage";[d];[v];$name(t){return this.buffer.$name(t),this}"~resolve"(t){let r=t.names.makeUnique(p(this)),{group:n,binding:a}=t.allocateFixedEntry(this.usage==="uniform"?{uniform:this.buffer.dataType}:{storage:this.buffer.dataType,access:this.usage},this.buffer),o=jn[this.usage];return t.addDeclaration(`@group(${n}) @binding(${a}) var<${o}> ${r}: ${t.resolve(this.buffer.dataType)};`),r}write(t){this.buffer.write(t)}toString(){return`${this.usage}:${p(this)??"<unnamed>"}`}[I](){return new Proxy({"~resolve":t=>t.resolve(this),toString:()=>`.value:${p(this)??"<unnamed>"}`,[b]:this.buffer.dataType},K)}get value(){if(!J())throw new Error("Cannot access buffer's value directly in JS.");return this[I]()}},Je=class{constructor(t,r,n){this.usage=t;this.dataType=r;this._membership=n;this[d]={dataType:r},w(this,n.key)}resourceType="buffer-usage";[d];"~resolve"(t){let r=t.names.makeUnique(p(this)),n=t.allocateLayoutEntry(this._membership.layout),a=jn[this.usage];return t.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var<${a}> ${r}: ${t.resolve(this.dataType)};`),r}toString(){return`${this.usage}:${p(this)??"<unnamed>"}`}[I](){return new Proxy({"~resolve":t=>t.resolve(this),toString:()=>`.value:${p(this)??"<unnamed>"}`,[b]:this.dataType},K)}get value(){if(!J())throw new Error("Cannot access buffer's value directly in JS.");return this[I]()}},Wn=new WeakMap;function Tr(e){if(!he(e))throw new Error(`Cannot pass ${e} to asMutable, as it is not allowed to be used as storage. To allow it, call .$usage('storage') when creating the buffer.`);let t=Wn.get(e);return t||(t=new He("mutable",e),Wn.set(e,t)),t}var Mn=new WeakMap;function xr(e){if(!he(e))throw new Error(`Cannot pass ${e} to asReadonly, as it is not allowed to be used as storage. To allow it, call .$usage('storage') when creating the buffer.`);let t=Mn.get(e);return t||(t=new He("readonly",e),Mn.set(e,t)),t}var Nn=new WeakMap;function hr(e){if(!bt(e))throw new Error(`Cannot pass ${e} to asUniform, as it is not allowed to be used as a uniform. To allow it, call .$usage('uniform') when creating the buffer.`);let t=Nn.get(e);return t||(t=new He("uniform",e),Nn.set(e,t)),t}var Za={uniform:hr,mutable:Tr,readonly:xr};function qn(e,t,r){return be(t)?new St(e,t,r):new St(e,t,r,["storage","uniform"])}function pe(e){return e.resourceType==="buffer"}function eo(e){return!!e.usableAsVertex}var zn=Xa(),St=class{constructor(t,r,n,a){this._group=t;this.dataType=r;this.initialOrBuffer=n;this._disallowedUsages=a;bn(n)?(this._ownBuffer=!1,this._buffer=n):(this._ownBuffer=!0,this.initial=n)}resourceType="buffer";flags=GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC;_buffer=null;_ownBuffer;_destroyed=!1;_hostBuffer;initial;usableAsUniform=!1;usableAsStorage=!1;usableAsVertex=!1;get buffer(){let t=this._group.device;if(this._destroyed)throw new Error("This buffer has been destroyed");if(!this._buffer&&(this._buffer=t.createBuffer({size:S(this.dataType),usage:this.flags,mappedAtCreation:!!this.initial,label:p(this)??"<unnamed>"}),this.initial)){let r=new br(this._buffer.getMappedRange());ue(r,this.dataType,this.initial),this._buffer.unmap()}return this._buffer}get destroyed(){return this._destroyed}$name(t){return w(this,t),this._buffer&&(this._buffer.label=t),this}$usage(...t){for(let r of t){if(this._disallowedUsages?.includes(r))throw new Error(`Buffer of type ${this.dataType.type} cannot be used as ${r}`);this.flags|=r==="uniform"?GPUBufferUsage.UNIFORM:0,this.flags|=r==="storage"?GPUBufferUsage.STORAGE:0,this.flags|=r==="vertex"?GPUBufferUsage.VERTEX:0,this.usableAsUniform=this.usableAsUniform||r==="uniform",this.usableAsStorage=this.usableAsStorage||r==="storage",this.usableAsVertex=this.usableAsVertex||r==="vertex"}return this}$addFlags(t){if(!this._ownBuffer)throw new Error("Cannot add flags to a buffer that is not managed by TypeGPU.");return t&GPUBufferUsage.MAP_READ?(this.flags=GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,this):t&GPUBufferUsage.MAP_WRITE?(this.flags=GPUBufferUsage.COPY_SRC|GPUBufferUsage.MAP_WRITE,this):(this.flags|=t,this)}compileWriter(){if(ht)wt(this.dataType);else throw new Error("This environment does not allow eval")}write(t){let r=this.buffer,n=this._group.device;if(r.mapState==="mapped"){let o=r.getMappedRange();if(ht){wt(this.dataType)(new DataView(o),0,t,zn==="little");return}ue(new br(o),this.dataType,t);return}let a=S(this.dataType);this._hostBuffer||(this._hostBuffer=new ArrayBuffer(a)),this._group.flush(),ht?wt(this.dataType)(new DataView(this._hostBuffer),0,t,zn==="little"):ue(new br(this._hostBuffer),this.dataType,t),n.queue.writeBuffer(r,0,this._hostBuffer,0,a)}writePartial(t){let r=this.buffer,n=this._group.device,a=On(this.dataType,t);if(r.mapState==="mapped"){let o=r.getMappedRange(),i=new Uint8Array(o);for(let s of a)i.set(s.data,s.data.byteOffset)}else for(let o of a)n.queue.writeBuffer(r,o.data.byteOffset,o.data,0,o.data.byteLength)}copyFrom(t){if(this.buffer.mapState==="mapped")throw new Error("Cannot copy to a mapped buffer.");let r=S(this.dataType);this._group.commandEncoder.copyBufferToBuffer(t.buffer,0,this.buffer,0,r)}async read(){this._group.flush();let t=this.buffer,r=this._group.device;if(t.mapState==="mapped"){let i=t.getMappedRange();return N(new wr(i),this.dataType)}if(t.usage&GPUBufferUsage.MAP_READ){await t.mapAsync(GPUMapMode.READ);let i=t.getMappedRange(),s=N(new wr(i),this.dataType);return t.unmap(),s}let n=r.createBuffer({size:S(this.dataType),usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),a=r.createCommandEncoder();a.copyBufferToBuffer(t,0,n,0,S(this.dataType)),r.queue.submit([a.finish()]),await r.queue.onSubmittedWorkDone(),await n.mapAsync(GPUMapMode.READ,0,S(this.dataType));let o=N(new wr(n.getMappedRange()),this.dataType);return n.unmap(),n.destroy(),o}as(t){return Za[t]?.(this)}destroy(){this._destroyed||(this._destroyed=!0,this._ownBuffer&&this._buffer?.destroy())}toString(){return`buffer:${p(this)??"<unnamed>"}`}};function Qn(e){return new Sr(e)}function Kn(e){return new vr(e)}function Ye(e){let t=e;return t?.resourceType==="sampler"&&!!t[d]}function Xe(e){let t=e;return t?.resourceType==="sampler-comparison"&&!!t[d]}var vt=class{constructor(t){this._membership=t;this[b]=this,this[d]={},w(this,t.key)}[b];[d];resourceType="sampler";"~resolve"(t){let r=t.names.makeUnique(p(this)),n=t.allocateLayoutEntry(this._membership.layout);return t.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: sampler;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}},Dt=class{constructor(t){this._membership=t;this[b]=this,this[d]={},w(this,t.key)}[b];[d];resourceType="sampler-comparison";"~resolve"(t){let r=t.names.makeUnique(p(this)),n=t.allocateLayoutEntry(this._membership.layout);return t.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: sampler_comparison;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}},Sr=class{constructor(t){this._props=t;this[b]=this,this[d]={unwrap:r=>(this._sampler||(this._sampler=r.device.createSampler({...this._props,label:p(this)??"<unnamed>"})),this._sampler)},this._filtering=t.minFilter==="linear"||t.magFilter==="linear"||t.mipmapFilter==="linear"}[b];[d];resourceType="sampler";_filtering;_sampler=null;$name(t){return w(this,t),this}"~resolve"(t){let r=t.names.makeUnique(p(this)),{group:n,binding:a}=t.allocateFixedEntry({sampler:this._filtering?"filtering":"non-filtering"},this);return t.addDeclaration(`@group(${n}) @binding(${a}) var ${r}: sampler;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}},vr=class{constructor(t){this._props=t;this[b]=this,this[d]={unwrap:r=>(this._sampler||(this._sampler=r.device.createSampler({...this._props,label:p(this)??"<unnamed>"})),this._sampler)}}[b];[d];resourceType="sampler-comparison";_sampler=null;$name(t){return w(this,t),this}"~resolve"(t){let r=t.names.makeUnique(p(this)),{group:n,binding:a}=t.allocateFixedEntry({sampler:"comparison"},this);return t.addDeclaration(`@group(${n}) @binding(${a}) var ${r}: sampler_comparison;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}};var Ft=class{constructor(t){this._membership=t;w(this,t.key)}resourceType="external-texture";"~resolve"(t){let r=t.names.makeUnique(p(this)),n=t.allocateLayoutEntry(this._membership.layout);return t.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: texture_external;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}};var Hn={r8unorm:f,r8snorm:f,r8uint:R,r8sint:C,r16uint:R,r16sint:C,r16float:f,rg8unorm:f,rg8snorm:f,rg8uint:R,rg8sint:C,r32uint:R,r32sint:C,r32float:f,rg16uint:R,rg16sint:C,rg16float:f,rgba8unorm:f,"rgba8unorm-srgb":f,rgba8snorm:f,rgba8uint:R,rgba8sint:C,bgra8unorm:f,"bgra8unorm-srgb":f,rgb9e5ufloat:f,rgb10a2uint:R,rgb10a2unorm:f,rg11b10ufloat:f,rg32uint:R,rg32sint:C,rg32float:f,rgba16uint:R,rgba16sint:C,rgba16float:f,rgba32uint:R,rgba32sint:C,rgba32float:f,stencil8:f,depth16unorm:f,depth24plus:f,"depth24plus-stencil8":f,depth32float:f,"depth32float-stencil8":f,"bc1-rgba-unorm":f,"bc1-rgba-unorm-srgb":f,"bc2-rgba-unorm":f,"bc2-rgba-unorm-srgb":f,"bc3-rgba-unorm":f,"bc3-rgba-unorm-srgb":f,"bc4-r-unorm":f,"bc4-r-snorm":f,"bc5-rg-unorm":f,"bc5-rg-snorm":f,"bc6h-rgb-ufloat":f,"bc6h-rgb-float":f,"bc7-rgba-unorm":f,"bc7-rgba-unorm-srgb":f,"etc2-rgb8unorm":f,"etc2-rgb8unorm-srgb":f,"etc2-rgb8a1unorm":f,"etc2-rgb8a1unorm-srgb":f,"etc2-rgba8unorm":f,"etc2-rgba8unorm-srgb":f,"eac-r11unorm":f,"eac-r11snorm":f,"eac-rg11unorm":f,"eac-rg11snorm":f,"astc-4x4-unorm":f,"astc-4x4-unorm-srgb":f,"astc-5x4-unorm":f,"astc-5x4-unorm-srgb":f,"astc-5x5-unorm":f,"astc-5x5-unorm-srgb":f,"astc-6x5-unorm":f,"astc-6x5-unorm-srgb":f,"astc-6x6-unorm":f,"astc-6x6-unorm-srgb":f,"astc-8x5-unorm":f,"astc-8x5-unorm-srgb":f,"astc-8x6-unorm":f,"astc-8x6-unorm-srgb":f,"astc-8x8-unorm":f,"astc-8x8-unorm-srgb":f,"astc-10x5-unorm":f,"astc-10x5-unorm-srgb":f,"astc-10x6-unorm":f,"astc-10x6-unorm-srgb":f,"astc-10x8-unorm":f,"astc-10x8-unorm-srgb":f,"astc-10x10-unorm":f,"astc-10x10-unorm-srgb":f,"astc-12x10-unorm":f,"astc-12x10-unorm-srgb":f,"astc-12x12-unorm":f,"astc-12x12-unorm-srgb":f},Ze={rgba8unorm:P,rgba8snorm:P,rgba8uint:k,rgba8sint:G,rgba16uint:k,rgba16sint:G,rgba16float:P,r32uint:k,r32sint:G,r32float:P,rg32uint:k,rg32sint:G,rg32float:P,rgba32uint:k,rgba32sint:G,rgba32float:P,bgra8unorm:P},Jn={f32:"float",u32:"uint",i32:"sint"},Yn={float:f,"unfilterable-float":f,uint:R,sint:C,depth:f};function Xn(e,t){return new Dr(e,t)}function X(e){return e?.resourceType==="texture"&&!!e[d]}function et(e){return e?.resourceType==="texture-storage-view"&&!!e[d]}function tt(e){return e?.resourceType==="texture-sampled-view"&&!!e[d]}var Zn={mutable:"read_write",readonly:"read",writeonly:"write"},Dr=class{constructor(t,r){this.props=t;this._branch=r;this[d]={unwrap:()=>{if(this._destroyed)throw new Error("This texture has been destroyed");return this._texture||(this._texture=this._branch.device.createTexture({label:p(this)??"<unnamed>",format:this.props.format,size:this.props.size,usage:this._flags,dimension:this.props.dimension??"2d",viewFormats:this.props.viewFormats??[],mipLevelCount:this.props.mipLevelCount??1,sampleCount:this.props.sampleCount??1})),this._texture}}}[d];resourceType="texture";usableAsSampled=!1;usableAsStorage=!1;usableAsRender=!1;_destroyed=!1;_flags=GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC;_texture=null;$name(t){return w(this,t),this}$usage(...t){let r=t.includes("storage"),n=t.includes("sampled"),a=t.includes("render");return this._flags|=n?GPUTextureUsage.TEXTURE_BINDING:0,this._flags|=r?GPUTextureUsage.STORAGE_BINDING:0,this._flags|=a?GPUTextureUsage.RENDER_ATTACHMENT:0,this.usableAsStorage||=r,this.usableAsSampled||=n,this.usableAsRender||=a,this}createView(t,r){if(t==="sampled")return this._asSampled(r);let n=r;switch(t){case"mutable":return this._asMutable(n);case"readonly":return this._asReadonly(n);case"writeonly":return this._asWriteonly(n)}}_asStorage(t,r){if(!this.usableAsStorage)throw new Error("Unusable as storage");let n=t?.format??this.props.format,a=Ze[n];return le(!!a,`Unsupported storage texture format: ${n}`),new Fr(t??{},r,this)}_asReadonly(t){return this._asStorage(t,"readonly")}_asWriteonly(t){return this._asStorage(t,"writeonly")}_asMutable(t){return this._asStorage(t,"mutable")}_asSampled(t){if(!this.usableAsSampled)throw new Error("Unusable as sampled");let r=t?.format??this.props.format;if(!Ze[r])throw new Error(`Unsupported storage texture format: ${r}`);return new Ir(t,this)}destroy(){this._destroyed||(this._destroyed=!0,this._texture?.destroy())}},At={"1d":"1d","2d":"2d","2d-array":"2d_array",cube:"cube","cube-array":"cube_array","3d":"3d"},Fr=class{constructor(t,r,n){this.access=r;this._texture=n;this[b]=this,this[d]={unwrap:()=>(this._view||(this._view=this._texture[d].unwrap().createView({label:`${p(this)??"<unnamed>"} - View`,format:this._format,dimension:this.dimension})),this._view)},this[v]=n,this.dimension=t?.dimension??n.props.dimension??"2d",this._format=t?.format??n.props.format,this.texelDataType=Ze[this._format]}[b];[d];[v];resourceType="texture-storage-view";texelDataType;dimension;_view;_format;$name(t){return this._texture.$name(t),this}"~resolve"(t){let r=t.names.makeUnique(p(this)),{group:n,binding:a}=t.allocateFixedEntry({storageTexture:this._format,access:this.access,viewDimension:this.dimension},this),o=`texture_storage_${At[this.dimension]}`;return t.addDeclaration(`@group(${n}) @binding(${a}) var ${r}: ${o}<${this._format}, ${Zn[this.access]}>;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}},It=class{constructor(t,r,n,a){this._format=t;this.dimension=r;this.access=n;this._membership=a;this[b]=this,this[d]={},this.texelDataType=Ze[this._format],w(this,a.key)}[b];[d];resourceType="texture-storage-view";texelDataType;"~resolve"(t){let r=t.names.makeUnique(p(this)),n=t.allocateLayoutEntry(this._membership.layout),a=`texture_storage_${At[this.dimension]}`;return t.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: ${a}<${this._format}, ${Zn[this.access]}>;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}},Ir=class{constructor(t,r){this._props=t;this._texture=r;this[b]=this,this[d]={unwrap:()=>(this._view||(this._view=this._texture[d].unwrap().createView({label:`${p(this)??"<unnamed>"} - View`,...this._props})),this._view)},this[v]=r,this.dimension=t?.dimension??r.props.dimension??"2d",this._format=t?.format??r.props.format,this.channelDataType=Hn[this._format]}[b];[d];[v];resourceType="texture-sampled-view";channelDataType;dimension;_format;_view;$name(t){return this._texture.$name(t),this}"~resolve"(t){let r=t.names.makeUnique(p(this)),n=(this._texture.props.sampleCount??1)>1,{group:a,binding:o}=t.allocateFixedEntry({texture:Jn[this.channelDataType.type],viewDimension:this.dimension,multisampled:n},this),i=n?"texture_multisampled_2d":`texture_${At[this.dimension]}`;return t.addDeclaration(`@group(${a}) @binding(${o}) var ${r}: ${i}<${t.resolve(this.channelDataType)}>;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}},Ut=class{constructor(t,r,n,a){this.dimension=r;this._multisampled=n;this._membership=a;this[b]=this,this[d]={},w(this,a.key),this.channelDataType=Yn[t]}[b];[d];resourceType="texture-sampled-view";channelDataType;"~resolve"(t){let r=t.names.makeUnique(p(this)),n=t.allocateLayoutEntry(this._membership.layout),a=this._multisampled?"texture_multisampled_2d":`texture_${At[this.dimension]}`;return t.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: ${a}<${t.resolve(this.channelDataType)}>;`),r}toString(){return`${this.resourceType}:${p(this)??"<unnamed>"}`}};function Ur(e){return!!e?.usableAsSampled}function to(e){return!!e?.usableAsRender}var Pt=class e extends Error{constructor(t){super(`Resource '${p(t)??"<unnamed>"}' cannot be bound as 'sampled'. Use .$usage('sampled') to allow it.`),Object.setPrototypeOf(this,e.prototype)}};function Bt(e){return new Pr(e)}function Rt(e){return!!e&&e.resourceType==="bind-group-layout"}function Br(e){return!!e&&e.resourceType==="bind-group"}var Ar=class e extends Error{constructor(t,r){super(`Bind group '${t??"<unnamed>"}' is missing a required binding '${r}'`),Object.setPrototypeOf(this,e.prototype)}},ea=["compute"],Ve=["compute","vertex","fragment"],Pr=class{constructor(t){this.entries=t;let r=0;for(let[n,a]of Object.entries(t)){if(a===null){r++;continue}let o={layout:this,key:n,idx:r};if("uniform"in a&&(this.bound[n]=new Je("uniform",a.uniform,o)),"storage"in a){let i="type"in a.storage?a.storage:a.storage(0);this.bound[n]=new Je(a.access??"readonly",i,o)}"texture"in a&&(this.bound[n]=new Ut(a.texture,a.viewDimension??"2d",a.multisampled??!1,o)),"storageTexture"in a&&(this.bound[n]=new It(a.storageTexture,a.viewDimension??"2d",a.access??"writeonly",o)),"externalTexture"in a&&(this.bound[n]=new Ft(o)),"sampler"in a&&(a.sampler==="comparison"?this.bound[n]=new Dt(o):this.bound[n]=new vt(o)),"texture"in a||"storageTexture"in a||"externalTexture"in a||"sampler"in a?this.value[n]=this.bound[n]:Object.defineProperty(this.value,n,{get:()=>this.bound[n].value}),r++}}_index;resourceType="bind-group-layout";bound={};value={};$=this.value;toString(){return`bindGroupLayout:${p(this)??"<unnamed>"}`}get index(){return this._index}$name(t){return w(this,t),this}$idx(t){return this._index=t,this}unwrap(t){return t.device.createBindGroupLayout({label:p(this)??"<unnamed>",entries:Object.values(this.entries).map((n,a)=>{if(n===null)return null;let o=n.visibility,i={binding:a,visibility:0};if("uniform"in n)o=o??Ve,i.buffer={type:"uniform"};else if("storage"in n)o=o??(n.access==="mutable"?ea:Ve),i.buffer={type:n.access==="mutable"?"storage":"read-only-storage"};else if("sampler"in n)o=o??Ve,i.sampler={type:n.sampler};else if("texture"in n)o=o??Ve,i.texture={sampleType:n.texture,viewDimension:n.viewDimension??"2d",multisampled:n.multisampled??!1};else if("storageTexture"in n){let s=n.access??"writeonly";o=o??(s==="readonly"?Ve:ea),i.storageTexture={format:n.storageTexture,access:{mutable:"read-write",readonly:"read-only",writeonly:"write-only"}[s],viewDimension:n.viewDimension??"2d"}}else"externalTexture"in n&&(o=o??Ve,i.externalTexture={});return o?.includes("compute")&&(i.visibility|=GPUShaderStage.COMPUTE),o?.includes("vertex")&&(i.visibility|=GPUShaderStage.VERTEX),o?.includes("fragment")&&(i.visibility|=GPUShaderStage.FRAGMENT),i}).filter(n=>n!==null)})}},_e=class{constructor(t,r){this.layout=t;this.entries=r;for(let n of Object.keys(t.entries))if(t.entries[n]!==null&&!(n in r))throw new Ar(p(t),n)}resourceType="bind-group";unwrap(t){return t.device.createBindGroup({label:p(this.layout)??"<unnamed>",layout:t.unwrap(this.layout),entries:Object.entries(this.layout.entries).map(([n,a],o)=>{if(a===null)return null;let i=this.entries[n];if(i===void 0)throw new Error(`'${n}' is a resource required to populate bind group layout '${p(this.layout)??"<unnamed>"}'.`);if("uniform"in a){let s;if(pe(i)){if(!bt(i))throw new jt(i);s={buffer:t.unwrap(i)}}else s={buffer:i};return{binding:o,resource:s}}if("storage"in a){let s;if(pe(i)){if(!he(i))throw new Ke(i);s={buffer:t.unwrap(i)}}else s={buffer:i};return{binding:o,resource:s}}if("texture"in a){let s;if(X(i)){if(!Ur(i))throw new Pt(i);s=t.unwrap(i.createView("sampled"))}else tt(i)?s=t.unwrap(i):s=i;return{binding:o,resource:s}}if("storageTexture"in a){let s;if(X(i)){if(!he(i))throw new Ke(i);a.access==="readonly"?s=t.unwrap(i.createView("readonly")):a.access==="mutable"?s=t.unwrap(i.createView("mutable")):s=t.unwrap(i.createView("writeonly"))}else et(i)?s=t.unwrap(i):s=i;return{binding:o,resource:s}}if("sampler"in a)return Ye(i)||Xe(i)?{binding:o,resource:t.unwrap(i)}:{binding:o,resource:i};if("externalTexture"in a)return{binding:o,resource:i};throw new Error(`Malformed bind group entry: ${i} (${JSON.stringify(i)})`)}).filter(n=>n!==null)})}};import*as ro from"tinyest";var{NodeTypeCatalog:D}=ro,no=["==","!=","<","<=",">",">=","<<",">>","+","-","*","/","%","|","^","&","&&","||"],ao=["&&","||","==","!=","<","<=",">",">="];function ta(e,t,r){return r?ao.includes(t)?E:t==="="?r:e:t==="!"||t==="~"?E:e}function oo(e){throw new Error(`'${JSON.stringify(e)}' was not handled by the WGSL generator.`)}function ra(e,[t,r]){e.pushBlockScope();try{return`${e.indent()}{
20
- ${r.map(n=>we(e,n)).join(`
21
- `)}
22
- ${e.dedent()}}`}finally{e.popBlockScope()}}function io(e,t,r){return e.defineVariable(t,r)}function Rr(e,t){let r=e.getById(t);if(!r)throw new Error(`Identifier ${t} not found`);return r}function _(e,t){if(typeof t=="string")return Rr(e,t);if(typeof t=="boolean")return h(t?"true":"false",E);if(t[0]===D.logicalExpr||t[0]===D.binaryExpr||t[0]===D.assignmentExpr){let[r,n,a,o]=t,i=_(e,n),s=_(e,o),l=M(e,[i,s]),[u,c]=l||[i,s],m=e.resolve(u.value),g=e.resolve(c.value),T=ta(u.dataType,a,c.dataType);return h(no.includes(a)?`(${m} ${a} ${g})`:`${m} ${a} ${g}`,T)}if(t[0]===D.postUpdate){let[r,n,a]=t,o=_(e,a),i=e.resolve(o.value);return h(`${i}${n}`,o.dataType)}if(t[0]===D.unaryExpr){let[r,n,a]=t,o=_(e,a),i=e.resolve(o.value),s=ta(o.dataType,n);return h(`${n}${i}`,s)}if(t[0]===D.memberAccess){let[r,n,a]=t,o=_(e,n);if(o.dataType.type==="unknown"){let i=o.value[a];return ge(i)}return Ht(o.dataType)?h(`(*${e.resolve(o.value)}).${a}`,Ne(o.dataType.inner,a)):z(o.dataType)&&a==="length"?o.dataType.elementCount===0?h(`arrayLength(&${e.resolve(o.value)})`,R):h(String(o.dataType.elementCount),De):fe(o.dataType)&&a==="columns"?h(o.value,o.dataType):Y(o.dataType)&&at(o.value)?ge(o.value[a]):h(`${e.resolve(o.value)}.${a}`,Ne(o.dataType,a))}if(t[0]===D.indexAccess){let[r,n,a]=t,o=_(e,n),i=_(e,a),s=e.resolve(o.value),l=e.resolve(i.value);if(o.dataType.type==="unknown"){if(Array.isArray(a)&&a[0]===D.numericLiteral)return ge(o.value[a[1]]);throw new Error(`Cannot index value ${s} of unknown type with index ${l}`)}return Ht(o.dataType)?h(`(*${s})[${l}]`,rr(o.dataType.inner)):h(`${s}[${l}]`,O(o.dataType)?rr(o.dataType):$)}if(t[0]===D.numericLiteral){let r=nr(t[1]);if(!r)throw new Error(`Invalid numeric literal ${t[1]}`);return r}if(t[0]===D.call){let[r,n,a]=t,o=_(e,n);e.callStack.push(o.value);let s=a.map(m=>_(e,m)).map(m=>h(e.resolve(m.value),m.dataType)),l=s.map(m=>m.value);if(e.callStack.pop(),s.forEach((m,g)=>{if(m.dataType===$)throw new Error(`Tried to pass '${m.value}' of unknown type as argument #${g} to '${typeof o.value=="string"?o.value:p(o.value)??"<unnamed>"}()'`)}),typeof o.value=="string")return h(`${o.value}(${l.join(", ")})`,o.dataType);if(A(o.value)){let m=e.resolve(o.value);return h(`${m}(${l.join(", ")})`,o.value)}if(!pr(o.value))throw new Error(`Function ${String(o.value)} ${p(o.value)} has not been created using TypeGPU APIs. Did you mean to wrap the function with tgpu.fn(args, return)(...) ?`);let u=o.value[d]?.argTypes,c;try{!u||u==="keep"?c=s:u==="coerce"?c=M(e,s)??s:c=(Array.isArray(u)?u:u(...s)).map((T,x)=>[T,s[x]]).map(([T,x])=>{if(x.dataType.type==="unknown")return console.warn(`Internal error: unknown type when generating expression: ${t}`),x;let y=M(e,[x],[T])?.[0];if(!y)throw new H(`Cannot convert argument of type '${x.dataType.type}' to '${T.type}' for function ${p(o.value)}`,[{function:o.value,callStack:e.callStack,error:`Cannot convert argument of type '${x.dataType.type}' to '${T.type}'`,toString:()=>p(o.value)}]);return y});let m=o.value(...c);return h(e.resolve(m.value),m.dataType)}catch(m){throw new H(m,[{toString:()=>p(o.value)}])}}if(t[0]===D.objectExpr){let r=t[1],n=e.callStack[e.callStack.length-1];if(A(n)){let a=Object.keys(n.propTypes),o=Object.fromEntries(a.map(s=>{let l=r[s];if(l===void 0)throw new Error(`Missing property ${s} in object literal for struct ${n}`);return[s,_(e,l)]})),i=ir(e,n,o);return h(i.map(s=>e.resolve(s.value)).join(", "),n)}if(pr(n)){let a=n[d]?.argTypes;if(typeof a=="object"&&a!==null){let o=Object.keys(a),i={};for(let s of o){let l=r[s];if(l===void 0)throw new Error(`Missing property ${s} in object literal for function ${n}`);let u=_(e,l),c=a[s],m=M(e,[u],[c]);i[s]=m?.[0]??u}return h(i,$)}}throw new Error("Object expressions are only allowed as return values of functions or as arguments to structs.")}if(t[0]===D.arrayExpr){let[r,n]=t,a=n.map(m=>_(e,m));if(a.length===0)throw new Error("Cannot create empty array literal.");let o=M(e,a);if(!o)throw new Error("The given values cannot be automatically converted to a common type. Consider explicitly casting them.");let i=o[0]?.dataType,s=i.type==="abstractFloat"?f:i.type==="abstractInt"?C:i,u=`array<${e.resolve(s)}, ${a.length}>`,c=o.map(m=>e.resolve(m.value));return h(`${u}( ${c.join(", ")} )`,st(s,a.length))}if(t[0]===D.stringLiteral)throw new Error("Cannot use string literals in TGSL.");if(t[0]===D.preUpdate)throw new Error("Cannot use pre-updates in TGSL.");oo(t)}function Ct(e){return typeof e!="object"||e[0]!==D.block?[D.block,[e]]:e}function we(e,t){if(typeof t=="string")return`${e.pre}${e.resolve(Rr(e,t).value)};`;if(typeof t=="boolean")return`${e.pre}${t?"true":"false"};`;if(t[0]===D.return){let r=t[1],n=r!==void 0?e.resolve(_(e,r).value):void 0;if(A(e.callStack[e.callStack.length-1])&&typeof r=="object"&&r[0]===D.objectExpr){let a=e.resolve(e.callStack[e.callStack.length-1]);return`${e.pre}return ${a}(${n});`}return n?`${e.pre}return ${n};`:`${e.pre}return;`}if(t[0]===D.if){let[r,n,a,o]=t,i=_(e,n),s=i,l=M(e,[i],[E]);l?.[0]&&([s]=l);let u=e.resolve(s.value);e.indent();let c=we(e,Ct(a));e.dedent(),e.indent();let m=o?we(e,Ct(o)):void 0;return e.dedent(),m?`${e.pre}if (${u})
23
- ${c}
24
- ${e.pre}else
25
- ${m}`:`${e.pre}if (${u})
26
- ${c}`}if(t[0]===D.let||t[0]===D.const){let[r,n,a]=t,o=a!==void 0?_(e,a):void 0;if(!o)throw new Error(`Cannot create variable '${n}' without an initial value.`);if(Se(o.dataType))throw new Error(`Cannot create variable '${n}' with loose data type.`);io(e,n,or(o.dataType));let i=e.resolve(Rr(e,n).value);if(typeof a=="object"&&a[0]===D.objectExpr&&A(e.callStack[e.callStack.length-1])){let s=e.callStack[e.callStack.length-1],l=a[1],u={};for(let[g,T]of Object.entries(l)){if(!T)throw new Error(`Missing property ${g} in object literal`);u[g]=_(e,T)}let c=ir(e,s,u),m=e.resolve(s);return`${e.pre}var ${i} = ${m}(${c.map(g=>e.resolve(g.value)).join(", ")});`}return`${e.pre}var ${i} = ${e.resolve(o.value)};`}if(t[0]===D.block)return ra(e,t);if(t[0]===D.for){let[r,n,a,o,i]=t,s=n?we(e,n):void 0,l=s?s.slice(0,-1):"",u=a?_(e,a):void 0,c=u;if(u){let y=M(e,[u],[E]);y?.[0]&&([c]=y)}let m=c?e.resolve(c.value):"",g=o?we(e,o):void 0,T=g?g.slice(0,-1):"";e.indent();let x=we(e,Ct(i));return e.dedent(),`${e.pre}for (${l}; ${m}; ${T})
27
- ${x}`}if(t[0]===D.while){let[r,n,a]=t,o=_(e,n),i=o;if(o){let u=M(e,[o],[E]);u?.[0]&&([i]=u)}let s=e.resolve(i.value);e.indent();let l=we(e,Ct(a));return e.dedent(),`${e.pre}while (${s})
28
- ${l}`}return t[0]===D.continue?`${e.pre}continue;`:t[0]===D.break?`${e.pre}break;`:`${e.pre}${e.resolve(_(e,t).value)};`}function na(e,t){return ra(e,t)}var aa="#CATCHALL#",Vr=class{_stack=[];_itemDepth=0;get itemDepth(){return this._itemDepth}get topItem(){let t=this._stack[this._stack.length-1];if(!t||t.type!=="item")throw new Error("Internal error, expected item layer to be on top.");return t}pushItem(){this._itemDepth++,this._stack.push({type:"item",usedSlots:new Set})}popItem(){this.pop("item")}pushSlotBindings(t){this._stack.push({type:"slotBinding",bindingMap:new WeakMap(t)})}popSlotBindings(){this.pop("slotBinding")}pushFunctionScope(t,r,n,a){this._stack.push({type:"functionScope",args:t,argAliases:r,returnType:n,externalMap:a})}popFunctionScope(){this.pop("functionScope")}pushBlockScope(){this._stack.push({type:"blockScope",declarations:new Map})}popBlockScope(){this.pop("blockScope")}pop(t){let r=this._stack[this._stack.length-1];if(!r||t&&r.type!==t)throw new Error(`Internal error, expected a ${t} layer to be on top.`);this._stack.pop(),t==="item"&&this._itemDepth--}readSlot(t){for(let r=this._stack.length-1;r>=0;--r){let n=this._stack[r];if(n?.type==="item")n.usedSlots.add(t);else if(n?.type==="slotBinding"){let a=n.bindingMap.get(t);if(a!==void 0)return a}else if(!(n?.type==="functionScope"||n?.type==="blockScope"))throw new Error("Unknown layer type.")}return t.defaultValue}getSnippetById(t){for(let r=this._stack.length-1;r>=0;--r){let n=this._stack[r];if(n?.type==="functionScope"){let a=n.args.find(i=>i.value===t);if(a!==void 0)return a;if(n.argAliases[t])return n.argAliases[t];let o=n.externalMap[t];return o!=null?ge(o):void 0}if(n?.type==="blockScope"){let a=n.declarations.get(t);if(a!==void 0)return h(t,a)}}}defineBlockVariable(t,r){if(r.type==="unknown")throw Error(`Tried to define variable '${t}' of unknown type`);for(let n=this._stack.length-1;n>=0;--n){let a=this._stack[n];if(a?.type==="blockScope")return a.declarations.set(t,r),h(t,r)}throw new Error("No block scope found to define a variable in.")}},Vt=[""," "," "," "," "," "," "," "," "],Cr=Vt.length-1,_r=class{identLevel=0;get pre(){return Vt[this.identLevel]??Vt[Cr].repeat(this.identLevel/Cr)+Vt[this.identLevel%Cr]}indent(){let t=this.pre;return this.identLevel++,t}dedent(){return this.identLevel--,this.pre}},$r=class{_memoizedResolves=new WeakMap;_memoizedDerived=new WeakMap;_indentController=new _r;_jitTranspiler;_itemStateStack=new Vr;_declarations=[];[d]={itemStateStack:this._itemStateStack};bindGroupLayoutsToPlaceholderMap=new Map;_nextFreeLayoutPlaceholderIdx=0;fixedBindings=[];callStack=[];names;constructor(t){this.names=t.names,this._jitTranspiler=t.jitTranspiler}get pre(){return this._indentController.pre}indent(){return this._indentController.indent()}dedent(){return this._indentController.dedent()}getById(t){let r=this._itemStateStack.getSnippetById(t);return r===void 0?null:r}defineVariable(t,r){return this._itemStateStack.defineBlockVariable(t,r)}pushBlockScope(){this._itemStateStack.pushBlockScope()}popBlockScope(){this._itemStateStack.popBlockScope()}transpileFn(t){if(!this._jitTranspiler)throw new Error("Tried to execute a tgpu.fn function without providing a JIT transpiler, or transpiling at build time.");return this._jitTranspiler.transpileFn(t)}fnToWgsl(t){this._itemStateStack.pushFunctionScope(t.args,t.argAliases,t.returnType,t.externalMap);try{return{head:so(this,t.args,t.returnType),body:na(this,t.body)}}finally{this._itemStateStack.popFunctionScope()}}addDeclaration(t){this._declarations.push(t)}allocateLayoutEntry(t){let r=this.bindGroupLayoutsToPlaceholderMap,n=r.get(t);return n||(n=`#BIND_GROUP_LAYOUT_${this._nextFreeLayoutPlaceholderIdx++}#`,r.set(t,n)),n}allocateFixedEntry(t,r){let n=this.fixedBindings.length;return this.fixedBindings.push({layoutEntry:t,resource:r}),{group:aa,binding:n}}readSlot(t){let r=this._itemStateStack.readSlot(t);if(r===void 0)throw new Nt(t);return r}withSlots(t,r){this._itemStateStack.pushSlotBindings(t);try{return r()}finally{this._itemStateStack.popSlotBindings()}}unwrap(t){if(ze(t))return this.withSlots(t["~providing"].pairs,()=>this.unwrap(t["~providing"].inner));let r=t;for(;;)if(Pe(r))r=this.readSlot(r);else if(Be(r))r=this._getOrCompute(r);else break;return r}_getOrCompute(t){let r=this._memoizedDerived.get(t)??[];this._itemStateStack.pushItem();try{for(let o of r)if([...o.slotToValueMap.entries()].every(([s,l])=>s.areEqual(this._itemStateStack.readSlot(s),l)))return o.result;qt(Ge.CPU);let n;try{n=t["~compute"]()}finally{Qt(Ge.CPU)}let a=new Map;for(let o of this._itemStateStack.topItem.usedSlots)a.set(o,this._itemStateStack.readSlot(o));return r.push({slotToValueMap:a,result:n}),this._memoizedDerived.set(t,r),n}catch(n){throw n instanceof H?n.appendToTrace(t):new H(n,[t])}finally{this._itemStateStack.popItem()}}_getOrInstantiate(t){let r=this._memoizedResolves.get(t)??[];this._itemStateStack.pushItem();try{for(let o of r)if([...o.slotToValueMap.entries()].every(([s,l])=>s.areEqual(this._itemStateStack.readSlot(s),l)))return o.result;let n;O(t)?n=fr(this,t):Be(t)||Pe(t)?n=this.resolve(this.unwrap(t)):ur(t)?n=t["~resolve"](this):n=this.resolveValue(t);let a=new Map;for(let o of this._itemStateStack.topItem.usedSlots)a.set(o,this._itemStateStack.readSlot(o));return r.push({slotToValueMap:a,result:n}),this._memoizedResolves.set(t,r),n}catch(n){throw n instanceof H?n.appendToTrace(t):new H(n,[t])}finally{this._itemStateStack.popItem()}}resolve(t){if(ze(t))return this.withSlots(t["~providing"].pairs,()=>this.resolve(t["~providing"].inner));if(t&&typeof t=="object"||typeof t=="function"){if(this._itemStateStack.itemDepth===0)try{qt(Ge.GPU);let r=Xr(this,()=>this._getOrInstantiate(t));return`${[...this._declarations].join(`
1
+ import{$ as Hr,a as A,aa as U,b as Mr,ba as O,c as Wr,d as Ye,da as v,e as Je,ea as Wt,f as Q,fa as Xe,g as Nr,ga as Kr,h as R,i as L,ia as K,j as Et,ja as Zr,k as se,ka as en,na as Ze,qa as xe,ra as he,sa as tn,ta as rn}from"./chunk-S27MYQ6U.js";import{$ as _r,A as Vt,Aa as qr,B as ae,Ba as Fe,Ca as Ue,D as oe,Ea as Ot,F as $t,Fa as jr,G as _t,Ga as kt,H as Pr,Ha as Mt,I as Br,Ja as P,K as Ar,Ka as Qr,L as Rr,La as $,M as Cr,Ma as _,N as fe,O as ge,P as B,R as Gr,X as je,Y as Qe,Ya as Yr,Z as Vr,Za as Jr,_ as $r,_a as Xr,a as p,aa as Er,b,ba as He,c as D,ca as De,d as h,da as Lr,e as G,f as Ft,fa as Or,g as Ut,ga as ce,ha as Ke,i as z,ia as j,j as m,ja as kr,k as T,ka as ye,l as q,la as Te,m as Ur,ma as Lt,n as re,na as zr,o as de,p as Pt,pa as M,q as Bt,r as At,s as Rt,t as ne,ta as C,u as Ie,v as Ct,va as V,w as Gt,wa as d,y as ze,z as qe,za as H}from"./chunk-IH2QU6TV.js";function nn(t){if(typeof t?.[D]=="function")return t[D].bind(t)}var k={get(t,e){if(e in t)return Reflect.get(t,e);if(e!==G)return e==="toString"||e===Symbol.toStringTag||e===Symbol.toPrimitive?()=>t.toString():new Proxy({"~resolve":r=>`${r.resolve(t)}.${String(e)}`,toString:()=>`.value(...).${String(e)}:${m(t)??"<unnamed>"}`,[b]:Zr(t[b],String(e))},k)}};function Pe(t,e){let r=e,n;for(;n=nn(r);)r=n(t);return r}function an(t,e){return new Nt(t,e)}var Nt=class{constructor(e,r){this.dataType=e;this.#e=r}[p]={};#e;$name(e){return T(this,e),this}"~resolve"(e){let r=e.names.makeUnique(m(this)),n=e.resolveValue(this.#e,this.dataType),a=e.resolve(this.dataType);return e.addDeclaration(`const ${r}: ${a} = ${n};`),r}toString(){return`const:${m(this)??"<unnamed>"}`}[D](){return new Proxy({"~resolve":e=>e.resolve(this),toString:()=>`.value:${m(this)??"<unnamed>"}`,[b]:this.dataType},k)}get value(){return Te()?this[D]():this.#e}get $(){return this.value}};function Y(t,e){for(let[r,n]of Object.entries(e))t[r]=n,q(n)&&m(n)===void 0&&n.$name(r)}function on(t,e,r){let n=[...t.matchAll(/:\s*(?<arg>.*?)\s*[,)]/g)].map(a=>a?a[1]:void 0);r(Object.fromEntries(e.flatMap((a,o)=>{let s=n?n[o]:void 0;return B(a)&&s!==void 0?[[s,a]]:[]})))}function et(t,e,r){let n=t.match(/->\s(?<output>[\w\d_]+)\s{/),a=n?n[1]?.trim():void 0;B(e)&&a&&!/\s/g.test(a)&&r({[a]:e})}function na(t){return new RegExp(`(?<![\\w\\$_.])${t.replaceAll(".","\\.").replaceAll("$","\\$")}(?![\\w\\$_])`,"g")}function ie(t,e,r){return Object.entries(e).reduce((n,[a,o])=>He(o)||Ye(o)?n.replaceAll(na(a),t.resolve(o)):o!==null&&typeof o=="object"?([...r.matchAll(new RegExp(`${a.replaceAll(".","\\.").replaceAll("$","\\$")}\\.(?<prop>.*?)(?![\\w\\$_])`,"g"))].map(i=>i[1])??[]).reduce((i,u)=>u&&u in o?ie(t,{[`${a}.${u}`]:o[u]},i):i,n):n,r)}function sn(t){return new zt(t)}var zt=class{constructor(e){this.declaration=e}externalsToApply=[];$uses(e){return this.externalsToApply.push(e),this}"~resolve"(e){let r={};for(let a of this.externalsToApply)Y(r,a);let n=ie(e,r,this.declaration);return e.addDeclaration(n),""}toString(){return`declare: ${this.declaration}`}};import{FuncParameterType as dn}from"tinyest";function ln(t){let{strippedCode:e,argRange:r}=aa(t),n=new tt(e);n.consume("(");let a=[];for(;!n.isAt(")");){let s=[];for(;n.isAt("@");)n.parseUntil(un,pn),n.consume(")"),s.push(n.lastParsed);n.parseUntil(sa);let i=n.lastParsed,u;n.isAt(":")&&(n.consume(":"),n.parseUntil(ia,pa),u=n.lastParsed),a.push({identifier:i,attributes:s,type:u}),n.isAt(",")&&n.consume(",")}n.consume(")");let o;if(n.isAt("->")){n.consume("->");let s=[];for(;n.isAt("@");)n.parseUntil(un,pn),n.consume(")"),s.push(n.lastParsed);o={type:n.str.slice(n.pos),attributes:s}}return{args:a,ret:o,range:{begin:r[0],end:r[1]}}}function aa(t){let e=new tt(t),r="",n;for(;!e.isFinished();){if(e.isAt(oa)){e.advanceBy(1);continue}if(e.isAt("//")){e.consume("//"),e.parseUntil(mn),e.advanceBy(1);continue}if(e.isAt("/*")){e.parseUntil(ua,la),e.consume("*/");continue}if(e.isAt("{"))return{strippedCode:r,argRange:[n,e.pos]};e.isAt("(")&&n===void 0&&(n=e.pos),n!==void 0&&(r+=e.str[e.pos]),e.advanceBy(1)}throw new Error("Invalid wgsl code!")}var tt=class{constructor(e){this.str=e;this.#t=0}#e;#t;get pos(){return this.#t}get lastParsed(){if(this.#e===void 0)throw new Error("Parse was not called yet!");return this.str.slice(this.#e,this.pos)}isFinished(){return this.#t>=this.str.length}isAt(e){if(typeof e=="string"){for(let r=0;r<e.length;r++)if(this.str[this.#t+r]!==e[r])return!1;return!0}for(let r of e)if(this.isAt(r))return!0;return!1}parseUntil(e,r){this.#e=this.#t;let n=0;for(;this.#t<this.str.length;){if(r&&this.isAt(r[0])&&(n+=1),r&&this.isAt(r[1])&&(n-=1),n===0&&this.isAt(e))return this.#t;this.#t+=1}throw new Error("Reached the end of the string without finding a match!")}advanceBy(e){this.#t+=e}consume(e){if(!this.isAt(e))throw new Error(`Expected '${e}' at position ${this.#t}, but found '${this.str.slice(this.#t,this.#t+e.length)}'`);this.advanceBy(e.length)}},mn=new Set([`
2
+ `,"\v","\f","\r","\x85","\u2028","\u2029"]),oa=new Set([...mn," "," ","\u200E","\u200F"]),un=new Set([")"]),sa=new Set([":",",",")"]),ia=new Set([",",")"]),ua=new Set(["*/"]),pn=["(",")"],pa=["<",">"],la=["/*","*/"];function J(t,e=""){let r=[],n={applyExternals(o){r.push(o)},resolve(o,s,i){let u={};for(let f of r)Y(u,f);let l=o.names.makeUnique(m(this));if(typeof t=="string"){let f=ie(o,u,t),g="",c="";if(e!==""){let y=B(s[0])?`(in: ${o.resolve(s[0])})`:"()",x=fe(i)?he(i):"",I=i!==oe?B(i)?`-> ${o.resolve(i)}`:`-> ${x!==""?x:"@location(0)"} ${o.resolve(i)}`:"";g=`${y} ${I} `,c=f}else{let y=ln(f);if(y.args.length!==s.length)throw new Error(`WGSL implementation has ${y.args.length} arguments, while the shell has ${s.length} arguments.`);let x=y.args.map((w,S)=>`${w.identifier}: ${fn(o,`parameter ${w.identifier}`,w.type,s[S])}`).join(", "),I=i===oe?"":`-> ${fn(o,"return type",y.ret?.type,i)}`;g=`(${x}) ${I}`,c=f.slice(y.range.end)}o.addDeclaration(`${e}fn ${l}${g}${c}`)}else{let f=Ur(t);if(f?.externals){let w=Object.fromEntries(Object.entries(f.externals).filter(([S])=>!(S in u)));Y(u,w)}let g=f?.ast;if(!g)throw new Error("Missing metadata for tgpu.fn function body (either missing 'kernel' directive, or misconfigured `unplugin-typegpu`)");let c=g.externalNames.filter(w=>!(w in u));if(c.length>0)throw new Rt(m(this),c);let y=g.params[1];y&&y.type==="i"&&e!==""&&Y(u,{[y.name]:zr(i)});let{head:x,body:I}=o.fnToWgsl({args:s.map((w,S)=>M(g.params[S]?.type===dn.identifier?g.params[S].name:`_arg_${S}`,w)),argAliases:Object.fromEntries(g.params.flatMap((w,S)=>w.type===dn.destructuredObject?w.props.map(({name:Fr,alias:ra})=>[ra,M(`_arg_${S}.${Fr}`,s[S].propTypes[Fr])]):[])),returnType:i,body:g.body,externalMap:u});o.addDeclaration(`${e}fn ${l}${o.resolve(x)}${o.resolve(I)}`)}return l}},a=m(t);return a!==void 0&&T(n,a),n}function fn(t,e,r,n){let a=t.resolve(n).replace(/\s/g,"");if(!r)return a;let o=r.replace(/\s/g,"");if(o!==a)throw new Error(`Type mismatch between TGPU shell and WGSL code string: ${e}, JS type "${a}", WGSL type "${o}".`);return r}function ma(t,e={}){let r=0,n=new Set;return Object.fromEntries(Object.entries(t??{}).map(([a,o])=>{let s=R(o);if(s!==void 0){if(n.has(s))throw new Error("Duplicate custom location attributes found");n.add(s)}return[a,o]}).map(([a,o])=>{if(xe(o))return[a,o];if(R(o)!==void 0)return[a,o];if(e[a])return[a,Ze(e[a],o)];for(;n.has(r);)r++;return[a,Ze(r++,o)]}))}function X(t,e={}){return L(t)?Qe(t)||R(t)!==void 0?t:Ze(0,t):tn(ma(t,e))}function Z(t,...e){return da(t)?fa(t,...e):t}function da(t){return Array.isArray(t)&&"raw"in t&&Array.isArray(t.raw)&&t.raw.every(e=>typeof e=="string")}function fa(t,...e){return t.slice(1).reduce((r,n,a)=>`${r}${e[a]}${n}`,t[0])}function gn(t){let e={argTypes:t.in&&Object.keys(t.in).length!==0?[X(t.in)]:[],returnType:oe,workgroupSize:[t.workgroupSize[0]??1,t.workgroupSize[1]??1,t.workgroupSize[2]??1],isEntry:!0},r=(n,...a)=>ga(e,t.workgroupSize,Z(n,...a));return Object.assign(Object.assign(r,e),{does:r})}function ga(t,e,r){let n=J(r,`@compute @workgroup_size(${e.join(", ")}) `),a=t.argTypes[0];return{shell:t,$uses(s){return n.applyExternals(s),this},[p]:!0,[h]:n,$name(s){return T(n,s),q(a)&&a.$name(`${s}_Input`),this},"~resolve"(s){return n.resolve(s,t.argTypes,t.returnType)},toString(){return`computeFn:${m(n)??"<unnamed>"}`}}}function qt(t,e){let r={[p]:!0,argTypes:t,returnType:e??oe,isEntry:!1};return Object.assign((a,...o)=>ya(r,Z(a,...o)),r)}function jt(t){return!!t?.[p]&&t?.resourceType==="function"}function ca([t,e]){return`${m(t)??"<unnamed>"}=${e}`}function ya(t,e){let r=J(e,""),n={[p]:{implementation:e,argConversionHint:t.argTypes},shell:t,resourceType:"function",$uses(s){return r.applyExternals(s),this},[h]:r,$name(s){return T(r,s),this},with(s,i){return cn(o,[[ae(s)?s.slot:s,i]])},"~resolve"(s){return typeof e=="string"&&(on(e,t.argTypes,r.applyExternals),et(e,t.returnType,r.applyExternals)),r.resolve(s,t.argTypes,t.returnType)}},a=Lt((...s)=>Or(()=>{try{if(typeof e=="string")throw new Error("Cannot execute on the CPU functions constructed with raw WGSL");let i=s.map((u,l)=>Xe(t.argTypes[l],u));return e(...i)}catch(i){throw i instanceof Pt?i.appendToTrace(o):new Pt(i,[o])}}),(...s)=>M(new rt(o,s.map(i=>i.value)),t.returnType??Et),"tgpuFnCall",t.argTypes);a[p].jsImpl=e;let o=Object.assign(a,n);return Object.defineProperty(o,"toString",{value(){return`fn:${m(r)??"<unnamed>"}`}}),o}function cn(t,e){let r={[p]:{implementation:t[p].implementation,argConversionHint:t[p].argConversionHint},resourceType:"function",shell:t.shell,[G]:{inner:t,pairs:e},$uses(o){return t.$uses(o),this},[h]:t,$name(o){return t.$name(o),this},with(o,s){return cn(a,[...e,[ae(o)?o.slot:o,s]])}},n=Lt((...o)=>t(...o),(...o)=>M(new rt(a,o.map(s=>s.value)),t.shell.returnType??Et),"tgpuFnCall",t.shell.argTypes),a=Object.assign(n,r);return Object.defineProperty(a,"toString",{value(){return`fn:${m(t)??"<unnamed>"}[${e.map(ca).join(", ")}]`}}),a[p].implementation=t[p].implementation,a}var rt=class{constructor(e,r){this._fn=e;this._params=r;this[h]=e}[h];"~resolve"(e){return e.resolve(`${e.resolve(this._fn)}(${this._params.map(r=>e.resolve(r)).join(", ")})`)}toString(){return`call:${m(this)??"<unnamed>"}`}};function yn(t){let e={in:t.in,out:t.out,returnType:X(t.out),isEntry:!0},r=(n,...a)=>Ta(e,Z(n,...a));return Object.assign(Object.assign(r,e),{does:r})}function Ta(t,e){let r=J(e,"@fragment "),n=t.returnType;return typeof e=="string"&&et(e,n,o=>r.applyExternals(o)),{shell:t,outputType:n,$uses(o){return r.applyExternals(o),this},[p]:!0,[h]:r,$name(o){return T(r,o),q(n)&&n.$name(`${o}_Output`),this},"~resolve"(o){let s=t.in?X(t.in,o.varyingLocations).$name(`${m(this)??""}_Input`):void 0;return s&&r.applyExternals({In:s}),r.applyExternals({Out:n}),r.resolve(o,s?[s]:[],t.returnType)},toString(){return`fragmentFn:${m(r)??"<unnamed>"}`}}}function Tn(t){if(Object.keys(t.out).length===0)throw new Error("A vertexFn output cannot be empty since it must include the 'position' builtin.");let e={in:t.in,out:t.out,argTypes:t.in&&Object.keys(t.in).length!==0?[X(t.in)]:[],isEntry:!0},r=(n,...a)=>xa(e,Z(n,...a));return Object.assign(Object.assign(r,e),{does:r})}function xa(t,e){let r=J(e,"@vertex "),n=t.argTypes[0];return{shell:t,$uses(o){return r.applyExternals(o),this},[p]:!0,[h]:r,$name(o){return T(r,o),q(n)&&n.$name(`${o}_Input`),this},"~resolve"(o){let s=X(t.out,o.varyingLocations).$name(`${m(this)??""}_Output`);return typeof e=="string"&&(n&&r.applyExternals({In:n}),r.applyExternals({Out:s})),r.resolve(o,t.argTypes,s)},toString(){return`vertexFn:${m(r)??"<unnamed>"}`}}}var ue=class{lastUniqueId=0;makeUnique(e){let r;return e?(r=e.replaceAll(/\s/g,"_"),r=r.replaceAll(/[^\w\d]/g,"")):r="item",`${r}_${this.lastUniqueId++}`}},W=class{_usedNames=new Set;makeUnique(e){if(e===void 0)throw new Error("Unnamed item found when using a strict name registry");let r=0,n=e;for(;this._usedNames.has(n);)r++,n=`${e}_${r}`;return this._usedNames.add(n),n}};function Be(t){return typeof t?.format=="string"}function xn(t,e){let r=[];if(L(t)){if(!Be(e))throw new Error("Shader expected a single attribute, not a record of attributes to be passed in.");return r.push(e._layout),{usedVertexLayouts:r,bufferDefinitions:[{arrayStride:e._layout.stride,stepMode:e._layout.stepMode,attributes:[{format:e.format,offset:e.offset,shaderLocation:R(t)??0}]}]}}let n=[],a=new WeakMap,o=0;for(let[s,i]of Object.entries(t)){if(xe(i))continue;let u=e[s];if(!u)throw new Error(`An attribute by the name of '${s}' was not provided to the shader.`);let l=u._layout,f=a.get(l);f||(r.push(l),f=[],n.push({arrayStride:l.stride,stepMode:l.stepMode,attributes:f}),a.set(l,f)),o=R(i)??o,f.push({format:u.format,offset:u.offset,shaderLocation:o++})}return{usedVertexLayouts:r,bufferDefinitions:n}}var ha=["bool","f32","f16","i32","u32","vec2f","vec3f","vec4f","vec2h","vec3h","vec4h","vec2i","vec3i","vec4i","vec2u","vec3u","vec4u","vec2<bool>","vec3<bool>","vec4<bool>","mat2x2f","mat3x3f","mat4x4f"];function ba(t){return ha.includes(t.type)}function Qt(t,[e,r]){return` ${he(r)}${e}: ${t.resolve(r)},
3
+ `}function wa(t,e){let r=t.names.makeUnique(m(e));return t.addDeclaration(`struct ${r} {
4
+ ${Object.entries(e.propTypes).map(n=>Qt(t,n)).join("")}}`),r}function Sa(t,e){let r=t.names.makeUnique(m(e));return t.addDeclaration(`struct ${r} {
5
+ ${Object.entries(e.propTypes).map(n=>Be(n[1])?Qt(t,[n[0],se[n[1].format]]):Qt(t,n)).join("")}
6
+ }`),r}function va(t,e){let r=t.resolve(e.elementType);return e.elementCount===0?`array<${r}>`:`array<${r}, ${e.elementCount}>`}function Ia(t,e){let r=t.resolve(Be(e.elementType)?se[e.elementType.format]:e.elementType);return e.elementCount===0?`array<${r}>`:`array<${r}, ${e.elementCount}>`}function Ht(t,e){if(Ye(e))return e.type==="unstruct"?Sa(t,e):e.type==="disarray"?Ia(t,e):e.type==="loose-decorated"?t.resolve(Be(e.inner)?se[e.inner.format]:e.inner):t.resolve(se[e.type]);if(ba(e))return e.type;if(e.type==="struct")return wa(t,e);if(e.type==="array")return va(t,e);if(e.type==="atomic")return`atomic<${Ht(t,e.inner)}>`;if(e.type==="decorated")return t.resolve(e.inner);if(e.type==="ptr")return e.addressSpace==="storage"?`ptr<storage, ${t.resolve(e.inner)}, ${e.access==="read-write"?"read_write":e.access}>`:`ptr<${e.addressSpace}, ${t.resolve(e.inner)}>`;if(e.type==="abstractInt"||e.type==="abstractFloat"||e.type==="void"||e.type==="u16")throw new Error(`${e.type} has no representation in WGSL`);K(e,"resolveData")}var be=class t{constructor(e){this.bindings=e}with(e,r){return new t([...this.bindings,[ae(e)?e.slot:e,r]])}pipe(e){let r=e(this);return new t([...this.bindings,...r.bindings])}};function*hn(t){let e=0;for(;;)t.has(e)||(yield e),e++}import{BufferReader as Jt,BufferWriter as An,getSystemEndianness as Ca}from"typed-binary";import{Measurer as Fa}from"typed-binary";function Da(t,e){let r="size"in t?t.size:t.currentByteOffset,n=e-1,a=r&n;"skipBytes"in t?t.skipBytes(e-a&n):t.add(e-a&n)}var F=Da;var bn=new WeakMap;function nt(t){let e=bn.get(t);if(e)return e;let r=new Fa,n={},a;for(let o in t.propTypes){let s=t.propTypes[o];if(s===void 0)throw new Error(`Property ${o} is undefined in struct`);let i=r.size;F(r,Q(t)?O(s):U(s)),a&&(a.padding=r.size-i);let u=v(s);n[o]={offset:r.size,size:u},a=n[o],r.add(u)}return a&&(a.padding=A(v(t),U(t))-r.size),bn.set(t,n),n}var Ua=(()=>{try{return new Function("return true"),!0}catch{return!1}})(),Kt=new WeakMap,at={u32:"u32",vec2u:"u32",vec3u:"u32",vec4u:"u32",u16:"u16",i32:"i32",vec2i:"i32",vec3i:"i32",vec4i:"i32",f32:"f32",vec2f:"f32",vec3f:"f32",vec4f:"f32",f16:"f16",vec2h:"f16",vec3h:"f16",vec4h:"f16",mat2x2f:"f32",mat3x3f:"f32",mat4x4f:"f32"},Pa={uint8:"u8",uint8x2:"u8",uint8x4:"u8",sint8:"i8",sint8x2:"i8",sint8x4:"i8",unorm8:"u8",unorm8x2:"u8",unorm8x4:"u8",snorm8:"i8",snorm8x2:"i8",snorm8x4:"i8",uint16:"u16",uint16x2:"u16",uint16x4:"u16",sint16:"i16",sint16x2:"i16",sint16x4:"i16",unorm16:"u16",unorm16x2:"u16",unorm16x4:"u16",snorm16:"i16",snorm16x2:"i16",snorm16x4:"i16",float16:"f16",float16x2:"f16",float16x4:"f16",float32:"f32",float32x2:"f32",float32x3:"f32",float32x4:"f32",uint32:"u32",uint32x2:"u32",uint32x3:"u32",uint32x4:"u32",sint32:"i32",sint32x2:"i32",sint32x3:"i32",sint32x4:"i32"},ot={u32:"setUint32",i32:"setInt32",f32:"setFloat32",u16:"setUint16",i16:"setInt16",f16:"setFloat16",u8:"setUint8",i8:"setInt8"},Ba={unorm8:t=>`Math.round(${t} * 255)`,unorm8x2:t=>`Math.round(${t} * 255)`,unorm8x4:t=>`Math.round(${t} * 255)`,snorm8:t=>`Math.round(${t} * 127)`,snorm8x2:t=>`Math.round(${t} * 127)`,snorm8x4:t=>`Math.round(${t} * 127)`,unorm16:t=>`Math.round(${t} * 65535)`,unorm16x2:t=>`Math.round(${t} * 65535)`,unorm16x4:t=>`Math.round(${t} * 65535)`,snorm16:t=>`Math.round(${t} * 32767)`,snorm16x2:t=>`Math.round(${t} * 32767)`,snorm16x4:t=>`Math.round(${t} * 32767)`},wn={"unorm10-10-10-2":{writeFunction:"setUint32",generator:(t,e)=>`output.setUint32(${t}, ((${e}.x*1023&0x3FF)<<22)|((${e}.y*1023&0x3FF)<<12)|((${e}.z*1023&0x3FF)<<2)|(${e}.w*3&3), littleEndian);
7
+ `},"unorm8x4-bgra":{writeFunction:"setUint8",generator:(t,e)=>{let r=["z","y","x","w"],n="";for(let a=0;a<4;a++)n+=`output.setUint8((${t} + ${a}), Math.round(${e}.${r[a]} * 255), littleEndian);
8
+ `;return n}}};function st(t,e,r){if(Gr(t)||je(t))return st(t.inner,e,r);if(B(t)||Q(t)){let a=nt(t),o="";for(let[s,i]of Object.entries(a)){let u=t.propTypes[s];u&&(o+=st(u,`(${e} + ${i.offset})`,`${r}.${s}`))}return o}if(ge(t)||Je(t)){let a=A(v(t.elementType),U(t)),o="";return o+=`for (let i = 0; i < ${t.elementCount}; i++) {
9
+ `,o+=st(t.elementType,`(${e} + i * ${a})`,`${r}[i]`),o+=`}
10
+ `,o}if(Br(t)){let a=at[t.type],o="",s=ot[a],i=["x","y","z","w"],u=$t(t)?2:_t(t)?3:4;for(let l=0;l<u;l++)o+=`output.${s}((${e} + ${l*4}), ${r}.${i[l]}, littleEndian);
11
+ `;return o}if(Cr(t)){let a=at[t.type],o=ot[a],s=Ar(t)?2:Rr(t)?3:4,i=s*s,u=A(s*4,8),l="";for(let f=0;f<i;f++){let g=Math.floor(f/s),c=f%s,y=g*u+c*4;l+=`output.${o}((${e} + ${y}), ${r}.columns[${g}].${["x","y","z","w"][c]}, littleEndian);
12
+ `}return l}if(Hr(t)){let a=t.type;if(a in wn)return wn[a].generator(e,r);let o=Pa[a],s=ot[o],i=se[a],u=Pr(i)?4:_t(i)?3:$t(i)?2:1,l=o==="u8"||o==="i8"?1:o==="u16"||o==="i16"||o==="f16"?2:4,f=["x","y","z","w"],g=Ba[a],c="";for(let y=0;y<u;y++){let x=u===1?r:`${r}.${f[y]}`,I=g?g(x):x;c+=`output.${s}((${e} + ${y*l}), ${I}, littleEndian);
13
+ `}return c}if(!Object.hasOwn(at,t.type))throw new Error(`Primitive ${t.type} is unsupported by compiled writer`);let n=at[t.type];return`output.${ot[n]}(${e}, ${r}, littleEndian);
14
+ `}function Yt(t){if(!Ua){console.warn("This environment does not allow eval - using default writer as fallback");return}if(Kt.has(t))return Kt.get(t);try{let e=st(t,"offset","value"),r=new Function("output","offset","value","littleEndian=true",e);return Kt.set(t,r),r}catch(e){console.warn(`Failed to compile writer for schema: ${t}
15
+ Reason: ${e instanceof Error?e.message:String(e)}
16
+ Falling back to default writer`)}}var we={bool(){throw new Error("Booleans are not host-shareable")},f32(t,e,r){t.writeFloat32(r)},f16(t,e,r){t.writeFloat16(r)},i32(t,e,r){t.writeInt32(r)},u32(t,e,r){t.writeUint32(r)},u16(t,e,r){t.writeUint16(r)},vec2f(t,e,r){t.writeFloat32(r.x),t.writeFloat32(r.y)},vec2h(t,e,r){t.writeFloat16(r.x),t.writeFloat16(r.y)},vec2i(t,e,r){t.writeInt32(r.x),t.writeInt32(r.y)},vec2u(t,e,r){t.writeUint32(r.x),t.writeUint32(r.y)},"vec2<bool>"(){throw new Error("Booleans are not host-shareable")},vec3f(t,e,r){t.writeFloat32(r.x),t.writeFloat32(r.y),t.writeFloat32(r.z)},vec3h(t,e,r){t.writeFloat16(r.x),t.writeFloat16(r.y),t.writeFloat16(r.z)},vec3i(t,e,r){t.writeInt32(r.x),t.writeInt32(r.y),t.writeInt32(r.z)},vec3u(t,e,r){t.writeUint32(r.x),t.writeUint32(r.y),t.writeUint32(r.z)},"vec3<bool>"(){throw new Error("Booleans are not host-shareable")},vec4f(t,e,r){t.writeFloat32(r.x),t.writeFloat32(r.y),t.writeFloat32(r.z),t.writeFloat32(r.w)},vec4h(t,e,r){t.writeFloat16(r.x),t.writeFloat16(r.y),t.writeFloat16(r.z),t.writeFloat16(r.w)},vec4i(t,e,r){t.writeInt32(r.x),t.writeInt32(r.y),t.writeInt32(r.z),t.writeInt32(r.w)},vec4u(t,e,r){t.writeUint32(r.x),t.writeUint32(r.y),t.writeUint32(r.z),t.writeUint32(r.w)},"vec4<bool>"(){throw new Error("Booleans are not host-shareable")},mat2x2f(t,e,r){for(let n=0;n<r.length;++n)t.writeFloat32(r[n])},mat3x3f(t,e,r){for(let n=0;n<r.length;++n)t.writeFloat32(r[n])},mat4x4f(t,e,r){for(let n=0;n<r.length;++n)t.writeFloat32(r[n])},struct(t,e,r){let n=U(e);F(t,n);for(let[a,o]of Object.entries(e.propTypes))F(t,U(o)),pe(t,o,r[a]);F(t,n)},array(t,e,r){if(e.elementCount===0)throw new Error("Cannot write using a runtime-sized schema.");let n=U(e);F(t,n);let a=t.currentByteOffset;for(let o=0;o<Math.min(e.elementCount,r.length);o++)F(t,n),pe(t,e.elementType,r[o]);t.seekTo(a+v(e))},ptr(){throw new Error("Pointers are not host-shareable")},atomic(t,e,r){we[e.inner.type]?.(t,e,r)},decorated(t,e,r){let n=O(e);F(t,n);let a=t.currentByteOffset;we[e.inner?.type]?.(t,e.inner,r),t.seekTo(a+v(e))},uint8(t,e,r){t.writeUint8(r)},uint8x2(t,e,r){t.writeUint8(r.x),t.writeUint8(r.y)},uint8x4(t,e,r){t.writeUint8(r.x),t.writeUint8(r.y),t.writeUint8(r.z),t.writeUint8(r.w)},sint8(t,e,r){t.writeInt8(r)},sint8x2(t,e,r){t.writeInt8(r.x),t.writeInt8(r.y)},sint8x4(t,e,r){t.writeInt8(r.x),t.writeInt8(r.y),t.writeInt8(r.z),t.writeInt8(r.w)},unorm8(t,e,r){t.writeUint8(Math.round(r*255))},unorm8x2(t,e,r){t.writeUint8(Math.round(r.x*255)),t.writeUint8(Math.round(r.y*255))},unorm8x4(t,e,r){t.writeUint8(Math.round(r.x*255)),t.writeUint8(Math.round(r.y*255)),t.writeUint8(Math.round(r.z*255)),t.writeUint8(Math.round(r.w*255))},snorm8(t,e,r){t.writeInt8(Math.round(r*127))},snorm8x2(t,e,r){t.writeInt8(Math.round(r.x*127)),t.writeInt8(Math.round(r.y*127))},snorm8x4(t,e,r){t.writeInt8(Math.round(r.x*127)),t.writeInt8(Math.round(r.y*127)),t.writeInt8(Math.round(r.z*127)),t.writeInt8(Math.round(r.w*127))},uint16(t,e,r){t.writeUint16(r)},uint16x2(t,e,r){t.writeUint16(r.x),t.writeUint16(r.y)},uint16x4(t,e,r){t.writeUint16(r.x),t.writeUint16(r.y),t.writeUint16(r.z),t.writeUint16(r.w)},sint16(t,e,r){t.writeInt16(r)},sint16x2(t,e,r){t.writeInt16(r.x),t.writeInt16(r.y)},sint16x4(t,e,r){t.writeInt16(r.x),t.writeInt16(r.y),t.writeInt16(r.z),t.writeInt16(r.w)},unorm16(t,e,r){t.writeUint16(r*65535)},unorm16x2(t,e,r){t.writeUint16(r.x*65535),t.writeUint16(r.y*65535)},unorm16x4(t,e,r){t.writeUint16(r.x*65535),t.writeUint16(r.y*65535),t.writeUint16(r.z*65535),t.writeUint16(r.w*65535)},snorm16(t,e,r){t.writeInt16(Math.round(r*32767))},snorm16x2(t,e,r){t.writeInt16(Math.round(r.x*32767)),t.writeInt16(Math.round(r.y*32767))},snorm16x4(t,e,r){t.writeInt16(Math.round(r.x*32767)),t.writeInt16(Math.round(r.y*32767)),t.writeInt16(Math.round(r.z*32767)),t.writeInt16(Math.round(r.w*32767))},float16(t,e,r){t.writeFloat16(r)},float16x2(t,e,r){t.writeFloat16(r.x),t.writeFloat16(r.y)},float16x4(t,e,r){t.writeFloat16(r.x),t.writeFloat16(r.y),t.writeFloat16(r.z),t.writeFloat16(r.w)},float32(t,e,r){t.writeFloat32(r)},float32x2(t,e,r){t.writeFloat32(r.x),t.writeFloat32(r.y)},float32x3(t,e,r){t.writeFloat32(r.x),t.writeFloat32(r.y),t.writeFloat32(r.z)},float32x4(t,e,r){t.writeFloat32(r.x),t.writeFloat32(r.y),t.writeFloat32(r.z),t.writeFloat32(r.w)},uint32(t,e,r){t.writeUint32(r)},uint32x2(t,e,r){t.writeUint32(r.x),t.writeUint32(r.y)},uint32x3(t,e,r){t.writeUint32(r.x),t.writeUint32(r.y),t.writeUint32(r.z)},uint32x4(t,e,r){t.writeUint32(r.x),t.writeUint32(r.y),t.writeUint32(r.z),t.writeUint32(r.w)},sint32(t,e,r){t.writeInt32(r)},sint32x2(t,e,r){t.writeInt32(r.x),t.writeInt32(r.y)},sint32x3(t,e,r){t.writeInt32(r.x),t.writeInt32(r.y),t.writeInt32(r.z)},sint32x4(t,e,r){t.writeInt32(r.x),t.writeInt32(r.y),t.writeInt32(r.z),t.writeInt32(r.w)},"unorm10-10-10-2"(t,e,r){let n=0;n|=(r.x*1023&1023)<<22,n|=(r.y*1023&1023)<<12,n|=(r.z*1023&1023)<<2,n|=r.w*3&3,t.writeUint32(n)},"unorm8x4-bgra"(t,e,r){t.writeUint8(r.z*255),t.writeUint8(r.y*255),t.writeUint8(r.x*255),t.writeUint8(r.w*255)},disarray(t,e,r){let n=U(e);F(t,n);let a=t.currentByteOffset;for(let o=0;o<Math.min(e.elementCount,r.length);o++)F(t,n),we[e.elementType?.type]?.(t,e.elementType,r[o]);t.seekTo(a+v(e))},unstruct(t,e,r){let n=e.propTypes;for(let[a,o]of Object.entries(n))we[o.type]?.(t,o,r[a])},"loose-decorated"(t,e,r){let n=O(e);F(t,n);let a=t.currentByteOffset,o=we[e.inner?.type];return o?.(t,e.inner,r),t.seekTo(a+v(e)),r}};function pe(t,e,r){let n=we[e.type];if(!n)throw new Error(`Cannot write data of type '${e.type}'.`);n(t,e,r)}var Aa={bool(){throw new Error("Booleans are not host-shareable")},f32(t){return t.readFloat32()},f16(t){return t.readFloat16()},i32(t){return t.readInt32()},u32(t){return t.readUint32()},u16(t){return t.readUint16()},vec2f(t){return H(t.readFloat32(),t.readFloat32())},vec3f(t){return Ot(t.readFloat32(),t.readFloat32(),t.readFloat32())},vec4f(t){return P(t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32())},vec2h(t){return qr(t.readFloat16(),t.readFloat16())},vec3h(t){return jr(t.readFloat16(),t.readFloat16(),t.readFloat16())},vec4h(t){return Qr(t.readFloat16(),t.readFloat16(),t.readFloat16(),t.readFloat16())},vec2i(t){return Fe(t.readInt32(),t.readInt32())},vec3i(t){return kt(t.readInt32(),t.readInt32(),t.readInt32())},vec4i(t){return $(t.readInt32(),t.readInt32(),t.readInt32(),t.readInt32())},vec2u(t){return Ue(t.readUint32(),t.readUint32())},vec3u(t){return Mt(t.readUint32(),t.readUint32(),t.readUint32())},vec4u(t){return _(t.readUint32(),t.readUint32(),t.readUint32(),t.readUint32())},"vec2<bool>"(){throw new Error("Booleans are not host-shareable")},"vec3<bool>"(){throw new Error("Booleans are not host-shareable")},"vec4<bool>"(){throw new Error("Booleans are not host-shareable")},mat2x2f(t){return Yr(t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32())},mat3x3f(t){let e=()=>{let r=t.readFloat32();return t.readFloat32(),r};return Jr(t.readFloat32(),t.readFloat32(),e(),t.readFloat32(),t.readFloat32(),e(),t.readFloat32(),t.readFloat32(),e())},mat4x4f(t){return Xr(t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32())},struct(t,e){let r=U(e);F(t,r);let n={},a=e.propTypes;for(let[o,s]of Object.entries(a))F(t,U(s)),n[o]=E(t,s);return F(t,r),n},array(t,e){if(e.elementCount===0)throw new Error("Cannot read using a runtime-sized schema.");let r=U(e),n=[];for(let a=0;a<e.elementCount;a++){F(t,r);let o=e.elementType,s=E(t,o);n.push(s)}return F(t,r),n},ptr(){throw new Error("Pointers are not host-shareable")},atomic(t,e){return E(t,e.inner)},decorated(t,e){let r=O(e);F(t,r);let n=t.currentByteOffset,a=E(t,e.inner);return t.seekTo(n+v(e)),a},uint8:t=>t.readUint8(),uint8x2:t=>Ue(t.readUint8(),t.readUint8()),uint8x4:t=>_(t.readUint8(),t.readUint8(),t.readUint8(),t.readUint8()),sint8:t=>t.readInt8(),sint8x2:t=>Fe(t.readInt8(),t.readInt8()),sint8x4:t=>$(t.readInt8(),t.readInt8(),t.readInt8(),t.readInt8()),unorm8:t=>t.readUint8()/255,unorm8x2:t=>H(t.readUint8()/255,t.readUint8()/255),unorm8x4:t=>P(t.readUint8()/255,t.readUint8()/255,t.readUint8()/255,t.readUint8()/255),snorm8:t=>t.readInt8()/127,snorm8x2:t=>H(t.readInt8()/127,t.readInt8()/127),snorm8x4:t=>P(t.readInt8()/127,t.readInt8()/127,t.readInt8()/127,t.readInt8()/127),uint16:t=>t.readUint16(),uint16x2:t=>Ue(t.readUint16(),t.readUint16()),uint16x4:t=>_(t.readUint16(),t.readUint16(),t.readUint16(),t.readUint16()),sint16:t=>t.readInt16(),sint16x2:t=>Fe(t.readInt16(),t.readInt16()),sint16x4:t=>$(t.readInt16(),t.readInt16(),t.readInt16(),t.readInt16()),unorm16:t=>t.readUint16()/65535,unorm16x2:t=>H(t.readUint16()/65535,t.readUint16()/65535),unorm16x4:t=>P(t.readUint16()/65535,t.readUint16()/65535,t.readUint16()/65535,t.readUint16()/65535),snorm16:t=>t.readInt16()/32767,snorm16x2:t=>H(t.readInt16()/32767,t.readInt16()/32767),snorm16x4:t=>P(t.readInt16()/32767,t.readInt16()/32767,t.readInt16()/32767,t.readInt16()/32767),float16(t){return t.readFloat16()},float16x2:t=>H(t.readFloat16(),t.readFloat16()),float16x4:t=>P(t.readFloat16(),t.readFloat16(),t.readFloat16(),t.readFloat16()),float32:t=>t.readFloat32(),float32x2:t=>H(t.readFloat32(),t.readFloat32()),float32x3:t=>Ot(t.readFloat32(),t.readFloat32(),t.readFloat32()),float32x4:t=>P(t.readFloat32(),t.readFloat32(),t.readFloat32(),t.readFloat32()),uint32:t=>t.readUint32(),uint32x2:t=>Ue(t.readUint32(),t.readUint32()),uint32x3:t=>Mt(t.readUint32(),t.readUint32(),t.readUint32()),uint32x4:t=>_(t.readUint32(),t.readUint32(),t.readUint32(),t.readUint32()),sint32:t=>t.readInt32(),sint32x2:t=>Fe(t.readInt32(),t.readInt32()),sint32x3:t=>kt(t.readInt32(),t.readInt32(),t.readInt32()),sint32x4:t=>$(t.readInt32(),t.readInt32(),t.readInt32(),t.readInt32()),"unorm10-10-10-2"(t){let e=t.readUint32(),r=(e>>22)/1023,n=(e>>12&1023)/1023,a=(e>>2&1023)/1023,o=(e&3)/3;return P(r,n,a,o)},"unorm8x4-bgra"(t){let e=t.readByte()/255,r=t.readByte()/255,n=t.readByte()/255,a=t.readByte()/255;return P(n,r,e,a)},unstruct(t,e){let r={},n=e.propTypes;for(let[a,o]of Object.entries(n))r[a]=E(t,o);return r},disarray(t,e){let r=U(e),n=[];for(let a=0;a<e.elementCount;a++)F(t,r),n.push(E(t,e.elementType));return F(t,r),n},"loose-decorated"(t,e){F(t,O(e));let r=t.currentByteOffset,n=E(t,e.inner);return t.seekTo(r+v(e)),n}};function E(t,e){let r=Aa[e.type];if(!r)throw new Error(`Cannot read data of type '${e.type}'.`);return r(t,e)}import{BufferWriter as Ra}from"typed-binary";function Sn(t,e){let r=v(t);if(r===0||e===void 0||e===null)return[];let n=new ArrayBuffer(r),a=new Ra(n),o=[];function s(l,f,g,c){if(f!=null){if(B(l)||Q(l)){let y=nt(l);for(let[x,I]of Object.entries(y)){let w=l.propTypes[x];if(!w)continue;let S=f[x];S!==void 0&&s(w,S,g+I.offset,I.padding??c)}return}if(ge(l)||Je(l)){let y=l,x=A(v(y.elementType),U(y.elementType));if(!Array.isArray(f))throw new Error("Partial value for array must be an array");let I=f??[];I.sort((w,S)=>w.idx-S.idx);for(let{idx:w,value:S}of I)s(y.elementType,S,g+w*x,x-v(y.elementType))}else{let y=v(l);a.seekTo(g),pe(a,l,f),o.push({start:g,end:g+y,padding:c})}}}if(s(t,e,0),o.length===0)return[];let i=[],u=o[0];for(let l=1;l<o.length;l++){let f=o[l];if(!f||!u)throw new Error("Internal error: missing segment");f.start===u.end+(u.padding??0)?(u.end=f.end,u.padding=f.padding):(i.push({data:new Uint8Array(n,u.start,u.end-u.start)}),u=f)}if(!u)throw new Error("Internal error: missing segment");return i.push({data:new Uint8Array(n,u.start,u.end-u.start)}),i}function le(t){return!!t?.usableAsStorage}var Ae=class t extends Error{constructor(e){super(`Resource '${m(e)??"<unnamed>"}' cannot be bound as 'storage'. Use .$usage('storage') to allow it.`),Object.setPrototypeOf(this,t.prototype)}};function it(t){return!!t.usableAsUniform}var Fn={uniform:"uniform",mutable:"storage, read_write",readonly:"storage, read"},Re=class{constructor(e,r){this.usage=e;this.buffer=r;this[p]={dataType:r.dataType},this[h]=r}resourceType="buffer-usage";[p];[h];$name(e){return this.buffer.$name(e),this}"~resolve"(e){let r=e.names.makeUnique(m(this)),{group:n,binding:a}=e.allocateFixedEntry(this.usage==="uniform"?{uniform:this.buffer.dataType}:{storage:this.buffer.dataType,access:this.usage},this.buffer),o=Fn[this.usage];return e.addDeclaration(`@group(${n}) @binding(${a}) var<${o}> ${r}: ${e.resolve(this.buffer.dataType)};`),r}toString(){return`${this.usage}:${m(this)??"<unnamed>"}`}[D](){return new Proxy({"~resolve":e=>e.resolve(this),toString:()=>`.value:${m(this)??"<unnamed>"}`,[b]:this.buffer.dataType},k)}get $(){let e=ye(),r=ce();if(e.type==="normal")throw new Gt(r?`Cannot access ${String(this.buffer)}. TypeGPU functions that depends on GPU resources need to be part of a compute dispatch, draw call or simulation`:".$ and .value are inaccessible during normal JS execution. Try `.read()`");return e.type==="codegen"?this[D]():e.type==="simulate"?(e.buffers.has(this.buffer)||e.buffers.set(this.buffer,Xe(this.buffer.dataType,this.buffer.initial)??Kr(this.buffer.dataType)),e.buffers.get(this.buffer)):K(e,"bufferUsage.ts#TgpuFixedBufferImpl/$")}get value(){return this.$}set $(e){let r=ye(),n=ce();if(r.type==="normal")throw new Gt(n?`Cannot access ${String(this.buffer)}. TypeGPU functions that depends on GPU resources need to be part of a compute dispatch, draw call or simulation`:".$ and .value are inaccessible during normal JS execution. Try `.write()`");if(r.type==="codegen")throw new Error("Unreachable bufferUsage.ts#TgpuFixedBufferImpl/$");if(r.type==="simulate"){r.buffers.set(this.buffer,e);return}K(r,"bufferUsage.ts#TgpuFixedBufferImpl/$")}set value(e){this.$=e}},Ce=class{constructor(e,r,n){this.usage=e;this.dataType=r;this._membership=n;this[p]={dataType:r},T(this,n.key)}resourceType="buffer-usage";[p];"~resolve"(e){let r=e.names.makeUnique(m(this)),n=e.allocateLayoutEntry(this._membership.layout),a=Fn[this.usage];return e.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var<${a}> ${r}: ${e.resolve(this.dataType)};`),r}toString(){return`${this.usage}:${m(this)??"<unnamed>"}`}[D](){return new Proxy({"~resolve":e=>e.resolve(this),toString:()=>`.value:${m(this)??"<unnamed>"}`,[b]:this.dataType},k)}get $(){if(Te())return this[D]();throw new Error("Direct access to buffer values is possible only as part of a compute dispatch or draw call. Try .read() or .write() instead")}get value(){return this.$}},vn=new WeakMap;function Un(t){if(!le(t))throw new Error(`Cannot pass ${t} to asMutable, as it is not allowed to be used as storage. To allow it, call .$usage('storage') when creating the buffer.`);let e=vn.get(t);return e||(e=new Re("mutable",t),vn.set(t,e)),e}var In=new WeakMap;function Pn(t){if(!le(t))throw new Error(`Cannot pass ${t} to asReadonly, as it is not allowed to be used as storage. To allow it, call .$usage('storage') when creating the buffer.`);let e=In.get(t);return e||(e=new Re("readonly",t),In.set(t,e)),e}var Dn=new WeakMap;function Bn(t){if(!it(t))throw new Error(`Cannot pass ${t} to asUniform, as it is not allowed to be used as a uniform. To allow it, call .$usage('uniform') when creating the buffer.`);let e=Dn.get(t);return e||(e=new Re("uniform",t),Dn.set(t,e)),e}var Ga={uniform:Bn,mutable:Un,readonly:Pn};function Ge(t,e,r){return fe(e)?new ut(t,e,r):new ut(t,e,r,["storage","uniform"])}function ee(t){return t.resourceType==="buffer"}function Va(t){return!!t.usableAsVertex}var $a=Ca(),ut=class{constructor(e,r,n,a){this._group=e;this.dataType=r;this.initialOrBuffer=n;this._disallowedUsages=a;De(n)?(this._ownBuffer=!1,this._buffer=n):(this._ownBuffer=!0,this.initial=n)}[p]=!0;resourceType="buffer";flags=GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC;_buffer=null;_ownBuffer;_destroyed=!1;_hostBuffer;initial;usableAsUniform=!1;usableAsStorage=!1;usableAsVertex=!1;usableAsIndex=!1;get buffer(){let e=this._group.device;if(this._destroyed)throw new Error("This buffer has been destroyed");if(!this._buffer&&(this._buffer=e.createBuffer({size:v(this.dataType),usage:this.flags,mappedAtCreation:!!this.initial,label:m(this)??"<unnamed>"}),this.initial)){let r=new An(this._buffer.getMappedRange());pe(r,this.dataType,this.initial),this._buffer.unmap()}return this._buffer}get destroyed(){return this._destroyed}$name(e){return T(this,e),this._buffer&&(this._buffer.label=e),this}$usage(...e){for(let r of e){if(this._disallowedUsages?.includes(r))throw new Error(`Buffer of type ${this.dataType.type} cannot be used as ${r}`);this.flags|=r==="uniform"?GPUBufferUsage.UNIFORM:0,this.flags|=r==="storage"?GPUBufferUsage.STORAGE:0,this.flags|=r==="vertex"?GPUBufferUsage.VERTEX:0,this.flags|=r==="index"?GPUBufferUsage.INDEX:0,this.usableAsUniform=this.usableAsUniform||r==="uniform",this.usableAsStorage=this.usableAsStorage||r==="storage",this.usableAsVertex=this.usableAsVertex||r==="vertex",this.usableAsIndex=this.usableAsIndex||r==="index"}return this}$addFlags(e){if(!this._ownBuffer)throw new Error("Cannot add flags to a buffer that is not managed by TypeGPU.");return e&GPUBufferUsage.MAP_READ?(this.flags=GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,this):e&GPUBufferUsage.MAP_WRITE?(this.flags=GPUBufferUsage.COPY_SRC|GPUBufferUsage.MAP_WRITE,this):(this.flags|=e,this)}compileWriter(){Yt(this.dataType)}_writeToTarget(e,r){let n=Yt(this.dataType);if(n)try{n(new DataView(e),0,r,$a==="little");return}catch(a){console.error(`Error when using compiled writer for buffer ${m(this)??"<unnamed>"} - this is likely a bug, please submit an issue at https://github.com/software-mansion/TypeGPU/issues
17
+ Using fallback writer instead.`,a)}pe(new An(e),this.dataType,r)}write(e){let r=this.buffer,n=this._group.device;if(r.mapState==="mapped"){let o=r.getMappedRange();this._writeToTarget(o,e);return}let a=v(this.dataType);this._hostBuffer||(this._hostBuffer=new ArrayBuffer(a)),this._group.flush(),this._writeToTarget(this._hostBuffer,e),n.queue.writeBuffer(r,0,this._hostBuffer,0,a)}writePartial(e){let r=this.buffer,n=this._group.device,a=Sn(this.dataType,e);if(r.mapState==="mapped"){let o=r.getMappedRange(),s=new Uint8Array(o);for(let i of a)s.set(i.data,i.data.byteOffset)}else for(let o of a)n.queue.writeBuffer(r,o.data.byteOffset,o.data,0,o.data.byteLength)}copyFrom(e){if(this.buffer.mapState==="mapped")throw new Error("Cannot copy to a mapped buffer.");let r=v(this.dataType);this._group.commandEncoder.copyBufferToBuffer(e.buffer,0,this.buffer,0,r)}async read(){this._group.flush();let e=this.buffer,r=this._group.device;if(e.mapState==="mapped"){let s=e.getMappedRange();return E(new Jt(s),this.dataType)}if(e.usage&GPUBufferUsage.MAP_READ){await e.mapAsync(GPUMapMode.READ);let s=e.getMappedRange(),i=E(new Jt(s),this.dataType);return e.unmap(),i}let n=r.createBuffer({size:v(this.dataType),usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),a=r.createCommandEncoder();a.copyBufferToBuffer(e,0,n,0,v(this.dataType)),r.queue.submit([a.finish()]),await r.queue.onSubmittedWorkDone(),await n.mapAsync(GPUMapMode.READ,0,v(this.dataType));let o=E(new Jt(n.getMappedRange()),this.dataType);return n.unmap(),n.destroy(),o}as(e){return Ga[e]?.(this)}destroy(){this._destroyed||(this._destroyed=!0,this._ownBuffer&&this._buffer?.destroy())}toString(){return`buffer:${m(this)??"<unnamed>"}`}};function Rn(t){return new Xt(t)}function Cn(t){return new Zt(t)}function Ve(t){let e=t;return e?.resourceType==="sampler"&&!!e[p]}function $e(t){let e=t;return e?.resourceType==="sampler-comparison"&&!!e[p]}var pt=class{constructor(e){this._membership=e;this[b]=this,this[p]={},T(this,e.key)}[b];[p];resourceType="sampler";"~resolve"(e){let r=e.names.makeUnique(m(this)),n=e.allocateLayoutEntry(this._membership.layout);return e.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: sampler;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}},lt=class{constructor(e){this._membership=e;this[b]=this,this[p]={},T(this,e.key)}[b];[p];resourceType="sampler-comparison";"~resolve"(e){let r=e.names.makeUnique(m(this)),n=e.allocateLayoutEntry(this._membership.layout);return e.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: sampler_comparison;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}},Xt=class{constructor(e){this._props=e;this[b]=this,this[p]={unwrap:r=>(this._sampler||(this._sampler=r.device.createSampler({...this._props,label:m(this)??"<unnamed>"})),this._sampler)},this._filtering=e.minFilter==="linear"||e.magFilter==="linear"||e.mipmapFilter==="linear"}[b];[p];resourceType="sampler";_filtering;_sampler=null;$name(e){return T(this,e),this}"~resolve"(e){let r=e.names.makeUnique(m(this)),{group:n,binding:a}=e.allocateFixedEntry({sampler:this._filtering?"filtering":"non-filtering"},this);return e.addDeclaration(`@group(${n}) @binding(${a}) var ${r}: sampler;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}},Zt=class{constructor(e){this._props=e;this[b]=this,this[p]={unwrap:r=>(this._sampler||(this._sampler=r.device.createSampler({...this._props,label:m(this)??"<unnamed>"})),this._sampler)}}[b];[p];resourceType="sampler-comparison";_sampler=null;$name(e){return T(this,e),this}"~resolve"(e){let r=e.names.makeUnique(m(this)),{group:n,binding:a}=e.allocateFixedEntry({sampler:"comparison"},this);return e.addDeclaration(`@group(${n}) @binding(${a}) var ${r}: sampler_comparison;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}};var mt=class{constructor(e){this._membership=e;T(this,e.key)}resourceType="external-texture";"~resolve"(e){let r=e.names.makeUnique(m(this)),n=e.allocateLayoutEntry(this._membership.layout);return e.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: texture_external;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}};var Gn={r8unorm:d,r8snorm:d,r8uint:C,r8sint:V,r16uint:C,r16sint:V,r16float:d,rg8unorm:d,rg8snorm:d,rg8uint:C,rg8sint:V,r32uint:C,r32sint:V,r32float:d,rg16uint:C,rg16sint:V,rg16float:d,rgba8unorm:d,"rgba8unorm-srgb":d,rgba8snorm:d,rgba8uint:C,rgba8sint:V,bgra8unorm:d,"bgra8unorm-srgb":d,rgb9e5ufloat:d,rgb10a2uint:C,rgb10a2unorm:d,rg11b10ufloat:d,rg32uint:C,rg32sint:V,rg32float:d,rgba16uint:C,rgba16sint:V,rgba16float:d,rgba32uint:C,rgba32sint:V,rgba32float:d,stencil8:d,depth16unorm:d,depth24plus:d,"depth24plus-stencil8":d,depth32float:d,"depth32float-stencil8":d,"bc1-rgba-unorm":d,"bc1-rgba-unorm-srgb":d,"bc2-rgba-unorm":d,"bc2-rgba-unorm-srgb":d,"bc3-rgba-unorm":d,"bc3-rgba-unorm-srgb":d,"bc4-r-unorm":d,"bc4-r-snorm":d,"bc5-rg-unorm":d,"bc5-rg-snorm":d,"bc6h-rgb-ufloat":d,"bc6h-rgb-float":d,"bc7-rgba-unorm":d,"bc7-rgba-unorm-srgb":d,"etc2-rgb8unorm":d,"etc2-rgb8unorm-srgb":d,"etc2-rgb8a1unorm":d,"etc2-rgb8a1unorm-srgb":d,"etc2-rgba8unorm":d,"etc2-rgba8unorm-srgb":d,"eac-r11unorm":d,"eac-r11snorm":d,"eac-rg11unorm":d,"eac-rg11snorm":d,"astc-4x4-unorm":d,"astc-4x4-unorm-srgb":d,"astc-5x4-unorm":d,"astc-5x4-unorm-srgb":d,"astc-5x5-unorm":d,"astc-5x5-unorm-srgb":d,"astc-6x5-unorm":d,"astc-6x5-unorm-srgb":d,"astc-6x6-unorm":d,"astc-6x6-unorm-srgb":d,"astc-8x5-unorm":d,"astc-8x5-unorm-srgb":d,"astc-8x6-unorm":d,"astc-8x6-unorm-srgb":d,"astc-8x8-unorm":d,"astc-8x8-unorm-srgb":d,"astc-10x5-unorm":d,"astc-10x5-unorm-srgb":d,"astc-10x6-unorm":d,"astc-10x6-unorm-srgb":d,"astc-10x8-unorm":d,"astc-10x8-unorm-srgb":d,"astc-10x10-unorm":d,"astc-10x10-unorm-srgb":d,"astc-12x10-unorm":d,"astc-12x10-unorm-srgb":d,"astc-12x12-unorm":d,"astc-12x12-unorm-srgb":d,r16snorm:d,r16unorm:d,rg16unorm:d,rg16snorm:d,rgba16unorm:d,rgba16snorm:d},_e={rgba8unorm:P,rgba8snorm:P,rgba8uint:_,rgba8sint:$,rgba16uint:_,rgba16sint:$,rgba16float:P,r32uint:_,r32sint:$,r32float:P,rg32uint:_,rg32sint:$,rg32float:P,rgba32uint:_,rgba32sint:$,rgba32float:P,bgra8unorm:P},Vn={f32:"float",u32:"uint",i32:"sint"},$n={float:d,"unfilterable-float":d,uint:C,sint:V,depth:d};function _n(t,e){return new er(t,e)}function N(t){return t?.resourceType==="texture"&&!!t[p]}function Ee(t){return t?.resourceType==="texture-storage-view"&&!!t[p]}function Le(t){return t?.resourceType==="texture-sampled-view"&&!!t[p]}var En={mutable:"read_write",readonly:"read",writeonly:"write"},er=class{constructor(e,r){this.props=e;this._branch=r;this[p]={unwrap:()=>{if(this._destroyed)throw new Error("This texture has been destroyed");return this._texture||(this._texture=this._branch.device.createTexture({label:m(this)??"<unnamed>",format:this.props.format,size:this.props.size,usage:this._flags,dimension:this.props.dimension??"2d",viewFormats:this.props.viewFormats??[],mipLevelCount:this.props.mipLevelCount??1,sampleCount:this.props.sampleCount??1})),this._texture}}}[p];resourceType="texture";usableAsSampled=!1;usableAsStorage=!1;usableAsRender=!1;_destroyed=!1;_flags=GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC;_texture=null;$name(e){return T(this,e),this}$usage(...e){let r=e.includes("storage"),n=e.includes("sampled"),a=e.includes("render");return this._flags|=n?GPUTextureUsage.TEXTURE_BINDING:0,this._flags|=r?GPUTextureUsage.STORAGE_BINDING:0,this._flags|=a?GPUTextureUsage.RENDER_ATTACHMENT:0,this.usableAsStorage||=r,this.usableAsSampled||=n,this.usableAsRender||=a,this}createView(e,r){if(e==="sampled")return this._asSampled(r);let n=r;switch(e){case"mutable":return this._asMutable(n);case"readonly":return this._asReadonly(n);case"writeonly":return this._asWriteonly(n)}}_asStorage(e,r){if(!this.usableAsStorage)throw new Error("Unusable as storage");let n=e?.format??this.props.format,a=_e[n];return re(!!a,`Unsupported storage texture format: ${n}`),new tr(e??{},r,this)}_asReadonly(e){return this._asStorage(e,"readonly")}_asWriteonly(e){return this._asStorage(e,"writeonly")}_asMutable(e){return this._asStorage(e,"mutable")}_asSampled(e){if(!this.usableAsSampled)throw new Error("Unusable as sampled");let r=e?.format??this.props.format;if(!_e[r])throw new Error(`Unsupported storage texture format: ${r}`);return new rr(e,this)}destroy(){this._destroyed||(this._destroyed=!0,this._texture?.destroy())}},gt={"1d":"1d","2d":"2d","2d-array":"2d_array",cube:"cube","cube-array":"cube_array","3d":"3d"},tr=class{constructor(e,r,n){this.access=r;this._texture=n;this[b]=this,this[p]={unwrap:()=>(this._view||(this._view=this._texture[p].unwrap().createView({label:`${m(this)??"<unnamed>"} - View`,format:this._format,dimension:this.dimension})),this._view)},this[h]=n,this.dimension=e?.dimension??n.props.dimension??"2d",this._format=e?.format??n.props.format,this.texelDataType=_e[this._format]}[b];[p];[h];resourceType="texture-storage-view";texelDataType;dimension;_view;_format;$name(e){return this._texture.$name(e),this}"~resolve"(e){let r=e.names.makeUnique(m(this)),{group:n,binding:a}=e.allocateFixedEntry({storageTexture:this._format,access:this.access,viewDimension:this.dimension},this),o=`texture_storage_${gt[this.dimension]}`;return e.addDeclaration(`@group(${n}) @binding(${a}) var ${r}: ${o}<${this._format}, ${En[this.access]}>;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}},dt=class{constructor(e,r,n,a){this._format=e;this.dimension=r;this.access=n;this._membership=a;this[b]=this,this[p]={},this.texelDataType=_e[this._format],T(this,a.key)}[b];[p];resourceType="texture-storage-view";texelDataType;"~resolve"(e){let r=e.names.makeUnique(m(this)),n=e.allocateLayoutEntry(this._membership.layout),a=`texture_storage_${gt[this.dimension]}`;return e.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: ${a}<${this._format}, ${En[this.access]}>;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}},rr=class{constructor(e,r){this._props=e;this._texture=r;this[b]=this,this[p]={unwrap:()=>(this._view||(this._view=this._texture[p].unwrap().createView({label:`${m(this)??"<unnamed>"} - View`,...this._props})),this._view)},this[h]=r,this.dimension=e?.dimension??r.props.dimension??"2d",this._format=e?.format??r.props.format,this.channelDataType=Gn[this._format]}[b];[p];[h];resourceType="texture-sampled-view";channelDataType;dimension;_format;_view;$name(e){return this._texture.$name(e),this}"~resolve"(e){let r=e.names.makeUnique(m(this)),n=(this._texture.props.sampleCount??1)>1,{group:a,binding:o}=e.allocateFixedEntry({texture:Vn[this.channelDataType.type],viewDimension:this.dimension,multisampled:n},this),s=n?"texture_multisampled_2d":`texture_${gt[this.dimension]}`;return e.addDeclaration(`@group(${a}) @binding(${o}) var ${r}: ${s}<${e.resolve(this.channelDataType)}>;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}},ft=class{constructor(e,r,n,a){this.dimension=r;this._multisampled=n;this._membership=a;this[b]=this,this[p]={},T(this,a.key),this.channelDataType=$n[e]}[b];[p];resourceType="texture-sampled-view";channelDataType;"~resolve"(e){let r=e.names.makeUnique(m(this)),n=e.allocateLayoutEntry(this._membership.layout),a=this._multisampled?"texture_multisampled_2d":`texture_${gt[this.dimension]}`;return e.addDeclaration(`@group(${n}) @binding(${this._membership.idx}) var ${r}: ${a}<${e.resolve(this.channelDataType)}>;`),r}toString(){return`${this.resourceType}:${m(this)??"<unnamed>"}`}};function nr(t){return!!t?.usableAsSampled}function _a(t){return!!t?.usableAsRender}var ct=class t extends Error{constructor(e){super(`Resource '${m(e)??"<unnamed>"}' cannot be bound as 'sampled'. Use .$usage('sampled') to allow it.`),Object.setPrototypeOf(this,t.prototype)}};function yt(t){return new or(t)}function Tt(t){return!!t&&t.resourceType==="bind-group-layout"}function sr(t){return!!t&&t.resourceType==="bind-group"}var ar=class t extends Error{constructor(e,r){super(`Bind group '${e??"<unnamed>"}' is missing a required binding '${r}'`),Object.setPrototypeOf(this,t.prototype)}},Ln=["compute"],Se=["compute","vertex","fragment"],or=class{constructor(e){this.entries=e;let r=0;for(let[n,a]of Object.entries(e)){if(a===null){r++;continue}let o={layout:this,key:n,idx:r};if("uniform"in a&&(this.bound[n]=new Ce("uniform",a.uniform,o)),"storage"in a){let s="type"in a.storage?a.storage:a.storage(0);this.bound[n]=new Ce(a.access??"readonly",s,o)}"texture"in a&&(this.bound[n]=new ft(a.texture,a.viewDimension??"2d",a.multisampled??!1,o)),"storageTexture"in a&&(this.bound[n]=new dt(a.storageTexture,a.viewDimension??"2d",a.access??"writeonly",o)),"externalTexture"in a&&(this.bound[n]=new mt(o)),"sampler"in a&&(a.sampler==="comparison"?this.bound[n]=new lt(o):this.bound[n]=new pt(o)),"texture"in a||"storageTexture"in a||"externalTexture"in a||"sampler"in a?this.value[n]=this.bound[n]:Object.defineProperty(this.value,n,{get:()=>this.bound[n].value}),r++}}[p]=!0;_index;resourceType="bind-group-layout";bound={};value={};$=this.value;toString(){return`bindGroupLayout:${m(this)??"<unnamed>"}`}get index(){return this._index}$name(e){return T(this,e),this}$idx(e){return this._index=e,this}unwrap(e){return e.device.createBindGroupLayout({label:m(this)??"<unnamed>",entries:Object.values(this.entries).map((n,a)=>{if(n===null)return null;let o=n.visibility,s={binding:a,visibility:0};if("uniform"in n)o=o??Se,s.buffer={type:"uniform"};else if("storage"in n)o=o??(n.access==="mutable"?Ln:Se),s.buffer={type:n.access==="mutable"?"storage":"read-only-storage"};else if("sampler"in n)o=o??Se,s.sampler={type:n.sampler};else if("texture"in n)o=o??Se,s.texture={sampleType:n.texture,viewDimension:n.viewDimension??"2d",multisampled:n.multisampled??!1};else if("storageTexture"in n){let i=n.access??"writeonly";o=o??(i==="readonly"?Se:Ln),s.storageTexture={format:n.storageTexture,access:{mutable:"read-write",readonly:"read-only",writeonly:"write-only"}[i],viewDimension:n.viewDimension??"2d"}}else"externalTexture"in n&&(o=o??Se,s.externalTexture={});return o?.includes("compute")&&(s.visibility|=GPUShaderStage.COMPUTE),o?.includes("vertex")&&(s.visibility|=GPUShaderStage.VERTEX),o?.includes("fragment")&&(s.visibility|=GPUShaderStage.FRAGMENT),s}).filter(n=>n!==null)})}},ve=class{constructor(e,r){this.layout=e;this.entries=r;for(let n of Object.keys(e.entries))if(e.entries[n]!==null&&!(n in r))throw new ar(m(e),n)}resourceType="bind-group";unwrap(e){return e.device.createBindGroup({label:m(this.layout)??"<unnamed>",layout:e.unwrap(this.layout),entries:Object.entries(this.layout.entries).map(([n,a],o)=>{if(a===null)return null;let s=this.entries[n];if(s===void 0)throw new Error(`'${n}' is a resource required to populate bind group layout '${m(this.layout)??"<unnamed>"}'.`);if("uniform"in a){let i;if(ee(s)){if(!it(s))throw new At(s);i={buffer:e.unwrap(s)}}else i={buffer:s};return{binding:o,resource:i}}if("storage"in a){let i;if(ee(s)){if(!le(s))throw new Ae(s);i={buffer:e.unwrap(s)}}else i={buffer:s};return{binding:o,resource:i}}if("texture"in a){let i;if(N(s)){if(!nr(s))throw new ct(s);i=e.unwrap(s.createView("sampled"))}else Le(s)?i=e.unwrap(s):i=s;return{binding:o,resource:i}}if("storageTexture"in a){let i;if(N(s)){if(!le(s))throw new Ae(s);a.access==="readonly"?i=e.unwrap(s.createView("readonly")):a.access==="mutable"?i=e.unwrap(s.createView("mutable")):i=e.unwrap(s.createView("writeonly"))}else Ee(s)?i=e.unwrap(s):i=s;return{binding:o,resource:i}}if("sampler"in a)return Ve(s)||$e(s)?{binding:o,resource:e.unwrap(s)}:{binding:o,resource:s};if("externalTexture"in a)return{binding:o,resource:s};throw new Error(`Malformed bind group entry: ${s} (${JSON.stringify(s)})`)}).filter(n=>n!==null)})}};var On="#CATCHALL#",ur=class{_stack=[];_itemDepth=0;get itemDepth(){return this._itemDepth}get topItem(){let e=this._stack[this._stack.length-1];if(!e||e.type!=="item")throw new Error("Internal error, expected item layer to be on top.");return e}get topFunctionReturnType(){let e=this._stack.findLast(r=>r.type==="functionScope");if(!e)throw new Error("Internal error, expected function scope to be present.");return e.returnType}pushItem(){this._itemDepth++,this._stack.push({type:"item",usedSlots:new Set})}popItem(){this.pop("item")}pushSlotBindings(e){this._stack.push({type:"slotBinding",bindingMap:new WeakMap(e)})}popSlotBindings(){this.pop("slotBinding")}pushFunctionScope(e,r,n,a){this._stack.push({type:"functionScope",args:e,argAliases:r,returnType:n,externalMap:a})}popFunctionScope(){this.pop("functionScope")}pushBlockScope(){this._stack.push({type:"blockScope",declarations:new Map})}popBlockScope(){this.pop("blockScope")}pop(e){let r=this._stack[this._stack.length-1];if(!r||e&&r.type!==e)throw new Error(`Internal error, expected a ${e} layer to be on top.`);this._stack.pop(),e==="item"&&this._itemDepth--}readSlot(e){for(let r=this._stack.length-1;r>=0;--r){let n=this._stack[r];if(n?.type==="item")n.usedSlots.add(e);else if(n?.type==="slotBinding"){let a=n.bindingMap.get(e);if(a!==void 0)return a}else if(!(n?.type==="functionScope"||n?.type==="blockScope"))throw new Error("Unknown layer type.")}return e.defaultValue}getSnippetById(e){for(let r=this._stack.length-1;r>=0;--r){let n=this._stack[r];if(n?.type==="functionScope"){let a=n.args.find(s=>s.value===e);if(a!==void 0)return a;if(n.argAliases[e])return n.argAliases[e];let o=n.externalMap[e];return o!=null?en(o):void 0}if(n?.type==="blockScope"){let a=n.declarations.get(e);if(a!==void 0)return M(e,a)}}}defineBlockVariable(e,r){if(r.type==="unknown")throw Error(`Tried to define variable '${e}' of unknown type`);for(let n=this._stack.length-1;n>=0;--n){let a=this._stack[n];if(a?.type==="blockScope")return a.declarations.set(e,r),M(e,r)}throw new Error("No block scope found to define a variable in.")}},xt=[""," "," "," "," "," "," "," "," "],ir=xt.length-1,pr=class{identLevel=0;get pre(){return xt[this.identLevel]??xt[ir].repeat(this.identLevel/ir)+xt[this.identLevel%ir]}indent(){let e=this.pre;return this.identLevel++,e}dedent(){return this.identLevel--,this.pre}withResetLevel(e){let r=this.identLevel;this.identLevel=0;try{return e()}finally{this.identLevel=r}}},Oe=class{_memoizedResolves=new WeakMap;_memoizedDerived=new WeakMap;_indentController=new pr;_itemStateStack=new ur;#e=[];_declarations=[];_varyingLocations;get varyingLocations(){return this._varyingLocations}[p]={itemStateStack:this._itemStateStack};bindGroupLayoutsToPlaceholderMap=new Map;_nextFreeLayoutPlaceholderIdx=0;fixedBindings=[];names;expectedType;constructor(e){this.names=e.names}get pre(){return this._indentController.pre}get topFunctionReturnType(){return this._itemStateStack.topFunctionReturnType}indent(){return this._indentController.indent()}dedent(){return this._indentController.dedent()}withResetIndentLevel(e){return this._indentController.withResetLevel(e)}getById(e){let r=this._itemStateStack.getSnippetById(e);return r===void 0?null:r}defineVariable(e,r){return this._itemStateStack.defineBlockVariable(e,r)}pushBlockScope(){this._itemStateStack.pushBlockScope()}popBlockScope(){this._itemStateStack.popBlockScope()}fnToWgsl(e){this._itemStateStack.pushFunctionScope(e.args,e.argAliases,e.returnType,e.externalMap);try{return{head:Ea(this,e.args,e.returnType),body:rn(this,e.body)}}finally{this._itemStateStack.popFunctionScope()}}addDeclaration(e){this._declarations.push(e)}allocateLayoutEntry(e){let r=this.bindGroupLayoutsToPlaceholderMap,n=r.get(e);return n||(n=`#BIND_GROUP_LAYOUT_${this._nextFreeLayoutPlaceholderIdx++}#`,r.set(e,n)),n}allocateFixedEntry(e,r){let n=this.fixedBindings.length;return this.fixedBindings.push({layoutEntry:e,resource:r}),{group:On,binding:n}}readSlot(e){let r=this._itemStateStack.readSlot(e);if(r===void 0)throw new Bt(e);return r}withSlots(e,r){this._itemStateStack.pushSlotBindings(e);try{return r()}finally{this._itemStateStack.popSlotBindings()}}withVaryingLocations(e,r){this._varyingLocations=e;try{return r()}finally{this._varyingLocations=void 0}}unwrap(e){if(Vt(e))return this.withSlots(e[G].pairs,()=>this.unwrap(e[G].inner));let r=e;for(;;)if(ze(r))r=this.readSlot(r);else if(qe(r))r=this._getOrCompute(r);else break;return r}_getOrCompute(e){let r=this._memoizedDerived.get(e)??[];this._itemStateStack.pushItem();try{for(let o of r)if([...o.slotToValueMap.entries()].every(([i,u])=>i.areEqual(this._itemStateStack.readSlot(i),u)))return o.result;this.pushMode(new Vr);let n;try{n=e["~compute"]()}finally{this.popMode("normal")}let a=new Map;for(let o of this._itemStateStack.topItem.usedSlots)a.set(o,this._itemStateStack.readSlot(o));return r.push({slotToValueMap:a,result:n}),this._memoizedDerived.set(e,r),n}catch(n){throw n instanceof de?n.appendToTrace(e):new de(n,[e])}finally{this._itemStateStack.popItem()}}_getOrInstantiate(e){let r=this._memoizedResolves.get(e)??[];this._itemStateStack.pushItem();try{for(let o of r)if([...o.slotToValueMap.entries()].every(([i,u])=>i.areEqual(this._itemStateStack.readSlot(i),u)))return o.result;let n;L(e)?n=Ht(this,e):qe(e)||ze(e)?n=this.resolve(this.unwrap(e)):Er(e)?n=e["~resolve"](this):n=this.resolveValue(e);let a=new Map;for(let o of this._itemStateStack.topItem.usedSlots)a.set(o,this._itemStateStack.readSlot(o));return r.push({slotToValueMap:a,result:n}),this._memoizedResolves.set(e,r),n}catch(n){throw n instanceof de?n.appendToTrace(e):new de(n,[e])}finally{this._itemStateStack.popItem()}}resolve(e){if(Vt(e))return this.withSlots(e[G].pairs,()=>this.resolve(e[G].inner));if(e&&typeof e=="object"||typeof e=="function"){if(this._itemStateStack.itemDepth===0)try{this.pushMode(new $r);let r=Ke(this,()=>this._getOrInstantiate(e));return`${[...this._declarations].join(`
29
18
 
30
- `)}${r}`}finally{Qt(Ge.GPU)}return this._getOrInstantiate(t)}return String(t)}resolveValue(t,r){if(ct(t))return this.resolve(t);if(r&&z(r))return`array(${t.map(n=>this.resolveValue(n,r.elementType))})`;if(Array.isArray(t))return`array(${t.map(n=>this.resolveValue(n))})`;if(r&&A(r))return`${this.resolve(r)}(${Object.entries(r.propTypes).map(([n,a])=>this.resolveValue(t[n],a))})`;throw new Error(`Value ${t} (as json: ${JSON.stringify(t)}) of schema ${r} is not resolvable to WGSL`)}};function $e(e,t){let r=new $r(t),n=r.resolve(e),a=r.bindGroupLayoutsToPlaceholderMap,o=[],i=new Set([...a.keys()].map(m=>m.index).filter(m=>m!==void 0)),s=mn(i),l=r.fixedBindings.map((m,g)=>[String(g),m.layoutEntry]),u=()=>{let m=s.next().value,g=Bt(Object.fromEntries(l));return o[m]=g,n=n.replaceAll(aa,String(m)),[m,new _e(g,Object.fromEntries(r.fixedBindings.map((T,x)=>[String(x),T.resource])))]},c=l.length>0?u():null;for(let[m,g]of a.entries()){let T=m.index??s.next().value;o[T]=m,n=n.replaceAll(g,String(T))}return{code:n,bindGroupLayouts:o,catchall:c}}function so(e,t,r){let n=t.map(a=>`${a.value}: ${e.resolve(a.dataType)}`).join(", ");return r.type!=="void"?`(${n}) -> ${Ue(r)} ${e.resolve(r)}`:`(${n})`}function oa(e){let{externals:t,template:r,names:n,unstable_jitTranspiler:a}=e,o={};ye(o,t??{});let i={"~resolve"(l){return Te(l,o,r??"")},toString:()=>"<root>"},{code:s}=$e(i,{names:n==="strict"?new se:new ie,jitTranspiler:a});return s}function ia(e,t,r,n){return new Er(e,t,r,n)}function rt(e){let t=e;return t?.resourceType==="query-set"&&!!t[d]}var Er=class{constructor(t,r,n,a){this._group=t;this.type=r;this.count=n;this.rawQuerySet=a;this._ownQuerySet=!a,this._querySet=a||null}resourceType="query-set";_querySet=null;_ownQuerySet;_destroyed=!1;_available=!0;_readBuffer=null;_resolveBuffer=null;get querySet(){if(this._destroyed)throw new Error("This QuerySet has been destroyed.");return this.rawQuerySet?this.rawQuerySet:this._querySet?this._querySet:(this._querySet=this._group.device.createQuerySet({type:this.type,count:this.count}),this._querySet)}get destroyed(){return this._destroyed}get available(){return this._available}get[d](){let t=this;return{get readBuffer(){return t._readBuffer||(t._readBuffer=t._group.device.createBuffer({size:t.count*BigUint64Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})),t._readBuffer},get resolveBuffer(){return t._resolveBuffer||(t._resolveBuffer=t._group.device.createBuffer({size:t.count*BigUint64Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC})),t._resolveBuffer}}}$name(t){return w(this,t),this._querySet&&(this._querySet.label=t),this}resolve(){if(this._destroyed)throw new Error("This QuerySet has been destroyed.");if(!this._available)throw new Error("This QuerySet is busy resolving or reading.");let t=this._group.device.createCommandEncoder();t.resolveQuerySet(this.querySet,0,this.count,this[d].resolveBuffer,0),this._group.device.queue.submit([t.finish()])}async read(){if(this._group.flush(),!this._resolveBuffer)throw new Error("QuerySet must be resolved before reading.");this._available=!1;try{let t=this._group.device.createCommandEncoder();t.copyBufferToBuffer(this[d].resolveBuffer,0,this[d].readBuffer,0,this.count*BigUint64Array.BYTES_PER_ELEMENT),this._group.device.queue.submit([t.finish()]),await this._group.device.queue.onSubmittedWorkDone();let r=this[d].readBuffer;await r.mapAsync(GPUMapMode.READ);let n=new BigUint64Array(r.getMappedRange().slice());return r.unmap(),Array.from(n)}finally{this._available=!0}}destroy(){this._destroyed||(this._destroyed=!0,this._querySet&&this._ownQuerySet&&this._querySet.destroy(),this._readBuffer?.destroy(),this._resolveBuffer?.destroy(),this._readBuffer=this._resolveBuffer=null)}};var nt=class{constructor(t){this._make=t}_map=new WeakMap;getOrMake(t,...r){if(this._map.has(t))return this._map.get(t);let n=this._make(t,...r);return this._map.set(t,n),n}};function _t(e,t,r){if(!r.enabledFeatures.has("timestamp-query"))throw new Error('Performance callback requires the "timestamp-query" feature to be enabled on GPU device.');return e.timestampWrites?{...e,performanceCallback:t}:{...e,performanceCallback:t,hasAutoQuerySet:!0,timestampWrites:{querySet:r.createQuerySet("timestamp",2),beginningOfPassWriteIndex:0,endOfPassWriteIndex:1}}}function $t(e,t,r){if(!r.enabledFeatures.has("timestamp-query"))throw new Error('Timestamp writes require the "timestamp-query" feature to be enabled on GPU device.');e.hasAutoQuerySet&&e.timestampWrites&&e.timestampWrites.querySet.destroy();let n={querySet:t.querySet};return t.beginningOfPassWriteIndex!==void 0&&(n.beginningOfPassWriteIndex=t.beginningOfPassWriteIndex),t.endOfPassWriteIndex!==void 0&&(n.endOfPassWriteIndex=t.endOfPassWriteIndex),{...e,hasAutoQuerySet:!1,timestampWrites:n}}function Et(e,t){if(!e.timestampWrites)return{};let{querySet:r,beginningOfPassWriteIndex:n,endOfPassWriteIndex:a}=e.timestampWrites,o={querySet:rt(r)?t.unwrap(r):r};return n!==void 0&&(o.beginningOfPassWriteIndex=n),a!==void 0&&(o.endOfPassWriteIndex=a),{timestampWrites:o}}function Gt({root:e,priors:t}){let r=t.timestampWrites?.querySet,n=t.performanceCallback;if(!r)throw new Error("Cannot dispatch workgroups with performance callback without a query set.");if(!rt(r))throw new Error("Performance callback with raw GPUQuerySet is not supported. Use TgpuQuerySet instead.");e.commandEncoder.resolveQuerySet(e.unwrap(r),0,r.count,r[d].resolveBuffer,0),e.flush(),e.device.queue.onSubmittedWorkDone().then(async()=>{if(!r.available)return;let a=await r.read(),o=a[t.timestampWrites?.beginningOfPassWriteIndex??0],i=a[t.timestampWrites?.endOfPassWriteIndex??1];if(o===void 0||i===void 0)throw new Error("QuerySet did not return valid timestamps.");await n(o,i)})}function sa(e,t,r){return new Gr(new kr(e,t,r),{})}function ua(e){let t=e;return t?.resourceType==="compute-pipeline"&&!!t[d]}var Gr=class e{constructor(t,r){this._core=t;this._priors=r;this[d]={get rawPipeline(){return t.unwrap().pipeline},get priors(){return r}},this[v]=t}[d];resourceType="compute-pipeline";[v];get rawPipeline(){return this._core.unwrap().pipeline}with(t,r){return new e(this._core,{...this._priors,bindGroupLayoutMap:new Map([...this._priors.bindGroupLayoutMap??[],[t,r]])})}withPerformanceCallback(t){let r=_t(this._priors,t,this._core.branch);return new e(this._core,r)}withTimestampWrites(t){let r=$t(this._priors,t,this._core.branch);return new e(this._core,r)}dispatchWorkgroups(t,r,n){let a=this._core.unwrap(),{branch:o}=this._core,i={label:p(this._core)??"<unnamed>",...Et(this._priors,o)},s=o.commandEncoder.beginComputePass(i);s.setPipeline(a.pipeline);let l=new Set(a.bindGroupLayouts);if(a.bindGroupLayouts.forEach((u,c)=>{if(a.catchall&&c===a.catchall[0])s.setBindGroup(c,o.unwrap(a.catchall[1])),l.delete(u);else{let m=this._priors.bindGroupLayoutMap?.get(u);m!==void 0&&(l.delete(u),s.setBindGroup(c,o.unwrap(m)))}}),l.size>0)throw new me(l);s.dispatchWorkgroups(t,r,n),s.end(),this._priors.performanceCallback&&Gt({root:o,priors:this._priors})}$name(t){return w(this._core,t),this}},kr=class{constructor(t,r,n){this.branch=t;this._slotBindings=r;this._entryFn=n}_memo;unwrap(){if(this._memo===void 0){let t=this.branch.device,{code:r,bindGroupLayouts:n,catchall:a}=$e({"~resolve":o=>(o.withSlots(this._slotBindings,()=>{o.resolve(this._entryFn)}),""),toString:()=>`computePipeline:${p(this)??"<unnamed>"}`},{names:this.branch.nameRegistry,jitTranspiler:this.branch.jitTranspiler});a!==null&&n[a[0]]?.$name(`${p(this)??"<unnamed>"} - Automatic Bind Group & Layout`),this._memo={pipeline:t.createComputePipeline({label:p(this)??"<unnamed>",layout:t.createPipelineLayout({label:`${p(this)??"<unnamed>"} - Pipeline Layout`,bindGroupLayouts:n.map(o=>this.branch.unwrap(o))}),compute:{module:t.createShaderModule({label:`${p(this)??"<unnamed>"} - Shader`,code:r})}}),bindGroupLayouts:n,catchall:a}}return this._memo}};function Wr(e,t="vertex"){return new Or(e,t)}function Lt(e){return e?.resourceType==="vertex-layout"}var Lr=Symbol("defaultAttribEntry");function kt(e,t,r,n,a){if(ot(t)||pn(t)){let o=ee(t);return o!==void 0&&(n[a??Lr]=o),kt(e,t.inner,L(r,Q(t)),n)}if(A(t)){let o=r;return Object.fromEntries(Object.entries(t.propTypes).map(([i,s])=>{o=L(o,V(s));let l=[i,kt(e,s,o,n,i)];return o+=S(s),l}))}if(q(t)){let o=r;return Object.fromEntries(Object.entries(t.propTypes).map(([i,s])=>{o=L(o,Q(s));let l=[i,kt(e,s,o,n,i)];return o+=S(s),l}))}if("type"in t&&typeof t.type=="string"){if(Zr.includes(t.type))return{_layout:e,format:t.type,offset:r};let o=en[t.type];if(o)return{_layout:e,format:o,offset:r}}throw new Error(`Unsupported data used in vertex layout: ${String(t)}`)}var Or=class{constructor(t,r){this.schemaForCount=t;this.stepMode=r;let n=t(0);this.stride=L(S(n.elementType),V(n)),this.attrib=kt(this,n.elementType,0,this._customLocationMap)}resourceType="vertex-layout";stride;attrib;_customLocationMap={};get vertexLayout(){if(this._customLocationMap[Lr]!==void 0){if(typeof this.attrib.format!="string"||typeof this.attrib.offset!="number")throw new Error("Single attribute vertex layouts must have a format and offset.");return{arrayStride:this.stride,stepMode:this.stepMode,attributes:[{format:this.attrib.format,offset:this.attrib.offset,shaderLocation:this._customLocationMap[Lr]}]}}if(!Object.keys(this.attrib).every(r=>this._customLocationMap[r]!==void 0))throw new Error("All attributes must have custom locations in order to unwrap a vertex layout.");return{arrayStride:this.stride,stepMode:this.stepMode,attributes:[...Object.entries(this.attrib).map(([r,n])=>({format:n.format,offset:n.offset,shaderLocation:this._customLocationMap[r]}))]}}$name(t){return w(this,t),this}};function uo(e){return typeof e?.loadOp=="string"}function pa(e,t){if(O(e)){if(!uo(t))throw new Error("Expected a single color attachment, not a record.");return[t]}let r=[];for(let n of Object.keys(e)){let a=t[n];if(!a)throw new Error(`A color attachment by the name of '${n}' was not provided to the shader.`);r.push(a)}return r}function po(e){return typeof e?.format=="string"}function la(e,t){if(O(e)){if(it(e))return[];if(!po(t))throw new Error("Expected a single color target configuration, not a record.");return[t]}let r=[];for(let n of Object.keys(e)){let a=t[n];if(!a)throw new Error(`A color target by the name of '${n}' was not provided to the shader.`);r.push(a)}return r}function ma(e){return new Mr(new Nr(e),{})}function da(e){let t=e;return t?.resourceType==="render-pipeline"&&!!t[d]}var Mr=class e{[d];resourceType="render-pipeline";[v];constructor(t,r){this[d]={core:t,priors:r},this[v]=t}$name(t){return w(this[d].core,t),this}with(t,r){let n=this[d];if(Rt(t))return new e(n.core,{...n.priors,bindGroupLayoutMap:new Map([...n.priors.bindGroupLayoutMap??[],[t,r]])});if(Lt(t))return new e(n.core,{...n.priors,vertexLayoutMap:new Map([...n.priors.vertexLayoutMap??[],[t,r]])});throw new Error("Unsupported value passed into .with()")}withColorAttachment(t){let r=this[d];return new e(r.core,{...r.priors,colorAttachment:t})}withDepthStencilAttachment(t){let r=this[d];return new e(r.core,{...r.priors,depthStencilAttachment:t})}withPerformanceCallback(t){let r=this[d],n=_t(r.priors,t,r.core.options.branch);return new e(r.core,n)}withTimestampWrites(t){let r=this[d],n=$t(r.priors,t,r.core.options.branch);return new e(r.core,n)}draw(t,r,n,a){let o=this[d],i=o.core.unwrap(),{branch:s,fragmentFn:l}=o.core.options,u=pa(l.shell.targets,o.priors.colorAttachment??{}).map(y=>X(y.view)?{...y,view:s.unwrap(y.view).createView()}:y),c={label:p(o.core)??"<unnamed>",colorAttachments:u,...Et(o.priors,s)};if(o.priors.depthStencilAttachment!==void 0){let y=o.priors.depthStencilAttachment;X(y.view)?c.depthStencilAttachment={...y,view:s.unwrap(y.view).createView()}:c.depthStencilAttachment=y}let m=s.commandEncoder.beginRenderPass(c);m.setPipeline(i.pipeline);let g=new Set(i.bindGroupLayouts);i.bindGroupLayouts.forEach((y,F)=>{if(i.catchall&&F===i.catchall[0])m.setBindGroup(F,s.unwrap(i.catchall[1])),g.delete(y);else{let U=o.priors.bindGroupLayoutMap?.get(y);U!==void 0&&(g.delete(y),m.setBindGroup(F,s.unwrap(U)))}});let T=new Set(o.core.usedVertexLayouts);if(o.core.usedVertexLayouts.forEach((y,F)=>{let U=o.priors.vertexLayoutMap?.get(y);U&&(T.delete(y),m.setVertexBuffer(F,s.unwrap(U)))}),g.size>0)throw new me(g);if(T.size>0)throw new Ee(T);m.draw(t,r,n,a),m.end(),o.priors.performanceCallback?Gt({root:s,priors:o.priors}):s.flush()}},Nr=class{constructor(t){this.options=t;let r=kn(t.vertexFn.shell.attributes[0],t.vertexAttribs);this._vertexBufferLayouts=r.bufferDefinitions,this.usedVertexLayouts=r.usedVertexLayouts,this._targets=la(t.fragmentFn.shell.targets,t.targets)}usedVertexLayouts;_memo;_vertexBufferLayouts;_targets;unwrap(){if(this._memo===void 0){let{branch:t,vertexFn:r,fragmentFn:n,slotBindings:a,primitiveState:o,depthStencilState:i,multisampleState:s}=this.options,{code:l,bindGroupLayouts:u,catchall:c}=$e({"~resolve":y=>(y.withSlots(a,()=>{y.resolve(r),y.resolve(n)}),""),toString:()=>`renderPipeline:${p(this)??"<unnamed>"}`},{names:t.nameRegistry,jitTranspiler:t.jitTranspiler});c!==null&&u[c[0]]?.$name(`${p(this)??"<unnamed>"} - Automatic Bind Group & Layout`);let m=t.device,g=m.createShaderModule({label:`${p(this)??"<unnamed>"} - Shader`,code:l}),T={layout:m.createPipelineLayout({label:`${p(this)??"<unnamed>"} - Pipeline Layout`,bindGroupLayouts:u.map(y=>t.unwrap(y))}),vertex:{module:g,buffers:this._vertexBufferLayouts},fragment:{module:g,targets:this._targets}},x=p(this);x!==void 0&&(T.label=x),o&&(T.primitive=o),i&&(T.depthStencil=i),s&&(T.multisample=s),this._memo={pipeline:m.createRenderPipeline(T),bindGroupLayouts:u,catchall:c}}return this._memo}};var jr=class e{constructor(t,r){this._getRoot=t;this._slotBindings=r}with(t,r){return new e(this._getRoot,[...this._slotBindings,[qe(t)?t.slot:t,r]])}withCompute(t){return new zr(this._getRoot(),this._slotBindings,t)}withVertex(t,r){return new qr({branch:this._getRoot(),primitiveState:void 0,depthStencilState:void 0,slotBindings:this._slotBindings,vertexFn:t,vertexAttribs:r,multisampleState:void 0})}},zr=class{constructor(t,r,n){this._root=t;this._slotBindings=r;this._entryFn=n}createPipeline(){return sa(this._root,this._slotBindings,this._entryFn)}},qr=class{constructor(t){this._options=t}withFragment(t,r,n){return le(typeof t!="string","Just type mismatch validation"),le(typeof r!="string","Just type mismatch validation"),new Qr({...this._options,fragmentFn:t,targets:r})}},Qr=class e{constructor(t){this._options=t}withPrimitive(t){return new e({...this._options,primitiveState:t})}withDepthStencil(t){return new e({...this._options,depthStencilState:t})}withMultisample(t){return new e({...this._options,multisampleState:t})}createPipeline(){return ma(this._options)}},Ot=class extends jr{constructor(r,n,a,o){super(()=>this,[]);this.device=r;this.nameRegistry=n;this.jitTranspiler=a;this._ownDevice=o;this["~unstable"]=this}"~unstable";_disposables=[];_unwrappedBindGroupLayouts=new nt(r=>r.unwrap(this));_unwrappedBindGroups=new nt(r=>r.unwrap(this));_commandEncoder=null;get commandEncoder(){return this._commandEncoder||(this._commandEncoder=this.device.createCommandEncoder()),this._commandEncoder}get enabledFeatures(){return new Set(this.device.features)}createBuffer(r,n){let a=qn(this,r,n);return this._disposables.push(a),a}createUniform(r,n){return this.createBuffer(r,n).$usage("uniform").as("uniform")}createMutable(r,n){return this.createBuffer(r,n).$usage("storage").as("mutable")}createReadonly(r,n){return this.createBuffer(r,n).$usage("storage").as("readonly")}createQuerySet(r,n,a){return ia(this,r,n,a)}createBindGroup(r,n){return new _e(r,n)}destroy(){for(let r of this._disposables)r.destroy();this._ownDevice&&this.device.destroy()}createTexture(r){let n=Xn(r,this);return this._disposables.push(n),n}unwrap(r){if(ua(r))return r[d].rawPipeline;if(da(r))return r[d].core.unwrap().pipeline;if(Rt(r))return this._unwrappedBindGroupLayouts.getOrMake(r);if(Br(r))return this._unwrappedBindGroups.getOrMake(r);if(pe(r))return r.buffer;if(X(r))return r[d].unwrap();if(et(r)){if(r[d].unwrap)return r[d].unwrap();throw new Error("Cannot unwrap laid-out texture view.")}if(tt(r)){if(r[d].unwrap)return r[d].unwrap();throw new Error("Cannot unwrap laid-out texture view.")}if(Lt(r))return r.vertexLayout;if(Ye(r)){if(r[d].unwrap)return r[d].unwrap(this);throw new Error("Cannot unwrap laid-out sampler.")}if(Xe(r)){if(r[d].unwrap)return r[d].unwrap(this);throw new Error("Cannot unwrap laid-out comparison sampler.")}if(rt(r))return r.querySet;throw new Error(`Unknown resource type: ${r}`)}beginRenderPass(r,n){let a=this.commandEncoder.beginRenderPass(r),o=new Map,i=new Map,s,l=()=>{if(!s)throw new Error("Cannot draw without a call to pass.setPipeline");let{core:u,priors:c}=s[d],m=u.unwrap();a.setPipeline(m.pipeline);let g=new Set(m.bindGroupLayouts);m.bindGroupLayouts.forEach((x,y)=>{if(m.catchall&&y===m.catchall[0])a.setBindGroup(y,this.unwrap(m.catchall[1])),g.delete(x);else{let F=c.bindGroupLayoutMap?.get(x)??o.get(x);F!==void 0&&(g.delete(x),Br(F)?a.setBindGroup(y,this.unwrap(F)):a.setBindGroup(y,F))}});let T=new Set;if(u.usedVertexLayouts.forEach((x,y)=>{let F=c.vertexLayoutMap?.get(x),U=F?{buffer:F,offset:void 0,size:void 0}:i.get(x);!U||!U.buffer?T.add(x):pe(U.buffer)?a.setVertexBuffer(y,this.unwrap(U.buffer),U.offset,U.size):a.setVertexBuffer(y,U.buffer,U.offset,U.size)}),g.size>0)throw new me(g);if(T.size>0)throw new Ee(T)};n({setViewport(...u){a.setViewport(...u)},setScissorRect(...u){a.setScissorRect(...u)},setBlendConstant(...u){a.setBlendConstant(...u)},setStencilReference(...u){a.setStencilReference(...u)},beginOcclusionQuery(...u){a.beginOcclusionQuery(...u)},endOcclusionQuery(...u){a.endOcclusionQuery(...u)},executeBundles(...u){a.executeBundles(...u)},setPipeline(u){s=u},setIndexBuffer:(u,c,m,g)=>{pe(u)?a.setIndexBuffer(this.unwrap(u),c,m,g):a.setIndexBuffer(u,c,m,g)},setVertexBuffer(u,c,m,g){i.set(u,{buffer:c,offset:m,size:g})},setBindGroup(u,c){o.set(u,c)},draw(u,c,m,g){l(),a.draw(u,c,m,g)},drawIndexed(...u){l(),a.drawIndexed(...u)},drawIndirect(...u){l(),a.drawIndirect(...u)},drawIndexedIndirect(...u){l(),a.drawIndexedIndirect(...u)}}),a.end()}flush(){this._commandEncoder&&(this.device.queue.submit([this._commandEncoder.finish()]),this._commandEncoder=null)}};async function fa(e){let{adapter:t,device:r,unstable_names:n="random",unstable_jitTranspiler:a}=e??{};if(!navigator.gpu)throw new Error("WebGPU is not supported by this browser.");let o=await navigator.gpu.requestAdapter(t);if(!o)throw new Error("Could not find a compatible GPU");let i=[];for(let s of r?.requiredFeatures??[]){if(!o.features.has(s))throw new Error(`Requested feature "${s}" is not supported by the adapter.`);i.push(s)}for(let s of r?.optionalFeatures??[])o.features.has(s)?i.push(s):console.warn(`Optional feature "${s}" is not supported by the adapter.`);return new Ot(await o.requestDevice({...r,requiredFeatures:i}),n==="random"?new ie:new se,a,!0)}function ca(e){let{device:t,unstable_names:r="random",unstable_jitTranspiler:n}=e??{};return new Ot(t,r==="random"?new ie:new se,n,!1)}function Wt(e){return new Kr(e)}var Kr=class{constructor(t=void 0){this.defaultValue=t}resourceType="slot";$name(t){return w(this,t),this}areEqual(t,r){return Object.is(t,r)}toString(){return`slot:${p(this)??"<unnamed>"}`}[I](t){return je(t,t.unwrap(this))}get value(){let t=Z();if(!t)throw new Error("Cannot access tgpu.slot's value outside of resolution.");return this[I](t)}};function ga(e,t){return new Hr(e,t)}var Hr=class{constructor(t,r=void 0){this.schema=t;this.defaultValue=r;this.slot=Wt(r),this[v]=this.slot}resourceType="accessor";slot;$name(t){return this.slot.$name(t),this}toString(){return`accessor:${p(this)??"<unnamed>"}`}[I](){return new Proxy({"~resolve":t=>t.resolve(this),toString:()=>`.value:${p(this)??"<unnamed>"}`,[b]:this.schema},K)}get value(){if(!J())throw new Error("`tgpu.accessor` values are only accessible on the GPU");return this[I]()}"~resolve"(t){let r=t.unwrap(this.slot);return Sn(r)?t.resolve(r):mr(r)?`${t.resolve(r)}()`:t.resolveValue(r,this.schema)}};function ya(e){return mo(e)}function lo([e,t]){return`${p(e)??"<unnamed>"}=${t}`}function mo(e){if(Z())throw new Error("Cannot create tgpu.derived objects at the resolution stage.");return{resourceType:"derived","~compute":e,[Kt]:void 0,"~gpuRepr":void 0,[I](r){return je(r,r.unwrap(this))},get value(){let r=Z();if(!r)throw new Error("Cannot access tgpu.derived's value outside of resolution.");return this[I](r)},with(r,n){return Ta(this,[[r,n]])},toString(){return"derived"}}}function Ta(e,t){return{resourceType:"derived",[Kt]:void 0,"~gpuRepr":void 0,"~compute"(){throw new Error("'~compute' should never be read on bound derived items.")},"~providing":{inner:e,pairs:t},[I](n){return je(n,n.unwrap(this))},get value(){let n=Z();if(!n)throw new Error("Cannot access tgpu.derived's value outside of resolution.");return this[I](n)},with(n,a){return Ta(e,[...t,[n,a]])},toString(){return`derived[${t.map(lo).join(", ")}]`}}}function xa(e,t){return new Mt("private",e,t)}function ha(e){return new Mt("workgroup",e)}var Mt=class{constructor(t,r,n){this.scope=t;this._dataType=r;this._initialValue=n;this[d]={scope:t}}"~resolve"(t){let r=t.names.makeUnique(p(this));return this._initialValue?t.addDeclaration(`var<${this.scope}> ${r}: ${t.resolve(this._dataType)} = ${t.resolveValue(this._initialValue,this._dataType)};`):t.addDeclaration(`var<${this.scope}> ${r}: ${t.resolve(this._dataType)};`),r}$name(t){return w(this,t),this}toString(){return`var:${p(this)??"<unnamed>"}`}[I](){return new Proxy({"~resolve":t=>t.resolve(this),toString:()=>`.value:${p(this)??"<unnamed>"}`,[b]:this._dataType},K)}get value(){if(!J())throw new Error("`tgpu.var` values are only accessible on the GPU");return this[I]()}};var wa={bindGroupLayout:Bt,vertexLayout:Wr,init:fa,initFromDevice:ca,resolve:oa,"~unstable":{fn:_n,fragmentFn:En,vertexFn:Gn,computeFn:Vn,vertexLayout:Wr,derived:ya,slot:Wt,accessor:ga,privateVar:xa,workgroupVar:ha,const:wn,declare:Dn,sampler:Qn,comparisonSampler:Kn}},Vl=wa;Object.assign(wa,{__assignAst:Fn,__removedJsImpl:In});export{me as MissingBindGroupsError,zt as MissingLinksError,Nt as MissingSlotValueError,Ee as MissingVertexBuffersError,jt as NotUniformError,ie as RandomNameRegistry,H as ResolutionError,se as StrictNameRegistry,Vl as default,pe as isBuffer,Xe as isComparisonSampler,Be as isDerived,tt as isSampledTextureView,Ye as isSampler,Pe as isSlot,et as isStorageTextureView,X as isTexture,mr as isTgpuFn,to as isUsableAsRender,Ur as isUsableAsSampled,he as isUsableAsStorage,bt as isUsableAsUniform,eo as isUsableAsVertex,wa as tgpu,Tr as unstable_asMutable,xr as unstable_asReadonly,hr as unstable_asUniform};
19
+ `)}${r}`}finally{this.popMode("codegen")}return this._getOrInstantiate(e)}return String(e)}resolveValue(e,r){if(He(e))return this.resolve(e);if(r&&ge(r))return`array(${e.map(n=>this.resolveValue(n,r.elementType))})`;if(Array.isArray(e))return`array(${e.map(n=>this.resolveValue(n))})`;if(r&&B(r))return`${this.resolve(r)}(${Object.entries(r.propTypes).map(([n,a])=>this.resolveValue(e[n],a))})`;throw new Error(`Value ${e} (as json: ${JSON.stringify(e)}) of schema ${r} is not resolvable to WGSL`)}pushMode(e){this.#e.push(e)}popMode(e){let r=this.#e.pop();e!==void 0&&re(r?.type===e,"Unexpected mode")}get mode(){return this.#e[this.#e.length-1]??kr}};function te(t,e,r){let n=new Oe(e),a=r?n.withSlots(r(new be([])).bindings,()=>n.resolve(t)):n.resolve(t),o=n.bindGroupLayoutsToPlaceholderMap,s=[],i=new Set([...o.keys()].map(c=>c.index).filter(c=>c!==void 0)),u=hn(i),l=n.fixedBindings.map((c,y)=>[String(y),c.layoutEntry]),f=()=>{let c=u.next().value,y=yt(Object.fromEntries(l));return s[c]=y,a=a.replaceAll(On,String(c)),[c,new ve(y,Object.fromEntries(n.fixedBindings.map((x,I)=>[String(I),x.resource])))]},g=l.length>0?f():void 0;for(let[c,y]of o.entries()){let x=c.index??u.next().value;s[x]=c,a=a.replaceAll(y,String(x))}return{code:a,usedBindGroupLayouts:s,catchall:g}}function Ea(t,e,r){let n=e.map(a=>`${a.value}: ${t.resolve(a.dataType)}`).join(", ");return r.type!=="void"?`(${n}) -> ${he(r)}${t.resolve(r)} `:`(${n}) `}function lr(t){let{externals:e,template:r,names:n,config:a}=t,o={};return Y(o,e??{}),te({"~resolve"(i){return ie(i,o,r??"")},toString:()=>"<root>"},{names:n==="strict"?new W:new ue},a)}function kn(t){return lr(t).code}function Mn(t){let e=j()??new Oe({names:new W}),r=[1,1,1],n=[1,1,1],a=[r[0]*n[0],r[1]*n[1],r[2]*n[2]],o=new Map,s=Array.from({length:r[0]},()=>Array.from({length:r[1]},()=>Array.from({length:r[2]},()=>new Map))),i=Array.from({length:a[0]},()=>Array.from({length:a[1]},()=>Array.from({length:a[2]},()=>new Map))),u=Array.from({length:a[0]},(l,f)=>Array.from({length:a[1]},(g,c)=>Array.from({length:a[2]},(y,x)=>{let I=Math.floor(f/n[0]),w=Math.floor(c/n[1]),S=Math.floor(x/n[2]);return new _r(o,{private:i[f][c][x],workgroup:s[I][w][S]})})));e.pushMode(u[0][0][0]);try{return{value:Ke(e,t),buffers:o,privateVars:i,workgroupVars:s}}finally{e.popMode("simulate")}}function Wn(t,e,r,n){return new mr(t,e,r,n)}function ke(t){let e=t;return e?.resourceType==="query-set"&&!!e[p]}var mr=class{constructor(e,r,n,a){this._group=e;this.type=r;this.count=n;this.rawQuerySet=a;this._ownQuerySet=!a,this._querySet=a||null}resourceType="query-set";_querySet=null;_ownQuerySet;_destroyed=!1;_available=!0;_readBuffer=null;_resolveBuffer=null;get querySet(){if(this._destroyed)throw new Error("This QuerySet has been destroyed.");return this.rawQuerySet?this.rawQuerySet:this._querySet?this._querySet:(this._querySet=this._group.device.createQuerySet({type:this.type,count:this.count}),this._querySet)}get destroyed(){return this._destroyed}get available(){return this._available}get[p](){let e=this;return{get readBuffer(){return e._readBuffer||(e._readBuffer=e._group.device.createBuffer({size:e.count*BigUint64Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})),e._readBuffer},get resolveBuffer(){return e._resolveBuffer||(e._resolveBuffer=e._group.device.createBuffer({size:e.count*BigUint64Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC})),e._resolveBuffer}}}$name(e){return T(this,e),this._querySet&&(this._querySet.label=e),this}resolve(){if(this._destroyed)throw new Error("This QuerySet has been destroyed.");if(!this._available)throw new Error("This QuerySet is busy resolving or reading.");let e=this._group.device.createCommandEncoder();e.resolveQuerySet(this.querySet,0,this.count,this[p].resolveBuffer,0),this._group.device.queue.submit([e.finish()])}async read(){if(this._group.flush(),!this._resolveBuffer)throw new Error("QuerySet must be resolved before reading.");this._available=!1;try{let e=this._group.device.createCommandEncoder();e.copyBufferToBuffer(this[p].resolveBuffer,0,this[p].readBuffer,0,this.count*BigUint64Array.BYTES_PER_ELEMENT),this._group.device.queue.submit([e.finish()]),await this._group.device.queue.onSubmittedWorkDone();let r=this[p].readBuffer;await r.mapAsync(GPUMapMode.READ);let n=new BigUint64Array(r.getMappedRange().slice());return r.unmap(),Array.from(n)}finally{this._available=!0}}destroy(){this._destroyed||(this._destroyed=!0,this._querySet&&this._ownQuerySet&&this._querySet.destroy(),this._readBuffer?.destroy(),this._resolveBuffer?.destroy(),this._readBuffer=this._resolveBuffer=null)}};var Me=class{constructor(e){this._make=e}_map=new WeakMap;getOrMake(e,...r){if(this._map.has(e))return this._map.get(e);let n=this._make(e,...r);return this._map.set(e,n),n}};function ht(t,e,r){if(!r.enabledFeatures.has("timestamp-query"))throw new Error('Performance callback requires the "timestamp-query" feature to be enabled on GPU device.');return t.timestampWrites?{...t,performanceCallback:e}:{...t,performanceCallback:e,hasAutoQuerySet:!0,timestampWrites:{querySet:r.createQuerySet("timestamp",2),beginningOfPassWriteIndex:0,endOfPassWriteIndex:1}}}function bt(t,e,r){if(!r.enabledFeatures.has("timestamp-query"))throw new Error('Timestamp writes require the "timestamp-query" feature to be enabled on GPU device.');t.hasAutoQuerySet&&t.timestampWrites&&t.timestampWrites.querySet.destroy();let n={querySet:e.querySet};return e.beginningOfPassWriteIndex!==void 0&&(n.beginningOfPassWriteIndex=e.beginningOfPassWriteIndex),e.endOfPassWriteIndex!==void 0&&(n.endOfPassWriteIndex=e.endOfPassWriteIndex),{...t,hasAutoQuerySet:!1,timestampWrites:n}}function wt(t,e){if(!t.timestampWrites)return{};let{querySet:r,beginningOfPassWriteIndex:n,endOfPassWriteIndex:a}=t.timestampWrites,o={querySet:ke(r)?e.unwrap(r):r};return n!==void 0&&(o.beginningOfPassWriteIndex=n),a!==void 0&&(o.endOfPassWriteIndex=a),{timestampWrites:o}}function We({root:t,priors:e}){let r=e.timestampWrites?.querySet,n=e.performanceCallback;if(!r)throw new Error("Cannot dispatch workgroups with performance callback without a query set.");if(!ke(r))throw new Error("Performance callback with raw GPUQuerySet is not supported. Use TgpuQuerySet instead.");t.commandEncoder.resolveQuerySet(t.unwrap(r),0,r.count,r[p].resolveBuffer,0),t.flush(),t.device.queue.onSubmittedWorkDone().then(async()=>{if(!r.available)return;let a=await r.read(),o=a[e.timestampWrites?.beginningOfPassWriteIndex??0],s=a[e.timestampWrites?.endOfPassWriteIndex??1];if(o===void 0||s===void 0)throw new Error("QuerySet did not return valid timestamps.");await n(o,s)})}function Nn(t,e,r){return new dr(new fr(t,e,r),{})}function zn(t){let e=t;return e?.resourceType==="compute-pipeline"&&!!e[p]}var dr=class t{constructor(e,r){this._core=e;this._priors=r;this[p]={get rawPipeline(){return e.unwrap().pipeline},get priors(){return r}},this[h]=e}[p];resourceType="compute-pipeline";[h];"~resolve"(e){return e.resolve(this._core)}toString(){return`computePipeline:${m(this)??"<unnamed>"}`}get rawPipeline(){return this._core.unwrap().pipeline}with(e,r){return new t(this._core,{...this._priors,bindGroupLayoutMap:new Map([...this._priors.bindGroupLayoutMap??[],[e,r]])})}withPerformanceCallback(e){let r=ht(this._priors,e,this._core.branch);return new t(this._core,r)}withTimestampWrites(e){let r=bt(this._priors,e,this._core.branch);return new t(this._core,r)}dispatchWorkgroups(e,r,n){let a=this._core.unwrap(),{branch:o}=this._core,s={label:m(this._core)??"<unnamed>",...wt(this._priors,o)},i=o.commandEncoder.beginComputePass(s);i.setPipeline(a.pipeline);let u=new Set(a.usedBindGroupLayouts);if(a.usedBindGroupLayouts.forEach((l,f)=>{if(a.catchall&&f===a.catchall[0])i.setBindGroup(f,o.unwrap(a.catchall[1])),u.delete(l);else{let g=this._priors.bindGroupLayoutMap?.get(l);g!==void 0&&(u.delete(l),i.setBindGroup(f,o.unwrap(g)))}}),u.size>0)throw new ne(u);i.dispatchWorkgroups(e,r,n),i.end(),this._priors.performanceCallback&&We({root:o,priors:this._priors})}$name(e){return T(this._core,e),this}},fr=class{constructor(e,r,n){this.branch=e;this._slotBindings=r;this._entryFn=n}_memo;"~resolve"(e){return e.withSlots(this._slotBindings,()=>(e.resolve(this._entryFn),""))}toString(){return"computePipelineCore"}unwrap(){if(this._memo===void 0){let e=this.branch.device,r,n;if(z?.enabled){let u=performance.mark("typegpu:resolution:start");r=te(this,{names:this.branch.nameRegistry}),n=performance.measure("typegpu:resolution",{start:u.name})}else r=te(this,{names:this.branch.nameRegistry});let{code:a,usedBindGroupLayouts:o,catchall:s}=r;s!==void 0&&o[s[0]]?.$name(`${m(this)??"<unnamed>"} - Automatic Bind Group & Layout`);let i=e.createShaderModule({label:`${m(this)??"<unnamed>"} - Shader`,code:a});this._memo={pipeline:e.createComputePipeline({label:m(this)??"<unnamed>",layout:e.createPipelineLayout({label:`${m(this)??"<unnamed>"} - Pipeline Layout`,bindGroupLayouts:o.map(u=>this.branch.unwrap(u))}),compute:{module:i}}),usedBindGroupLayouts:o,catchall:s},z?.enabled&&(async()=>{let u=performance.mark("typegpu:compile-start");await e.queue.onSubmittedWorkDone();let l=performance.measure("typegpu:compiled",{start:u.name});z?.record("resolution",{resolveDuration:n?.duration,compileDuration:l.duration,wgslSize:a.length})})()}return this._memo}};function yr(t,e="vertex"){return new cr(t,e)}function vt(t){return t?.resourceType==="vertex-layout"}var gr=Symbol("defaultAttribEntry");function St(t,e,r,n,a){if(je(e)||Nr(e)){let o=R(e);return o!==void 0&&(n[a??gr]=o),St(t,e.inner,A(r,O(e)),n)}if(B(e)){let o=r,s=e.propTypes;return Object.fromEntries(Object.entries(s).map(([i,u])=>{o=A(o,U(u));let l=[i,St(t,u,o,n,i)];return o+=v(u),l}))}if(Q(e)){let o=r,s=e.propTypes;return Object.fromEntries(Object.entries(s).map(([i,u])=>{o=A(o,O(u));let l=[i,St(t,u,o,n,i)];return o+=v(u),l}))}if("type"in e&&typeof e.type=="string"){if(Mr.includes(e.type))return{_layout:t,format:e.type,offset:r};let o=Wr[e.type];if(o)return{_layout:t,format:o,offset:r}}throw new Error(`Unsupported data used in vertex layout: ${String(e)}`)}var cr=class{constructor(e,r){this.schemaForCount=e;this.stepMode=r;let n=e(0);this.stride=A(v(n.elementType),U(n)),this.attrib=St(this,n.elementType,0,this._customLocationMap)}[p]=!0;resourceType="vertex-layout";stride;attrib;_customLocationMap={};get vertexLayout(){if(this._customLocationMap[gr]!==void 0){if(typeof this.attrib.format!="string"||typeof this.attrib.offset!="number")throw new Error("Single attribute vertex layouts must have a format and offset.");return{arrayStride:this.stride,stepMode:this.stepMode,attributes:[{format:this.attrib.format,offset:this.attrib.offset,shaderLocation:this._customLocationMap[gr]}]}}if(!Object.keys(this.attrib).every(r=>this._customLocationMap[r]!==void 0))throw new Error("All attributes must have custom locations in order to unwrap a vertex layout.");return{arrayStride:this.stride,stepMode:this.stepMode,attributes:[...Object.entries(this.attrib).map(([r,n])=>({format:n.format,offset:n.offset,shaderLocation:this._customLocationMap[r]}))]}}$name(e){return T(this,e),this}};function La(t){return typeof t?.loadOp=="string"}function qn(t,e){if(L(t)){if(!La(e))throw new Error("Expected a single color attachment, not a record.");return[e]}let r=[];for(let n of Object.keys(t)){let a=e[n];if(!a)throw new Error(`A color attachment by the name of '${n}' was not provided to the shader.`);r.push(a)}return r}function Oa(t){return typeof t?.format=="string"}function jn(t,e){if(L(t)){if(Qe(t))return[];if(!Oa(e))throw new Error("Expected a single color target configuration, not a record.");return[e]}let r=[];for(let n of Object.keys(t)){let a=e[n];if(!a)throw new Error(`A color target by the name of '${n}' was not provided to the shader.`);r.push(a)}return r}function Qn(t){return new Tr(new xr(t),{})}function Hn(t){let e=t;return e?.resourceType==="render-pipeline"&&!!e[p]}var Tr=class t{[p];resourceType="render-pipeline";[h];hasIndexBuffer=!1;constructor(e,r){this[p]={core:e,priors:r},this[h]=e}"~resolve"(e){return e.resolve(this[p].core)}toString(){return`renderPipeline:${m(this)??"<unnamed>"}`}$name(e){return T(this[p].core,e),this}with(e,r){let n=this[p];if(Tt(e))return new t(n.core,{...n.priors,bindGroupLayoutMap:new Map([...n.priors.bindGroupLayoutMap??[],[e,r]])});if(vt(e))return new t(n.core,{...n.priors,vertexLayoutMap:new Map([...n.priors.vertexLayoutMap??[],[e,r]])});throw new Error("Unsupported value passed into .with()")}withPerformanceCallback(e){let r=this[p],n=ht(r.priors,e,r.core.options.branch);return new t(r.core,n)}withTimestampWrites(e){let r=this[p],n=bt(r.priors,e,r.core.options.branch);return new t(r.core,n)}withColorAttachment(e){let r=this[p];return new t(r.core,{...r.priors,colorAttachment:e})}withDepthStencilAttachment(e){let r=this[p];return new t(r.core,{...r.priors,depthStencilAttachment:e})}withIndexBuffer(e,r,n,a){let o=this[p];if(De(e)){if(typeof r!="string")throw new Error("If a GPUBuffer is passed, indexFormat must be provided.");return new t(o.core,{...o.priors,indexBuffer:{buffer:e,indexFormat:r,offsetBytes:n,sizeBytes:a}})}let s={u32:"uint32",u16:"uint16"},i=e.dataType.elementType;return new t(o.core,{...o.priors,indexBuffer:{buffer:e,indexFormat:s[i.type],offsetBytes:r!==void 0?r*Wt(i):void 0,sizeBytes:a!==void 0?a*Wt(i):void 0}})}setupRenderPass(){let e=this[p],r=e.core.unwrap(),{branch:n,fragmentFn:a}=e.core.options,o=qn(a.shell.out,e.priors.colorAttachment??{}).map(g=>N(g.view)?{...g,view:n.unwrap(g.view).createView()}:g),s={label:m(e.core)??"<unnamed>",colorAttachments:o,...wt(e.priors,n)};if(e.priors.depthStencilAttachment!==void 0){let g=e.priors.depthStencilAttachment;N(g.view)?s.depthStencilAttachment={...g,view:n.unwrap(g.view).createView()}:s.depthStencilAttachment=g}let i=n.commandEncoder.beginRenderPass(s);i.setPipeline(r.pipeline);let u=new Set(r.usedBindGroupLayouts);r.usedBindGroupLayouts.forEach((g,c)=>{if(r.catchall&&c===r.catchall[0])i.setBindGroup(c,n.unwrap(r.catchall[1])),u.delete(g);else{let y=e.priors.bindGroupLayoutMap?.get(g);y!==void 0&&(u.delete(g),i.setBindGroup(c,n.unwrap(y)))}});let l=new Set(e.core.usedVertexLayouts);if(e.core.usedVertexLayouts.forEach((g,c)=>{let y=e.priors.vertexLayoutMap?.get(g);y&&(l.delete(g),i.setVertexBuffer(c,n.unwrap(y)))}),u.size>0)throw new ne(u);if(l.size>0)throw new Ie(l);return i}draw(e,r,n,a){let o=this[p],s=this.setupRenderPass(),{branch:i}=o.core.options;s.draw(e,r,n,a),s.end(),o.priors.performanceCallback?We({root:i,priors:o.priors}):i.flush()}drawIndexed(e,r,n,a,o){let s=this[p];if(!s.priors.indexBuffer)throw new Error("No index buffer set for this render pipeline.");let{buffer:i,indexFormat:u,offsetBytes:l,sizeBytes:f}=s.priors.indexBuffer,g=this.setupRenderPass(),{branch:c}=s.core.options;De(i)?g.setIndexBuffer(i,u,l,f):g.setIndexBuffer(c.unwrap(i),u,l,f),g.drawIndexed(e,r,n,a,o),g.end(),s.priors.performanceCallback?We({root:c,priors:s.priors}):c.flush()}},xr=class{constructor(e){this.options=e;let r=xn(e.vertexFn.shell.in??{},e.vertexAttribs);this._vertexBufferLayouts=r.bufferDefinitions,this.usedVertexLayouts=r.usedVertexLayouts,this._targets=jn(e.fragmentFn.shell.out,e.targets)}usedVertexLayouts;_memo;_vertexBufferLayouts;_targets;"~resolve"(e){let{vertexFn:r,fragmentFn:n,slotBindings:a}=this.options,o=ka(r.shell.out,n.shell.in,m(r)??"<unnamed>",m(n)??"<unnamed>");return e.withVaryingLocations(o,()=>e.withSlots(a,()=>(e.resolve(r),e.resolve(n),"")))}toString(){return"renderPipelineCore"}unwrap(){if(this._memo===void 0){let{branch:e,primitiveState:r,depthStencilState:n,multisampleState:a}=this.options,o=e.device,s,i;if(z?.enabled){let x=performance.mark("typegpu:resolution:start");s=te(this,{names:e.nameRegistry}),i=performance.measure("typegpu:resolution",{start:x.name})}else s=te(this,{names:e.nameRegistry});let{code:u,usedBindGroupLayouts:l,catchall:f}=s;f!==void 0&&l[f[0]]?.$name(`${m(this)??"<unnamed>"} - Automatic Bind Group & Layout`);let g=o.createShaderModule({label:`${m(this)??"<unnamed>"} - Shader`,code:u}),c={layout:o.createPipelineLayout({label:`${m(this)??"<unnamed>"} - Pipeline Layout`,bindGroupLayouts:l.map(x=>e.unwrap(x))}),vertex:{module:g,buffers:this._vertexBufferLayouts},fragment:{module:g,targets:this._targets}},y=m(this);y!==void 0&&(c.label=y),r&&(fe(r.stripIndexFormat)?c.primitive={...r,stripIndexFormat:{u32:"uint32",u16:"uint16"}[r.stripIndexFormat.type]}:c.primitive=r),n&&(c.depthStencil=n),a&&(c.multisample=a),this._memo={pipeline:o.createRenderPipeline(c),usedBindGroupLayouts:l,catchall:f},z?.enabled&&(async()=>{let x=performance.mark("typegpu:compile-start");await o.queue.onSubmittedWorkDone();let I=performance.measure("typegpu:compiled",{start:x.name});z?.record("resolution",{resolveDuration:i?.duration,compileDuration:I.duration,wgslSize:u.length})})()}return this._memo}};function ka(t,e,r,n){let a={},o=new Set;function s(u,l){a[u]=l,o.add(l)}for(let[u,l]of Object.entries(t)){let f=R(l);f!==void 0&&s(u,f)}for(let[u,l]of Object.entries(e??{})){let f=R(l);f!==void 0&&(a[u]===void 0?s(u,f):a[u]!==f&&console.warn(`Mismatched location between vertexFn (${r}) output (${a[u]}) and fragmentFn (${n}) input (${f}) for the key "${u}", using the location set on vertex output.`))}let i=0;for(let u of Object.keys(t??{}))if(!(xe(t[u])||a[u]!==void 0)){for(;o.has(i);)i++;s(u,i)}return a}function hr(t){return t instanceof me}var me=class{constructor(e,r){this.resourceType=e;this.buffer=r;this[h]=r,this.#e=this.buffer.as(this.resourceType)}[p]=!0;[h];#e;$name(e){return T(this[h],e),this}write(e){this.buffer.write(e)}writePartial(e){this.buffer.writePartial(e)}read(){return this.buffer.read()}get $(){return this.#e.$}get value(){return this.$}"~resolve"(e){return e.resolve(this.#e)}};var br=class t{constructor(e,r){this._getRoot=e;this._slotBindings=r}with(e,r){return new t(this._getRoot,[...this._slotBindings,[ae(e)?e.slot:e,r]])}withCompute(e){return new wr(this._getRoot(),this._slotBindings,e)}withVertex(e,r){return new Sr({branch:this._getRoot(),primitiveState:void 0,depthStencilState:void 0,slotBindings:this._slotBindings,vertexFn:e,vertexAttribs:r,multisampleState:void 0})}pipe(e){let r=e(new be([]));return new t(this._getRoot,[...this._slotBindings,...r.bindings])}},wr=class{constructor(e,r,n){this._root=e;this._slotBindings=r;this._entryFn=n}createPipeline(){return Nn(this._root,this._slotBindings,this._entryFn)}},Sr=class{constructor(e){this._options=e}withFragment(e,r,n){return re(typeof e!="string","Just type mismatch validation"),re(typeof r!="string","Just type mismatch validation"),new vr({...this._options,fragmentFn:e,targets:r})}},vr=class t{constructor(e){this._options=e}withPrimitive(e){return new t({...this._options,primitiveState:e})}withDepthStencil(e){return new t({...this._options,depthStencilState:e})}withMultisample(e){return new t({...this._options,multisampleState:e})}createPipeline(){return Qn(this._options)}},It=class extends br{constructor(r,n,a){super(()=>this,[]);this.device=r;this.nameRegistry=n;this._ownDevice=a;this["~unstable"]=this}"~unstable";_disposables=[];_unwrappedBindGroupLayouts=new Me(r=>r.unwrap(this));_unwrappedBindGroups=new Me(r=>r.unwrap(this));_commandEncoder=null;get commandEncoder(){return this._commandEncoder||(this._commandEncoder=this.device.createCommandEncoder()),this._commandEncoder}get enabledFeatures(){return new Set(this.device.features)}createBuffer(r,n){let a=Ge(this,r,n);return this._disposables.push(a),a}createUniform(r,n){let a=Ge(this,r,n).$usage("uniform");return this._disposables.push(a),new me("uniform",a)}createMutable(r,n){let a=Ge(this,r,n).$usage("storage");return this._disposables.push(a),new me("mutable",a)}createReadonly(r,n){let a=Ge(this,r,n).$usage("storage");return this._disposables.push(a),new me("readonly",a)}createQuerySet(r,n,a){return Wn(this,r,n,a)}createBindGroup(r,n){return new ve(r,n)}destroy(){for(let r of this._disposables)r.destroy();this._ownDevice&&this.device.destroy()}createTexture(r){let n=_n(r,this);return this._disposables.push(n),n}unwrap(r){if(zn(r))return r[p].rawPipeline;if(Hn(r))return r[p].core.unwrap().pipeline;if(Tt(r))return this._unwrappedBindGroupLayouts.getOrMake(r);if(sr(r))return this._unwrappedBindGroups.getOrMake(r);if(ee(r))return r.buffer;if(N(r))return r[p].unwrap();if(Ee(r)){if(r[p].unwrap)return r[p].unwrap();throw new Error("Cannot unwrap laid-out texture view.")}if(Le(r)){if(r[p].unwrap)return r[p].unwrap();throw new Error("Cannot unwrap laid-out texture view.")}if(vt(r))return r.vertexLayout;if(Ve(r)){if(r[p].unwrap)return r[p].unwrap(this);throw new Error("Cannot unwrap laid-out sampler.")}if($e(r)){if(r[p].unwrap)return r[p].unwrap(this);throw new Error("Cannot unwrap laid-out comparison sampler.")}if(ke(r))return r.querySet;throw new Error(`Unknown resource type: ${r}`)}beginRenderPass(r,n){let a=this.commandEncoder.beginRenderPass(r),o=new Map,s=new Map,i,u=()=>{if(!i)throw new Error("Cannot draw without a call to pass.setPipeline");let{core:l,priors:f}=i[p],g=l.unwrap();a.setPipeline(g.pipeline);let c=new Set(g.usedBindGroupLayouts);g.usedBindGroupLayouts.forEach((x,I)=>{if(g.catchall&&I===g.catchall[0])a.setBindGroup(I,this.unwrap(g.catchall[1])),c.delete(x);else{let w=f.bindGroupLayoutMap?.get(x)??o.get(x);w!==void 0&&(c.delete(x),sr(w)?a.setBindGroup(I,this.unwrap(w)):a.setBindGroup(I,w))}});let y=new Set;if(l.usedVertexLayouts.forEach((x,I)=>{let w=f.vertexLayoutMap?.get(x),S=w?{buffer:w,offset:void 0,size:void 0}:s.get(x);!S||!S.buffer?y.add(x):ee(S.buffer)?a.setVertexBuffer(I,this.unwrap(S.buffer),S.offset,S.size):a.setVertexBuffer(I,S.buffer,S.offset,S.size)}),c.size>0)throw new ne(c);if(y.size>0)throw new Ie(y)};n({setViewport(...l){a.setViewport(...l)},setScissorRect(...l){a.setScissorRect(...l)},setBlendConstant(...l){a.setBlendConstant(...l)},setStencilReference(...l){a.setStencilReference(...l)},beginOcclusionQuery(...l){a.beginOcclusionQuery(...l)},endOcclusionQuery(...l){a.endOcclusionQuery(...l)},executeBundles(...l){a.executeBundles(...l)},setPipeline(l){i=l},setIndexBuffer:(l,f,g,c)=>{ee(l)?a.setIndexBuffer(this.unwrap(l),f,g,c):a.setIndexBuffer(l,f,g,c)},setVertexBuffer(l,f,g,c){s.set(l,{buffer:f,offset:g,size:c})},setBindGroup(l,f){o.set(l,f)},draw(l,f,g,c){u(),a.draw(l,f,g,c)},drawIndexed(...l){u(),a.drawIndexed(...l)},drawIndirect(...l){u(),a.drawIndirect(...l)},drawIndexedIndirect(...l){u(),a.drawIndexedIndirect(...l)}}),a.end()}flush(){this._commandEncoder&&(this.device.queue.submit([this._commandEncoder.finish()]),this._commandEncoder=null)}};async function Kn(t){let{adapter:e,device:r,unstable_names:n="random"}=t??{};if(!navigator.gpu)throw new Error("WebGPU is not supported by this browser.");let a=await navigator.gpu.requestAdapter(e);if(!a)throw new Error("Could not find a compatible GPU");let o=[];for(let s of r?.requiredFeatures??[]){if(!a.features.has(s))throw new Error(`Requested feature "${s}" is not supported by the adapter.`);o.push(s)}for(let s of r?.optionalFeatures??[])a.features.has(s)?o.push(s):console.warn(`Optional feature "${s}" is not supported by the adapter.`);return new It(await a.requestDevice({...r,requiredFeatures:o}),n==="random"?new ue:new W,!0)}function Yn(t){let{device:e,unstable_names:r="random"}=t??{};return new It(e,r==="random"?new ue:new W,!1)}function Ne(t){return new Ir(t)}var Ir=class{constructor(e=void 0){this.defaultValue=e}[p]=!0;resourceType="slot";$name(e){return T(this,e),this}areEqual(e,r){return Object.is(e,r)}toString(){return`slot:${m(this)??"<unnamed>"}`}[D](e){return Pe(e,e.unwrap(this))}get value(){let e=j();if(!e)throw new Error("Cannot access tgpu.slot's value outside of resolution.");return this[D](e)}get $(){return this.value}};function Jn(t,e){return new Dr(t,e)}var Dr=class{constructor(e,r=void 0){this.schema=e;this.defaultValue=r;this.slot=Ne(r),this[h]=this.slot}[p]=!0;resourceType="accessor";slot;$name(e){return this.slot.$name(e),this}toString(){return`accessor:${m(this)??"<unnamed>"}`}[D](){return new Proxy({"~resolve":e=>e.resolve(this),toString:()=>`.value:${m(this)??"<unnamed>"}`,[b]:this.schema},k)}get value(){if(Te())return this[D]();throw new Error("`tgpu.accessor` relies on GPU resources and cannot be accessed outside of a compute dispatch or draw call")}get $(){return this.value}"~resolve"(e){let r=e.unwrap(this.slot);return Lr(r)||hr(r)?e.resolve(r):jt(r)?`${e.resolve(r)}()`:e.resolveValue(r,this.schema)}};function Xn(t){return Wa(t)}function Ma([t,e]){return`${m(t)??"<unnamed>"}=${e}`}function Wa(t){if(j())throw new Error("Cannot create tgpu.derived objects at the resolution stage.");return{resourceType:"derived","~compute":t,[Ft]:void 0,[Ut]:void 0,[D](r){return Pe(r,r.unwrap(this))},get value(){let r=j();if(!r)throw new Error("Cannot access tgpu.derived's value outside of resolution.");return this[D](r)},get $(){return this.value},with(r,n){return Zn(this,[[r,n]])},toString(){return"derived"}}}function Zn(t,e){return{resourceType:"derived",[Ft]:void 0,[Ut]:void 0,"~compute"(){throw new Error("'~compute' should never be read on bound derived items.")},[G]:{inner:t,pairs:e},[D](n){return Pe(n,n.unwrap(this))},get value(){let n=j();if(!n)throw new Error("Cannot access tgpu.derived's value outside of resolution.");return this[D](n)},get $(){return this.value},with(n,a){return Zn(t,[...e,[n,a]])},toString(){return`derived[${e.map(Ma).join(", ")}]`}}}function ea(t,e){return new Dt("private",t,e)}function ta(t){return new Dt("workgroup",t)}var Dt=class{[p]={};#e;#t;#r;constructor(e,r,n){this.#e=e,this.#t=r,this.#r=n}"~resolve"(e){let r=e.names.makeUnique(m(this));return this.#r?e.addDeclaration(`var<${this.#e}> ${r}: ${e.resolve(this.#t)} = ${e.resolveValue(this.#r,this.#t)};`):e.addDeclaration(`var<${this.#e}> ${r}: ${e.resolve(this.#t)};`),r}$name(e){return T(this,e),this}toString(){return`var:${m(this)??"<unnamed>"}`}[D](){return new Proxy({"~resolve":e=>e.resolve(this),toString:()=>`.value:${m(this)??"<unnamed>"}`,[b]:this.#t},k)}get $(){let e=ye(),r=ce();if(e.type==="normal")throw new Ct(r?`Cannot access variable '${m(this)??"<unnamed>"}'. TypeGPU functions that depends on GPU resources need to be part of a compute dispatch, draw call or simulation`:"TypeGPU variables are inaccessible during normal JS execution. If you wanted to simulate GPU behavior, try `tgpu.simulate()`");return e.type==="codegen"?this[D]():e.type==="simulate"?(e.vars[this.#e].has(this)||e.vars[this.#e].set(this,this.#r),e.vars[this.#e].get(this)):K(e,"tgpuVariable.ts#TgpuVarImpl/$")}set $(e){let r=ye(),n=ce();if(r.type==="normal")throw new Ct(n?`Cannot access ${String(this)}. TypeGPU functions that depends on GPU resources need to be part of a compute dispatch, draw call or simulation`:"TypeGPU variables are inaccessible during normal JS execution. If you wanted to simulate GPU behavior, try `tgpu.simulate()`");if(r.type==="codegen")throw new Error("Unreachable tgpuVariable.ts#TgpuVarImpl/$");if(r.type==="simulate"){r.vars[this.#e].set(this,e);return}K(r,"tgpuVariable.ts#TgpuVarImpl/$")}get value(){return this.$}set value(e){this.$=e}};var Na={fn:qt,bindGroupLayout:yt,vertexLayout:yr,slot:Ne,init:Kn,initFromDevice:Yn,resolve:kn,resolveWithContext:lr,"~unstable":{fn:qt,fragmentFn:yn,vertexFn:Tn,computeFn:gn,vertexLayout:yr,derived:Xn,slot:Ne,accessor:Jn,privateVar:ea,workgroupVar:ta,const:an,declare:sn,sampler:Rn,comparisonSampler:Cn,simulate:Mn}},vl=Na;export{ne as MissingBindGroupsError,Rt as MissingLinksError,Bt as MissingSlotValueError,Ie as MissingVertexBuffersError,At as NotUniformError,de as ResolutionError,vl as default,ee as isBuffer,hr as isBufferShorthand,$e as isComparisonSampler,qe as isDerived,Le as isSampledTextureView,Ve as isSampler,ze as isSlot,Ee as isStorageTextureView,N as isTexture,jt as isTgpuFn,_a as isUsableAsRender,nr as isUsableAsSampled,le as isUsableAsStorage,it as isUsableAsUniform,Va as isUsableAsVertex,Na as tgpu};
31
20
  //# sourceMappingURL=index.js.map