@luma.gl/webgpu 9.1.9 → 9.2.0-alpha.2

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 (100) hide show
  1. package/dist/adapter/helpers/accessor-to-format.js +1 -0
  2. package/dist/adapter/helpers/accessor-to-format.js.map +1 -1
  3. package/dist/adapter/helpers/get-bind-group.d.ts +3 -1
  4. package/dist/adapter/helpers/get-bind-group.d.ts.map +1 -1
  5. package/dist/adapter/helpers/get-bind-group.js +28 -10
  6. package/dist/adapter/helpers/get-bind-group.js.map +1 -1
  7. package/dist/adapter/helpers/get-vertex-buffer-layout.js +5 -5
  8. package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +1 -1
  9. package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
  10. package/dist/adapter/helpers/webgpu-parameters.js +89 -75
  11. package/dist/adapter/helpers/webgpu-parameters.js.map +1 -1
  12. package/dist/adapter/resources/webgpu-buffer.d.ts +13 -16
  13. package/dist/adapter/resources/webgpu-buffer.d.ts.map +1 -1
  14. package/dist/adapter/resources/webgpu-buffer.js +132 -93
  15. package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
  16. package/dist/adapter/resources/webgpu-command-buffer.d.ts +10 -0
  17. package/dist/adapter/resources/webgpu-command-buffer.d.ts.map +1 -0
  18. package/dist/adapter/resources/webgpu-command-buffer.js +18 -0
  19. package/dist/adapter/resources/webgpu-command-buffer.js.map +1 -0
  20. package/dist/adapter/resources/webgpu-command-encoder.d.ts +12 -5
  21. package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
  22. package/dist/adapter/resources/webgpu-command-encoder.js +28 -5
  23. package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
  24. package/dist/adapter/resources/webgpu-compute-pass.js +1 -1
  25. package/dist/adapter/resources/webgpu-compute-pass.js.map +1 -1
  26. package/dist/adapter/resources/webgpu-compute-pipeline.d.ts +2 -2
  27. package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
  28. package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
  29. package/dist/adapter/resources/webgpu-external-texture.d.ts +2 -2
  30. package/dist/adapter/resources/webgpu-external-texture.d.ts.map +1 -1
  31. package/dist/adapter/resources/webgpu-external-texture.js.map +1 -1
  32. package/dist/adapter/resources/webgpu-framebuffer.d.ts +3 -2
  33. package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
  34. package/dist/adapter/resources/webgpu-framebuffer.js +1 -0
  35. package/dist/adapter/resources/webgpu-framebuffer.js.map +1 -1
  36. package/dist/adapter/resources/webgpu-pipeline-layout.d.ts +2 -2
  37. package/dist/adapter/resources/webgpu-pipeline-layout.d.ts.map +1 -1
  38. package/dist/adapter/resources/webgpu-pipeline-layout.js +5 -2
  39. package/dist/adapter/resources/webgpu-pipeline-layout.js.map +1 -1
  40. package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
  41. package/dist/adapter/resources/webgpu-render-pass.js +11 -6
  42. package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
  43. package/dist/adapter/resources/webgpu-render-pipeline.d.ts +5 -4
  44. package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
  45. package/dist/adapter/resources/webgpu-render-pipeline.js +33 -20
  46. package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
  47. package/dist/adapter/resources/webgpu-sampler.js +1 -1
  48. package/dist/adapter/resources/webgpu-sampler.js.map +1 -1
  49. package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
  50. package/dist/adapter/resources/webgpu-shader.js +7 -8
  51. package/dist/adapter/resources/webgpu-shader.js.map +1 -1
  52. package/dist/adapter/resources/webgpu-texture-view.d.ts.map +1 -1
  53. package/dist/adapter/resources/webgpu-texture-view.js +15 -10
  54. package/dist/adapter/resources/webgpu-texture-view.js.map +1 -1
  55. package/dist/adapter/resources/webgpu-texture.d.ts +4 -37
  56. package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
  57. package/dist/adapter/resources/webgpu-texture.js +97 -126
  58. package/dist/adapter/resources/webgpu-texture.js.map +1 -1
  59. package/dist/adapter/resources/webgpu-vertex-array.d.ts +2 -2
  60. package/dist/adapter/resources/webgpu-vertex-array.d.ts.map +1 -1
  61. package/dist/adapter/resources/webgpu-vertex-array.js +2 -2
  62. package/dist/adapter/resources/webgpu-vertex-array.js.map +1 -1
  63. package/dist/adapter/webgpu-adapter.d.ts +2 -3
  64. package/dist/adapter/webgpu-adapter.d.ts.map +1 -1
  65. package/dist/adapter/webgpu-adapter.js +54 -43
  66. package/dist/adapter/webgpu-adapter.js.map +1 -1
  67. package/dist/adapter/webgpu-canvas-context.d.ts +7 -15
  68. package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
  69. package/dist/adapter/webgpu-canvas-context.js +50 -72
  70. package/dist/adapter/webgpu-canvas-context.js.map +1 -1
  71. package/dist/adapter/webgpu-device.d.ts +16 -27
  72. package/dist/adapter/webgpu-device.d.ts.map +1 -1
  73. package/dist/adapter/webgpu-device.js +48 -65
  74. package/dist/adapter/webgpu-device.js.map +1 -1
  75. package/dist/dist.dev.js +1919 -1520
  76. package/dist/dist.min.js +6 -5
  77. package/dist/index.cjs +1749 -1397
  78. package/dist/index.cjs.map +4 -4
  79. package/package.json +3 -3
  80. package/src/adapter/helpers/get-bind-group.ts +31 -11
  81. package/src/adapter/helpers/get-vertex-buffer-layout.ts +5 -5
  82. package/src/adapter/helpers/webgpu-parameters.ts +114 -102
  83. package/src/adapter/resources/webgpu-buffer.ts +163 -102
  84. package/src/adapter/resources/webgpu-command-buffer.ts +24 -0
  85. package/src/adapter/resources/webgpu-command-encoder.ts +34 -4
  86. package/src/adapter/resources/webgpu-compute-pass.ts +1 -1
  87. package/src/adapter/resources/webgpu-compute-pipeline.ts +2 -2
  88. package/src/adapter/resources/webgpu-external-texture.ts +2 -2
  89. package/src/adapter/resources/webgpu-framebuffer.ts +3 -2
  90. package/src/adapter/resources/webgpu-pipeline-layout.ts +8 -3
  91. package/src/adapter/resources/webgpu-render-pass.ts +11 -6
  92. package/src/adapter/resources/webgpu-render-pipeline.ts +39 -24
  93. package/src/adapter/resources/webgpu-sampler.ts +1 -1
  94. package/src/adapter/resources/webgpu-shader.ts +11 -8
  95. package/src/adapter/resources/webgpu-texture-view.ts +14 -8
  96. package/src/adapter/resources/webgpu-texture.ts +106 -186
  97. package/src/adapter/resources/webgpu-vertex-array.ts +2 -2
  98. package/src/adapter/webgpu-adapter.ts +72 -58
  99. package/src/adapter/webgpu-canvas-context.ts +62 -82
  100. package/src/adapter/webgpu-device.ts +66 -105
package/dist/dist.min.js CHANGED
@@ -4,10 +4,11 @@
4
4
  else if (typeof define === 'function' && define.amd) define([], factory);
5
5
  else if (typeof exports === 'object') exports['luma'] = factory();
6
6
  else root['luma'] = factory();})(globalThis, function () {
7
- var __exports__=(()=>{var Pe=Object.create;var W=Object.defineProperty;var Be=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Ge=Object.prototype.hasOwnProperty;var Te=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),De=(n,e)=>{for(var t in e)W(n,t,{get:e[t],enumerable:!0})},R=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ae(e))!Ge.call(n,i)&&i!==t&&W(n,i,{get:()=>e[i],enumerable:!(r=Be(e,i))||r.enumerable});return n},U=(n,e,t)=>(R(n,e,"default"),t&&R(t,e,"default")),h=(n,e,t)=>(t=n!=null?Pe(Le(n)):{},R(e||!n||!n.__esModule?W(t,"default",{value:n,enumerable:!0}):t,n)),_e=n=>R(W({},"__esModule",{value:!0}),n);var d=Te(($e,ne)=>{ne.exports=globalThis.luma});var O={};De(O,{WebGPUBuffer:()=>b,WebGPUDevice:()=>S,WebGPUSampler:()=>u,WebGPUShader:()=>P,WebGPUTexture:()=>E,webgpuAdapter:()=>we});U(O,h(d(),1));var f=h(d(),1);var I=h(d(),1);var F=h(d(),1);function Ie(n){return n.byteLength||n.data?.byteLength||0}var b=class extends F.Buffer{device;handle;byteLength;constructor(e,t){super(e,t),this.device=e,this.byteLength=Ie(t);let r=Boolean(t.data),i=Math.ceil(this.byteLength/4)*4;this.handle=this.props.handle||this.device.handle.createBuffer({size:i,usage:this.props.usage||GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:this.props.mappedAtCreation||r,label:this.props.id}),t.data&&this._writeMapped(t.data),r&&!t.mappedAtCreation&&this.handle.unmap()}destroy(){this.handle?.destroy(),this.handle=null}write(e,t=0){this.device.handle.queue.writeBuffer(this.handle,t,e.buffer,e.byteOffset,e.byteLength)}async readAsync(e=0,t=this.byteLength){let r=new b(this.device,{usage:F.Buffer.MAP_READ|F.Buffer.COPY_DST,byteLength:t}),i=this.device.handle.createCommandEncoder();i.copyBufferToBuffer(this.handle,e,r.handle,0,t),this.device.handle.queue.submit([i.finish()]),await r.handle.mapAsync(GPUMapMode.READ,e,t);let s=r.handle.getMappedRange().slice(0);return r.handle.unmap(),r.destroy(),new Uint8Array(s)}_writeMapped(e){let t=this.handle.getMappedRange();new e.constructor(t).set(e)}mapAsync(e,t=0,r){return this.handle.mapAsync(e,t,r)}getMappedRange(e=0,t){return this.handle.getMappedRange(e,t)}unmap(){this.handle.unmap()}};var v=h(d(),1);function C(n){if(n.includes("webgl"))throw new Error("webgl-only format");return n}var ie=h(d(),1),u=class extends ie.Sampler{device;handle;constructor(e,t){super(e,t),this.device=e;let r={...this.props,mipmapFilter:void 0};t.type!=="comparison-sampler"&&delete r.compare,t.mipmapFilter&&t.mipmapFilter!=="none"&&(r.mipmapFilter=t.mipmapFilter),this.handle=this.handle||this.device.handle.createSampler(r),this.handle.label=this.props.id}destroy(){this.handle=null}};var se=h(d(),1),G=class extends se.TextureView{device;handle;texture;constructor(e,t){super(e,t),this.device=e,this.texture=t.texture,this.handle=this.handle||this.texture.handle.createView({format:t.format||this.texture.format,dimension:t.dimension||this.texture.dimension,aspect:t.aspect,baseMipLevel:t.baseMipLevel,mipLevelCount:t.mipLevelCount,baseArrayLayer:t.baseArrayLayer,arrayLayerCount:t.arrayLayerCount}),this.handle.label=this.props.id}destroy(){this.handle=null}};var Oe={"1d":"1d","2d":"2d","2d-array":"2d",cube:"2d","cube-array":"2d","3d":"3d"},E=class extends v.Texture{device;handle;sampler;view;constructor(e,t){super(e,t),this.device=e;let r={...this.props};t.data&&(r.data=t.data),this.initialize(r)}destroy(){this.handle?.destroy(),this.handle=null}createView(e){return new G(this.device,{...e,texture:this})}initialize(e){this.handle=this.props.handle||this.createHandle(),this.handle.label||=this.id,this.props.data&&(v.Texture.isExternalImage(this.props.data)?this.copyExternalImage({image:this.props.data}):this.setData({data:this.props.data})),this.width=this.handle.width,this.height=this.handle.height,this.sampler=e.sampler instanceof u?e.sampler:new u(this.device,e.sampler||{}),this.view=new G(this.device,{...this.props,texture:this})}createHandle(){let e=this.props.width||this.props.data?.width||1,t=this.props.height||this.props.data?.height||1;return this.device.handle.createTexture({label:this.id,size:{width:e,height:t,depthOrArrayLayers:this.depth},usage:this.props.usage||v.Texture.TEXTURE|v.Texture.COPY_DST,dimension:Oe[this.dimension],format:C(this.format),mipLevelCount:this.mipLevels,sampleCount:this.props.samples})}createGPUTextureView(){return this.handle.createView({label:this.id})}setSampler(e){return this.sampler=e instanceof u?e:new u(this.device,e),this}setTexture1DData(e){throw new Error("not implemented")}setTexture2DData(e,t,r){throw new Error("not implemented")}setTexture3DData(e,t,r){throw new Error("not implemented")}setTextureCubeData(e,t){throw new Error("not implemented")}setTextureArrayData(e){throw new Error("not implemented")}setTextureCubeArrayData(e){throw new Error("not implemented")}setData(e){if(ArrayBuffer.isView(e.data)){let t=new Uint8ClampedArray(e.data.buffer),r=new ImageData(t,this.width,this.height);return this.copyExternalImage({image:r})}throw new Error("Texture.setData: Use CommandEncoder to upload data to texture in WebGPU")}copyExternalImage(e){let t=v.Texture.getExternalImageSize(e.image),r={...v.Texture.defaultCopyExternalImageOptions,...t,...e},{image:i,sourceX:s,sourceY:a,width:o,height:l,depth:p,mipLevel:g,x:c,y:L,z:Z,aspect:ve,colorSpace:Se,premultipliedAlpha:Ce,flipY:Ee}=r;return this.device.handle.queue.copyExternalImageToTexture({source:i,origin:[s,a],flipY:Ee},{texture:this.handle,origin:[c,L,Z],mipLevel:g,aspect:ve,colorSpace:Se,premultipliedAlpha:Ce},[o,l,p]),{width:o,height:l}}};var ae=h(d(),1);var M=class extends ae.ExternalTexture{device;handle;sampler;constructor(e,t){super(e,t),this.device=e,this.handle=this.props.handle||this.device.handle.importExternalTexture({source:t.source,colorSpace:t.colorSpace}),this.sampler=null}destroy(){this.handle=null}setSampler(e){return this.sampler=e instanceof u?e:new u(this.device,e),this}};var T=h(d(),1),P=class extends T.Shader{device;handle;constructor(e,t){super(e,t),this.device=e;let r=t.source.includes("#version");if(this.props.language==="glsl"||r)throw new Error("GLSL shaders are not supported in WebGPU");this.device.handle.pushErrorScope("validation"),this.handle=this.props.handle||this.device.handle.createShaderModule({code:t.source}),this.device.handle.popErrorScope().then(i=>{i&&T.log.error(`${this} creation failed:
8
- "${i.message}"`,this,this.props.source)()}),this.handle.label=this.props.id,this._checkCompilationError()}get asyncCompilationStatus(){return this.getCompilationInfo().then(()=>this.compilationStatus)}async _checkCompilationError(){let e=await this.getCompilationInfo(),t=Boolean(e.find(r=>r.type==="error"));this.compilationStatus=t?"error":"success",this.debugShader(),this.compilationStatus==="error"&&T.log.error("Shader compilation error",e)()}destroy(){this.handle=null}async getCompilationInfo(){return(await this.handle.getCompilationInfo()).messages}};var y=h(d(),1);var K=h(d(),1);function m(n){return n.depthStencil=n.depthStencil||{format:"depth24plus",stencilFront:{},stencilBack:{},depthWriteEnabled:!1,depthCompare:"less-equal"},n.depthStencil}function k(n){return m(n).stencilFront}function V(n){return m(n).stencilBack}var Re={cullMode:(n,e,t)=>{t.primitive=t.primitive||{},t.primitive.cullMode=e},frontFace:(n,e,t)=>{t.primitive=t.primitive||{},t.primitive.frontFace=e},depthWriteEnabled:(n,e,t)=>{let r=m(t);r.depthWriteEnabled=e},depthCompare:(n,e,t)=>{let r=m(t);r.depthCompare=e},depthFormat:(n,e,t)=>{let r=m(t);r.format=e},depthBias:(n,e,t)=>{let r=m(t);r.depthBias=e},depthBiasSlopeScale:(n,e,t)=>{let r=m(t);r.depthBiasSlopeScale=e},depthBiasClamp:(n,e,t)=>{let r=m(t);r.depthBiasClamp=e},stencilReadMask:(n,e,t)=>{let r=m(t);r.stencilReadMask=e},stencilWriteMask:(n,e,t)=>{let r=m(t);r.stencilWriteMask=e},stencilCompare:(n,e,t)=>{let r=k(t),i=V(t);r.compare=e,i.compare=e},stencilPassOperation:(n,e,t)=>{let r=k(t),i=V(t);r.passOp=e,i.passOp=e},stencilFailOperation:(n,e,t)=>{let r=k(t),i=V(t);r.failOp=e,i.failOp=e},stencilDepthFailOperation:(n,e,t)=>{let r=k(t),i=V(t);r.depthFailOp=e,i.depthFailOp=e},sampleCount:(n,e,t)=>{t.multisample=t.multisample||{},t.multisample.count=e},sampleMask:(n,e,t)=>{t.multisample=t.multisample||{},t.multisample.mask=e},sampleAlphaToCoverageEnabled:(n,e,t)=>{t.multisample=t.multisample||{},t.multisample.alphaToCoverageEnabled=e},colorMask:(n,e,t)=>{let r=oe(t);r[0].writeMask=e},blendColorOperation:(n,e,t)=>{oe(t)}},We={primitive:{cullMode:"back",topology:"triangle-list"},vertex:{module:void 0,entryPoint:"main"},fragment:{module:void 0,entryPoint:"main",targets:[]},layout:"auto"};function de(n,e={}){Object.assign(n,{...We,...n}),Ue(n,e)}function Ue(n,e){for(let[t,r]of Object.entries(e)){let i=Re[t];if(!i){K.log.warn(`Illegal parameter ${t}`)();continue}i(t,r,n)}}function oe(n){return n.fragment.targets=n.fragment?.targets||[],Array.isArray(n.fragment?.targets)||K.log.warn("parameters: no targets array")(),n.fragment?.targets?.length===0&&n.fragment.targets?.push({}),n.fragment?.targets}var x=h(d(),1);function $(n,e,t,r){let i=Fe(r,t);return n.createBindGroup({layout:e,entries:i})}function he(n,e){let t=n.bindings.find(r=>r.name===e||`${r.name.toLocaleLowerCase()}uniforms`===e.toLocaleLowerCase());return t||x.log.warn(`Binding ${e} not set: Not found in shader layout.`)(),t||null}function Fe(n,e){let t=[];for(let[r,i]of Object.entries(n)){let s=he(e,r);s&&t.push(le(i,s.location)),s=he(e,`${r}Sampler`),s&&t.push(le(i,s.location,{sampler:!0}))}return t}function le(n,e,t){if(n instanceof x.Buffer)return{binding:e,resource:{buffer:n.handle}};if(n instanceof x.Sampler)return{binding:e,resource:n.handle};if(n instanceof x.Texture)return t?.sampler?{binding:e,resource:n.sampler.handle}:{binding:e,resource:n.handle.createView({label:"bind-group-auto-created"})};throw new Error("invalid binding")}var B=h(d(),1);function ee(n){if(n.endsWith("-webgl"))throw new Error(`WebGPU does not support vertex format ${n}`);return n}function ue(n,e){let t=[],r=new Set;for(let i of e){let s=[],a="vertex",o=0,l=i.format;if(i.attributes)for(let p of i.attributes){let g=p.attribute,c=pe(n,g,r),L=c?.location;l=p.format||i.format,a=c?.stepMode||(c?.name.startsWith("instance")?"instance":"vertex"),s.push({format:ee(l),offset:p.byteOffset,shaderLocation:L}),o+=(0,B.decodeVertexFormat)(l).byteLength}else{let p=pe(n,i.name,r);if(!p)continue;o=(0,B.decodeVertexFormat)(l).byteLength,a=p.stepMode||(p.name.startsWith("instance")?"instance":"vertex"),s.push({format:ee(l),offset:0,shaderLocation:p.location})}t.push({arrayStride:i.byteStride||o,stepMode:a,attributes:s})}for(let i of n.attributes)r.has(i.name)||t.push({arrayStride:(0,B.decodeVertexFormat)("float32x3").byteLength,stepMode:i.stepMode||(i.name.startsWith("instance")?"instance":"vertex"),attributes:[{format:ee("float32x3"),offset:0,shaderLocation:i.location}]});return t.sort((i,s)=>{let a=Math.min(...Array.from(i.attributes,l=>l.shaderLocation)),o=Math.min(...Array.from(s.attributes,l=>l.shaderLocation));return a-o}),t}function pe(n,e,t){let r=n.attributes.find(i=>i.name===e);if(!r)return B.log.warn(`Unknown attribute ${e}`)(),null;if(t){if(t.has(e))throw new Error(`Found multiple entries for attribute: ${e}`);t.add(e)}return r}var z=class extends y.RenderPipeline{device;handle;vs;fs=null;_bindings;_bindGroupLayout=null;_bindGroup=null;constructor(e,t){if(super(e,t),this.device=e,this.handle=this.props.handle,!this.handle){let r=this._getRenderPipelineDescriptor();y.log.groupCollapsed(1,`new WebGPURenderPipeline(${this.id})`)(),y.log.probe(1,JSON.stringify(r,null,2))(),y.log.groupEnd(1)(),this.device.handle.pushErrorScope("validation"),this.handle=this.device.handle.createRenderPipeline(r),this.device.handle.popErrorScope().then(i=>{i&&y.log.error(`${this} creation failed:
9
- "${i.message}"`,this,this.props.vs?.source)()})}this.handle.label=this.props.id,this.vs=t.vs,this.fs=t.fs,this._bindings={...this.props.bindings}}destroy(){this.handle=null}setBindings(e){Object.assign(this._bindings,e)}draw(e){let t=e.renderPass;this.device.handle.pushErrorScope("validation"),t.handle.setPipeline(this.handle),this.device.handle.popErrorScope().then(i=>{i&&y.log.error(`${this} setPipeline failed:
10
- "${i.message}"`,this)()});let r=this._getBindGroup();return r&&t.handle.setBindGroup(0,r),e.vertexArray.bindBeforeRender(e.renderPass),e.indexCount?t.handle.drawIndexed(e.indexCount,e.instanceCount,e.firstIndex,e.baseVertex,e.firstInstance):t.handle.draw(e.vertexCount||0,e.instanceCount||1,e.firstInstance),e.vertexArray.unbindAfterRender(e.renderPass),!0}_getBindGroup(){return this.shaderLayout.bindings.length===0?null:(this._bindGroupLayout=this._bindGroupLayout||this.handle.getBindGroupLayout(0),this._bindGroup=this._bindGroup||$(this.device.handle,this._bindGroupLayout,this.shaderLayout,this._bindings),this._bindGroup)}_getRenderPipelineDescriptor(){let e={module:this.props.vs.handle,entryPoint:this.props.vertexEntryPoint||"main",buffers:ue(this.shaderLayout,this.props.bufferLayout)},t={module:this.props.fs.handle,entryPoint:this.props.fragmentEntryPoint||"main",targets:[{format:C(this.device.getCanvasContext().format)}]},r=this.device.createPipelineLayout({shaderLayout:this.shaderLayout}),i={vertex:e,fragment:t,primitive:{topology:this.props.topology},layout:r.handle};return this.props.parameters.depthWriteEnabled&&this.props.parameters.depthCompare&&(i.depthStencil={format:"depth24plus",depthWriteEnabled:this.props.parameters.depthWriteEnabled,depthCompare:this.props.parameters.depthCompare}),de(i,this.props.parameters),i}};var ce=h(d(),1),A=class extends ce.Framebuffer{device;colorAttachments=[];depthStencilAttachment=null;constructor(e,t){super(e,t),this.device=e,this.autoCreateAttachmentTextures()}updateAttachments(){}};var me=h(d(),1);var q=class extends me.ComputePipeline{device;handle;_bindGroupLayout=null;_bindGroup=null;_bindings={};constructor(e,t){super(e,t),this.device=e;let r=this.props.shader;this.handle=this.props.handle||this.device.handle.createComputePipeline({label:this.props.id,compute:{module:r.handle,entryPoint:this.props.entryPoint,constants:this.props.constants},layout:"auto"})}setBindings(e){Object.assign(this._bindings,e)}_getBindGroup(){return this._bindGroupLayout=this._bindGroupLayout||this.handle.getBindGroupLayout(0),this._bindGroup=this._bindGroup||$(this.device.handle,this._bindGroupLayout,this.shaderLayout,this._bindings),this._bindGroup}};var w=h(d(),1),Q=class extends w.RenderPass{device;handle;pipeline=null;constructor(e,t={}){super(e,t),this.device=e;let r=t.framebuffer||e.getCanvasContext().getCurrentFramebuffer(),i=this.getRenderPassDescriptor(r),s=t.timestampQuerySet;if(s&&(i.occlusionQuerySet=s.handle),e.features.has("timestamp-query")){let a=t.timestampQuerySet;i.timestampWrites=a?{querySet:a.handle,beginningOfPassWriteIndex:t.beginTimestampIndex,endOfPassWriteIndex:t.endTimestampIndex}:void 0}if(!e.commandEncoder)throw new Error("commandEncoder not available");this.device.handle.pushErrorScope("validation"),this.handle=this.props.handle||e.commandEncoder.beginRenderPass(i),this.device.handle.popErrorScope().then(a=>{a&&w.log.error(`${this} creation failed:
11
- "${a.message}"`,this)()}),this.handle.label=this.props.id,w.log.groupCollapsed(3,`new WebGPURenderPass(${this.id})`)(),w.log.probe(3,JSON.stringify(i,null,2))(),w.log.groupEnd(3)()}destroy(){}end(){this.handle.end()}setPipeline(e){this.pipeline=e,this.handle.setPipeline(this.pipeline.handle)}setBindings(e){this.pipeline?.setBindings(e);let t=this.pipeline?._getBindGroup();t&&this.handle.setBindGroup(0,t)}setIndexBuffer(e,t,r=0,i){this.handle.setIndexBuffer(e.handle,t,r,i)}setVertexBuffer(e,t,r=0){this.handle.setVertexBuffer(e,t.handle,r)}draw(e){e.indexCount?this.handle.drawIndexed(e.indexCount,e.instanceCount,e.firstIndex,e.baseVertex,e.firstInstance):this.handle.draw(e.vertexCount||0,e.instanceCount||1,e.firstIndex,e.firstInstance)}drawIndirect(){}setParameters(e){let{blendConstant:t,stencilReference:r,scissorRect:i,viewport:s}=e;t&&this.handle.setBlendConstant(t),r&&this.handle.setStencilReference(r),i&&this.handle.setScissorRect(i[0],i[1],i[2],i[3]),s&&this.handle.setViewport(s[0],s[1],s[2],s[3],s[4]??0,s[5]??1)}pushDebugGroup(e){this.handle.pushDebugGroup(e)}popDebugGroup(){this.handle.popDebugGroup()}insertDebugMarker(e){this.handle.insertDebugMarker(e)}beginOcclusionQuery(e){this.handle.beginOcclusionQuery(e)}endOcclusionQuery(){this.handle.endOcclusionQuery()}getRenderPassDescriptor(e){let t={colorAttachments:[]};if(t.colorAttachments=e.colorAttachments.map((r,i)=>({loadOp:this.props.clearColor!==!1?"clear":"load",clearValue:Me(this.props.clearColors?.[i]||this.props.clearColor||w.RenderPass.defaultClearColor),storeOp:this.props.discard?"discard":"store",view:r.handle})),e.depthStencilAttachment){t.depthStencilAttachment={view:e.depthStencilAttachment.handle};let{depthStencilAttachment:r}=t;this.props.depthReadOnly&&(r.depthReadOnly=!0),this.props.clearDepth!==!1&&(r.depthClearValue=this.props.clearDepth),!0&&(r.depthLoadOp=this.props.clearDepth!==!1?"clear":"load",r.depthStoreOp="store"),!1&&(r.stencilLoadOp=this.props.clearStencil!==!1?"clear":"load",r.stencilStoreOp="store")}return t}};function Me(n){return{r:n[0],g:n[1],b:n[2],a:n[3]}}var fe=h(d(),1),N=class extends fe.ComputePass{device;handle;_webgpuPipeline=null;constructor(e,t){super(e,t),this.device=e;let r;if(e.features.has("timestamp-query")){let i=t.timestampQuerySet;i&&(r={querySet:i.handle,beginningOfPassWriteIndex:t.beginTimestampIndex,endOfPassWriteIndex:t.endTimestampIndex})}this.handle=this.props.handle||e.commandEncoder?.beginComputePass({label:this.props.id,timestampWrites:r})}destroy(){}end(){this.handle.end()}setPipeline(e){let t=e;this.handle.setPipeline(t.handle),this._webgpuPipeline=t,this.setBindings([])}setBindings(e){let t=this._webgpuPipeline._getBindGroup();this.handle.setBindGroup(0,t)}dispatch(e,t,r){this.handle.dispatchWorkgroups(e,t,r)}dispatchIndirect(e,t=0){let r=e;this.handle.dispatchWorkgroupsIndirect(r.handle,t)}pushDebugGroup(e){this.handle.pushDebugGroup(e)}popDebugGroup(){this.handle.popDebugGroup()}insertDebugMarker(e){this.handle.insertDebugMarker(e)}};var D=h(d(),1);var ct=globalThis.document||{},mt=globalThis.process||{},ft=globalThis.console,ge=globalThis.navigator||{};function j(n){if(typeof window<"u"&&window.process?.type==="renderer"||typeof process<"u"&&Boolean(process.versions?.electron))return!0;let e=typeof navigator<"u"&&navigator.userAgent,t=n||e;return Boolean(t&&t.indexOf("Electron")>=0)}function be(){return!(typeof process=="object"&&String(process)==="[object process]"&&!process?.browser)||j()}function te(n){return!n&&!be()?"Node":j(n)?"Electron":(n||ge.userAgent||"").indexOf("Edge")>-1?"Edge":globalThis.chrome?"Chrome":globalThis.safari?"Safari":globalThis.mozInnerScreenX?"Firefox":"Unknown"}var Y=class extends D.VertexArray{get[Symbol.toStringTag](){return"WebGPUVertexArray"}device;handle;constructor(e,t){super(e,t),this.device=e}destroy(){}setIndexBuffer(e){this.indexBuffer=e}setBuffer(e,t){this.attributes[e]=t}bindBeforeRender(e,t,r){let i=e,s=this.indexBuffer;s?.handle&&(D.log.info(3,"setting index buffer",s?.handle,s?.indexType)(),i.handle.setIndexBuffer(s?.handle,s?.indexType));for(let a=0;a<this.maxVertexAttributes;a++){let o=this.attributes[a];o?.handle&&(D.log.info(3,`setting vertex buffer ${a}`,o?.handle)(),i.handle.setVertexBuffer(a,o?.handle))}}unbindAfterRender(e){}static isConstantAttributeZeroSupported(e){return te()==="Chrome"}};var X=h(d(),1);var _=class extends X.CanvasContext{device;gpuCanvasContext;format=navigator.gpu.getPreferredCanvasFormat();depthStencilFormat="depth24plus";depthStencilAttachment=null;get[Symbol.toStringTag](){return"WebGPUCanvasContext"}constructor(e,t,r){super(r),this.device=e,this.width=-1,this.height=-1,this._setAutoCreatedCanvasId(`${this.device.id}-canvas`),this.gpuCanvasContext=this.canvas.getContext("webgpu"),this.format="bgra8unorm"}destroy(){this.gpuCanvasContext.unconfigure()}getCurrentFramebuffer(){this.update();let e=this.getCurrentTexture();return this.width=e.width,this.height=e.height,this._createDepthStencilAttachment(),new A(this.device,{colorAttachments:[e],depthStencilAttachment:this.depthStencilAttachment})}update(){let e=this.width,t=this.height,[r,i]=this.getPixelSize();(r!==e||i!==t)&&(this.width=r,this.height=i,this.depthStencilAttachment&&(this.depthStencilAttachment.destroy(),this.depthStencilAttachment=null),this.gpuCanvasContext.configure({device:this.device.handle,format:C(this.format),colorSpace:this.props.colorSpace,alphaMode:this.props.alphaMode}),X.log.log(1,`${this} Resized ${e}x${t} => ${r}x${i}px`)())}resize(e){if(this.update(),!!this.device.handle&&this.canvas){let t=this.getDevicePixelRatio(e?.useDevicePixels);this.setDevicePixelRatio(t,e);return}}getCurrentTexture(){return this.device.createTexture({id:`${this.id}#color-texture`,handle:this.gpuCanvasContext.getCurrentTexture(),format:this.format})}_createDepthStencilAttachment(){return this.depthStencilAttachment||(this.depthStencilAttachment=this.device.createTexture({id:`${this.id}#depth-stencil-texture`,format:this.depthStencilFormat,width:this.width,height:this.height,usage:GPUTextureUsage.RENDER_ATTACHMENT})),this.depthStencilAttachment}};var xe=h(d(),1),H=class extends xe.QuerySet{device;handle;constructor(e,t){super(e,t),this.device=e,this.handle=this.props.handle||this.device.handle.createQuerySet({type:this.props.type,count:this.props.count}),this.handle.label=this.props.id}destroy(){this.handle?.destroy(),this.handle=null}};var ye=h(d(),1),J=class extends ye.PipelineLayout{device;handle;constructor(e,t){super(e,t),this.device=e;let r=this.mapShaderLayoutToBindGroupEntries();this.handle=this.device.handle.createPipelineLayout({label:t?.id??"unnamed-pipeline-layout",bindGroupLayouts:[this.device.handle.createBindGroupLayout({label:"bind-group-layout",entries:r})]})}destroy(){this.handle=null}mapShaderLayoutToBindGroupEntries(){let e=[];for(let t=0;t<this.props.shaderLayout.bindings.length;t++){let r=this.props.shaderLayout.bindings[t],i={};switch(r.type){case"uniform":{i.buffer={type:"uniform",hasDynamicOffset:r.hasDynamicOffset,minBindingSize:r.minBindingSize};break}case"read-only-storage":{i.buffer={type:"read-only-storage",hasDynamicOffset:r.hasDynamicOffset,minBindingSize:r.minBindingSize};break}case"sampler":{i.sampler={type:r.samplerType};break}case"storage":{ke(r)?i.storageTexture={format:r.format,access:r.access,viewDimension:r.viewDimension}:i.buffer={type:"storage",hasDynamicOffset:r.hasDynamicOffset,minBindingSize:r.minBindingSize};break}case"texture":{i.texture={multisampled:r.multisampled,sampleType:r.sampleType,viewDimension:r.viewDimension};break}default:console.warn("unhandled binding type when creating pipeline descriptor")}let s=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE;e.push({binding:r.location,visibility:r.visibility||s,...i})}return e}},ke=n=>n.format!==void 0;var S=class extends I.Device{type="webgpu";handle;adapter;adapterInfo;features;info;limits;lost;canvasContext=null;_isLost=!1;commandEncoder=null;renderPass=null;constructor(e,t,r,i){super({...e,id:e.id||"webgpu-device"}),this.handle=t,this.adapter=r,this.adapterInfo=i,this.info=this._getInfo(),this.features=this._getFeatures(),this.limits=this.handle.limits,t.addEventListener("uncapturederror",a=>{let o=a instanceof GPUUncapturedErrorEvent?a.error.message:"Unknown WebGPU error";if(this.reportError(new Error(o)),this.props.debug)debugger;a.preventDefault()}),this.lost=new Promise(async a=>{let o=await this.handle.lost;this._isLost=!0,a({reason:"destroyed",message:o.message})});let s=I.Device._getCanvasContextProps(e);s&&(this.canvasContext=new _(this,this.adapter,s))}destroy(){this.handle.destroy()}get isLost(){return this._isLost}createBuffer(e){let t=this._normalizeBufferProps(e);return new b(this,t)}createTexture(e){return new E(this,e)}createExternalTexture(e){return new M(this,e)}createShader(e){return new P(this,e)}createSampler(e){return new u(this,e)}createRenderPipeline(e){return new z(this,e)}createFramebuffer(e){return new A(this,e)}createComputePipeline(e){return new q(this,e)}createVertexArray(e){return new Y(this,e)}beginRenderPass(e){return this.commandEncoder=this.commandEncoder||this.handle.createCommandEncoder(),new Q(this,e)}beginComputePass(e){return this.commandEncoder=this.commandEncoder||this.handle.createCommandEncoder(),new N(this,e)}createTransformFeedback(e){throw new Error("Transform feedback not supported in WebGPU")}createQuerySet(e){return new H(this,e)}createCanvasContext(e){return new _(this,this.adapter,e)}createPipelineLayout(e){return new J(this,e)}submit(){let e=this.commandEncoder?.finish();e&&(this.handle.pushErrorScope("validation"),this.handle.queue.submit([e]),this.handle.popErrorScope().then(t=>{t&&this.reportError(new Error(`WebGPU command submission failed: ${t.message}`))}))}_getInfo(){let[e,t]=(this.adapterInfo.driver||"").split(" Version "),r=this.adapterInfo.vendor||this.adapter.__brand||"unknown",i=e||"",s=t||"",a=r==="apple"?"apple":"unknown",o=this.adapterInfo.architecture||"unknown",l=this.adapterInfo.backend||"unknown",p=(this.adapterInfo.type||"").split(" ")[0].toLowerCase()||"unknown";return{type:"webgpu",vendor:r,renderer:i,version:s,gpu:a,gpuType:p,gpuBackend:l,gpuArchitecture:o,shadingLanguage:"wgsl",shadingLanguageVersion:100}}_getFeatures(){let e=new Set(this.handle.features);e.has("depth-clamping")&&(e.delete("depth-clamping"),e.add("depth-clip-control")),e.has("texture-compression-bc")&&e.add("texture-compression-bc5-webgl");let t=["timer-query-webgl","compilation-status-async-webgl","float32-renderable-webgl","float16-renderable-webgl","norm16-renderable-webgl","texture-filterable-anisotropic-webgl","shader-noperspective-interpolation-webgl"];for(let r of t)e.add(r);return new I.DeviceFeatures(Array.from(e),this.props._disabledFeatures)}_getDeviceSpecificTextureFormatCapabilities(e){let{format:t}=e;return t.includes("webgl")?{format:t,create:!1,render:!1,filter:!1,blend:!1,store:!1}:e}copyExternalImageToTexture(e){let{source:t,sourceX:r=0,sourceY:i=0,texture:s,mipLevel:a=0,aspect:o="all",colorSpace:l="display-p3",premultipliedAlpha:p=!1,width:g=s.width,height:c=s.height,depth:L=1}=e,Z=s;this.handle?.queue.copyExternalImageToTexture({source:t,origin:[r,i]},{texture:Z.handle,origin:[0,0,0],mipLevel:a,aspect:o,colorSpace:l,premultipliedAlpha:p},[g,c,L])}};var re=class extends f.Adapter{type="webgpu";constructor(){super(),S.adapter=this}isSupported(){return Boolean(typeof navigator<"u"&&navigator.gpu)}async create(e){if(!navigator.gpu)throw new Error("WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu");f.log.groupCollapsed(1,"WebGPUDevice created")();let t=await navigator.gpu.requestAdapter({powerPreference:"high-performance"});if(!t)throw new Error("Failed to request WebGPU adapter");let r=t.info||await t.requestAdapterInfo?.();f.log.probe(2,"Adapter available",r)();let i=[],s={};if(e._requestMaxLimits){i.push(...Array.from(t.features));let l=Object.keys(t.limits).filter(p=>!["minSubgroupSize","maxSubgroupSize"].includes(p));for(let p of l){let g=p,c=t.limits[g];typeof c=="number"&&(s[g]=c)}}let a=await t.requestDevice({requiredFeatures:i,requiredLimits:s});f.log.probe(1,"GPUDevice available")();let o=new S(e,a,t,r);return f.log.probe(1,"Device created. For more info, set chrome://flags/#enable-webgpu-developer-features")(),f.log.table(1,o.info)(),f.log.groupEnd(1)(),o}async attach(e){throw new Error("WebGPUAdapter.attach() not implemented")}},we=new re;return _e(O);})();
7
+ "use strict";var __exports__=(()=>{var rt=Object.create;var k=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var st=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty;var d=(i,e)=>()=>(i&&(e=i(i=0)),e);var at=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),ge=(i,e)=>{for(var t in e)k(i,t,{get:e[t],enumerable:!0})},U=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of nt(e))!ot.call(i,n)&&n!==t&&k(i,n,{get:()=>e[n],enumerable:!(r=it(e,n))||r.enumerable});return i},V=(i,e,t)=>(U(i,e,"default"),t&&U(t,e,"default")),p=(i,e,t)=>(t=i!=null?rt(st(i)):{},U(e||!i||!i.__esModule?k(t,"default",{value:i,enumerable:!0}):t,i)),dt=i=>U(k({},"__esModule",{value:!0}),i);var h=at((gt,be)=>{be.exports=globalThis.luma});var g,v,se=d(()=>{"use strict";g=p(h(),1),v=class extends g.Buffer{device;handle;byteLength;constructor(e,t){super(e,t),this.device=e,this.byteLength=t.byteLength||t.data?.byteLength||0;let r=Boolean(this.props.onMapped||t.data),n=Math.ceil(this.byteLength/4)*4;if(this.device.pushErrorScope("out-of-memory"),this.device.pushErrorScope("validation"),this.handle=this.props.handle||this.device.handle.createBuffer({label:this.props.id,usage:this.props.usage||GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,mappedAtCreation:r,size:n}),this.device.popErrorScope(s=>{this.device.reportError(new Error(`${this} creation failed ${s.message}`),this)(),this.device.debug()}),this.device.popErrorScope(s=>{this.device.reportError(new Error(`${this} out of memory: ${s.message}`),this)(),this.device.debug()}),this.device.pushErrorScope("validation"),t.data||t.onMapped)try{let s=this.handle.getMappedRange();if(t.data){let o=t.data;new o.constructor(s).set(o)}else t.onMapped?.(s,"mapped")}finally{this.handle.unmap()}this.device.popErrorScope(s=>{this.device.reportError(new Error(`${this} creation failed ${s.message}`),this)(),this.device.debug()})}destroy(){this.handle?.destroy(),this.handle=null}write(e,t=0){let r=ArrayBuffer.isView(e)?e.buffer:e,n=ArrayBuffer.isView(e)?e.byteOffset:0;this.device.pushErrorScope("validation"),this.device.handle.queue.writeBuffer(this.handle,t,r,n,e.byteLength),this.device.popErrorScope(s=>{this.device.reportError(new Error(`${this}.write() ${s.message}`),this)(),this.device.debug()})}async mapAndWriteAsync(e,t=0,r=this.byteLength-t){let s=(this.usage&g.Buffer.MAP_WRITE)!==0?null:this._getMappableBuffer(g.Buffer.MAP_WRITE|g.Buffer.COPY_SRC,0,this.byteLength),o=s||this;this.device.pushErrorScope("validation");try{await this.device.handle.queue.onSubmittedWorkDone(),await o.handle.mapAsync(GPUMapMode.WRITE,t,r);let a=o.handle.getMappedRange(t,r);await e(a,"mapped"),o.handle.unmap(),s&&this._copyBuffer(s,t,r)}finally{this.device.popErrorScope(a=>{this.device.reportError(new Error(`${this}.mapAndWriteAsync() ${a.message}`),this)(),this.device.debug()}),s?.destroy()}}async readAsync(e=0,t=this.byteLength-e){return this.mapAndReadAsync(r=>new Uint8Array(r.slice(0)),e,t)}async mapAndReadAsync(e,t=0,r=this.byteLength-t){if(t%8!==0||r%4!==0)throw new Error("byteOffset must be multiple of 8 and byteLength multiple of 4");if(t+r>this.handle.size)throw new Error("Mapping range exceeds buffer size");let s=(this.usage&g.Buffer.MAP_READ)!==0?null:this._getMappableBuffer(g.Buffer.MAP_READ|g.Buffer.COPY_DST,0,this.byteLength),o=s||this;this.device.pushErrorScope("validation");try{await this.device.handle.queue.onSubmittedWorkDone(),s&&s._copyBuffer(this),await o.handle.mapAsync(GPUMapMode.READ,t,r);let a=o.handle.getMappedRange(t,r),l=await e(a,"mapped");return o.handle.unmap(),l}finally{this.device.popErrorScope(a=>{this.device.reportError(new Error(`${this}.mapAndReadAsync() ${a.message}`),this)(),this.device.debug()}),s?.destroy()}}readSyncWebGL(e,t){throw new Error("Not implemented")}_getMappableBuffer(e,t,r){return g.log.warn(`${this} is not readable, creating a temporary Buffer`),new v(this.device,{usage:e,byteLength:r})}_copyBuffer(e,t=0,r=this.byteLength){this.device.pushErrorScope("validation");let n=this.device.handle.createCommandEncoder();n.copyBufferToBuffer(e.handle,t,this.handle,t,r),this.device.handle.queue.submit([n.finish()]),this.device.popErrorScope(s=>{this.device.reportError(new Error(`${this}._getReadableBuffer() ${s.message}`),this)(),this.device.debug()})}}});function E(i){if(i.includes("webgl"))throw new Error("webgl-only format");return i}var oe=d(()=>{"use strict"});var ye,u,D=d(()=>{"use strict";ye=p(h(),1),u=class extends ye.Sampler{device;handle;constructor(e,t){super(e,t),this.device=e;let r={...this.props,mipmapFilter:void 0};t.type!=="comparison-sampler"&&delete r.compare,t.mipmapFilter&&t.mipmapFilter!=="none"&&(r.mipmapFilter=t.mipmapFilter),this.handle=t.handle||this.device.handle.createSampler(r),this.handle.label=this.props.id}destroy(){this.handle=null}}});var ve,I,we=d(()=>{"use strict";ve=p(h(),1),I=class extends ve.TextureView{device;handle;texture;constructor(e,t){super(e,t),this.device=e,this.texture=t.texture,this.device.pushErrorScope("validation"),this.handle=this.texture.handle.createView({format:this.props.format||this.texture.format,dimension:this.props.dimension||this.texture.dimension,aspect:this.props.aspect,baseMipLevel:this.props.baseMipLevel,mipLevelCount:this.props.mipLevelCount,baseArrayLayer:this.props.baseArrayLayer,arrayLayerCount:this.props.arrayLayerCount}),this.device.popErrorScope(r=>{this.device.reportError(new Error(`TextureView constructor: ${r.message}`),this)(),this.device.debug()}),this.handle.label=this.props.id}destroy(){this.handle=null}}});var B,P,ae=d(()=>{"use strict";B=p(h(),1);oe();D();we();P=class extends B.Texture{device;handle;sampler;view;constructor(e,t){super(e,t),this.device=e,this.dimension==="cube"&&(this.depth=6),this.device.pushErrorScope("out-of-memory"),this.device.pushErrorScope("validation"),this.handle=this.props.handle||this.device.handle.createTexture({label:this.id,size:{width:this.width,height:this.height,depthOrArrayLayers:this.depth},usage:this.props.usage||B.Texture.TEXTURE|B.Texture.COPY_DST,dimension:this.baseDimension,format:E(this.format),mipLevelCount:this.mipLevels,sampleCount:this.props.samples}),this.device.popErrorScope(r=>{this.device.reportError(new Error(`${this} constructor: ${r.message}`),this)(),this.device.debug()}),this.device.popErrorScope(r=>{this.device.reportError(new Error(`${this} out of memory: ${r.message}`),this)(),this.device.debug()}),this.props.handle&&(this.handle.label||=this.id,this.width=this.handle.width,this.height=this.handle.height),this.sampler=t.sampler instanceof u?t.sampler:new u(this.device,t.sampler||{}),this.view=new I(this.device,{...this.props,texture:this,mipLevelCount:this.mipLevels,arrayLayerCount:this.dimension!=="3d"?this.depth:1}),this._initializeData(t.data)}destroy(){this.handle?.destroy(),this.handle=null}createView(e){return new I(this.device,{...e,texture:this})}copyImageData(e){let{width:t,height:r,depth:n}=this,s=this._normalizeCopyImageDataOptions(e);this.device.pushErrorScope("validation"),this.device.handle.queue.writeTexture({texture:this.handle,mipLevel:s.mipLevel,aspect:s.aspect,origin:[s.x,s.y,s.z]},s.data,{offset:s.byteOffset,bytesPerRow:s.bytesPerRow,rowsPerImage:s.rowsPerImage},[t,r,n]),this.device.popErrorScope(o=>{this.device.reportError(new Error(`copyImageData: ${o.message}`),this)(),this.device.debug()})}copyExternalImage(e){let t=this._normalizeCopyExternalImageOptions(e);return this.device.pushErrorScope("validation"),this.device.handle.queue.copyExternalImageToTexture({source:t.image,origin:[t.sourceX,t.sourceY],flipY:t.flipY},{texture:this.handle,origin:[t.x,t.y,0],mipLevel:t.mipLevel,aspect:t.aspect,colorSpace:t.colorSpace,premultipliedAlpha:t.premultipliedAlpha},[t.width,t.height,1]),this.device.popErrorScope(r=>{this.device.reportError(new Error(`copyExternalImage: ${r.message}`),this)(),this.device.debug()}),{width:t.width,height:t.height}}generateMipmapsWebGL(){B.log.warn(`${this}: generateMipmaps not supported in WebGPU`)()}}});var xe,z,Se=d(()=>{"use strict";xe=p(h(),1);D();z=class extends xe.ExternalTexture{device;handle;sampler;constructor(e,t){super(e,t),this.device=e,this.handle=this.props.handle||this.device.handle.importExternalTexture({source:t.source,colorSpace:t.colorSpace}),this.sampler=null}destroy(){this.handle=null}setSampler(e){return this.sampler=e instanceof u?e:new u(this.device,e),this}}});var Ee,C,de=d(()=>{"use strict";Ee=p(h(),1),C=class extends Ee.Shader{device;handle;constructor(e,t){super(e,t),this.device=e;let r=t.source.includes("#version");if(this.props.language==="glsl"||r)throw new Error("GLSL shaders are not supported in WebGPU");this.device.pushErrorScope("validation"),this.handle=this.props.handle||this.device.handle.createShaderModule({code:t.source}),this.device.popErrorScope(n=>{this.device.reportError(new Error(`${this} creation failed:
8
+ "${n.message}"`),this,this.props.source)(),this.device.debug()}),this.handle.label=this.props.id,this._checkCompilationError()}get asyncCompilationStatus(){return this.getCompilationInfo().then(()=>this.compilationStatus)}async _checkCompilationError(){let e=await this.getCompilationInfo(),t=Boolean(e.find(r=>r.type==="error"));this.compilationStatus=t?"error":"success",this.debugShader(),this.compilationStatus==="error"&&(this.device.reportError(new Error("Shader compilation error"),this,e)(),this.device.debug())}destroy(){this.handle=null}async getCompilationInfo(){return(await this.handle.getCompilationInfo()).messages}}});function b(i){return i.depthStencil=i.depthStencil||{format:"depth24plus",stencilFront:{},stencilBack:{},depthWriteEnabled:!1,depthCompare:"less-equal"},i.depthStencil}function q(i){return b(i).stencilFront}function Q(i){return b(i).stencilBack}function f(i,e,t){N.log.warn(`${i} parameter not supported in WebGPU`)()}function Be(i,e={}){Object.assign(i,{...pt,...i}),lt(i,e)}function lt(i,e){for(let[t,r]of Object.entries(e)){let n=ht[t];n?n(t,r,i):N.log.error(`Illegal parameter ${t} in WebGPU`)()}}function Pe(i,e){return i.fragment.targets=i.fragment?.targets||[],Array.isArray(i.fragment?.targets)||N.log.warn("parameters: no targets array")(),i.fragment?.targets?.length===0&&i.fragment.targets?.push({}),i.fragment?.targets?.[0]}function w(i,e){let t=Pe(i,e);return t.blend=t.blend||{color:{},alpha:{}},t.blend}var N,ht,pt,Ce=d(()=>{"use strict";N=p(h(),1);ht={cullMode:(i,e,t)=>{t.primitive=t.primitive||{},t.primitive.cullMode=e},frontFace:(i,e,t)=>{t.primitive=t.primitive||{},t.primitive.frontFace=e},depthWriteEnabled:(i,e,t)=>{if(e){let r=b(t);r.depthWriteEnabled=e}},depthCompare:(i,e,t)=>{let r=b(t);r.depthCompare=e},depthFormat:(i,e,t)=>{let r=b(t);r.format=e},depthBias:(i,e,t)=>{let r=b(t);r.depthBias=e},depthBiasSlopeScale:(i,e,t)=>{let r=b(t);r.depthBiasSlopeScale=e},depthBiasClamp:(i,e,t)=>{let r=b(t);r.depthBiasClamp=e},stencilReadMask:(i,e,t)=>{let r=b(t);r.stencilReadMask=e},stencilWriteMask:(i,e,t)=>{let r=b(t);r.stencilWriteMask=e},stencilCompare:(i,e,t)=>{let r=q(t),n=Q(t);r.compare=e,n.compare=e},stencilPassOperation:(i,e,t)=>{let r=q(t),n=Q(t);r.passOp=e,n.passOp=e},stencilFailOperation:(i,e,t)=>{let r=q(t),n=Q(t);r.failOp=e,n.failOp=e},stencilDepthFailOperation:(i,e,t)=>{let r=q(t),n=Q(t);r.depthFailOp=e,n.depthFailOp=e},sampleCount:(i,e,t)=>{t.multisample=t.multisample||{},t.multisample.count=e},sampleMask:(i,e,t)=>{t.multisample=t.multisample||{},t.multisample.mask=e},sampleAlphaToCoverageEnabled:(i,e,t)=>{t.multisample=t.multisample||{},t.multisample.alphaToCoverageEnabled=e},colorMask:(i,e,t)=>{let r=Pe(t,0);r.writeMask=e},blend:(i,e,t)=>{e&&w(t,0)},blendColorOperation:(i,e,t)=>{let r=w(t,0);r.color=r.color||{},r.color.operation=e},blendColorSrcFactor:(i,e,t)=>{let r=w(t,0);r.color=r.color||{},r.color.srcFactor=e},blendColorDstFactor:(i,e,t)=>{let r=w(t,0);r.color.dstFactor=e},blendAlphaOperation:(i,e,t)=>{let r=w(t,0);r.alpha=r.alpha||{},r.alpha.operation=e},blendAlphaSrcFactor:(i,e,t)=>{let r=w(t,0);r.alpha=r.alpha||{},r.alpha.srcFactor=e},blendAlphaDstFactor:(i,e,t)=>{let r=w(t,0);r.alpha=r.alpha||{},r.alpha.dstFactor=e},unclippedDepth:f,provokingVertex:f,polygonMode:f,polygonOffsetLine:f,clipDistance0:f,clipDistance1:f,clipDistance2:f,clipDistance3:f,clipDistance4:f,clipDistance5:f,clipDistance6:f,clipDistance7:f};pt={primitive:{cullMode:"back",topology:"triangle-list"},vertex:{module:void 0,entryPoint:"main"},fragment:{module:void 0,entryPoint:"main",targets:[]},layout:"auto"}});function j(i,e,t,r){let n=ct(r,t);i.pushErrorScope("validation");let s=i.createBindGroup({layout:e,entries:n});return i.popErrorScope().then(o=>{o&&m.log.error(`bindGroup creation: ${o.message}`,s)()}),s}function _e(i,e,t){let r=i.bindings.find(n=>n.name===e||`${n.name.toLocaleLowerCase()}uniforms`===e.toLocaleLowerCase());return!r&&!t?.ignoreWarnings&&m.log.warn(`Binding ${e} not set: Not found in shader layout.`)(),r||null}function ct(i,e){let t=[];for(let[r,n]of Object.entries(i)){let s=_e(e,r);if(s){let o=Ae(n,s.location);o&&t.push(o)}if(n instanceof m.Texture&&(s=_e(e,`${r}Sampler`,{ignoreWarnings:!0}),s)){let o=Ae(n,s.location,{sampler:!0});o&&t.push(o)}}return t}function Ae(i,e,t){return i instanceof m.Buffer?{binding:e,resource:{buffer:i.handle}}:i instanceof m.Sampler?{binding:e,resource:i.handle}:i instanceof m.Texture?t?.sampler?{binding:e,resource:i.sampler.handle}:{binding:e,resource:i.view.handle}:(m.log.warn(`invalid binding ${name}`,i),null)}var m,he=d(()=>{"use strict";m=p(h(),1)});function pe(i){if(i.endsWith("-webgl"))throw new Error(`WebGPU does not support vertex format ${i}`);return i}function Ge(i,e){let t=[],r=new Set;for(let n of e){let s=[],o="vertex",a=0,l=n.format;if(n.attributes)for(let c of n.attributes){let T=c.attribute,S=Le(i,T,r),O=S?.location;l=c.format||n.format,o=S?.stepMode||(S?.name.startsWith("instance")?"instance":"vertex"),s.push({format:pe(l),offset:c.byteOffset,shaderLocation:O}),a+=(0,_.getVertexFormatInfo)(l).byteLength}else{let c=Le(i,n.name,r);if(!c)continue;a=(0,_.getVertexFormatInfo)(l).byteLength,o=c.stepMode||(c.name.startsWith("instance")?"instance":"vertex"),s.push({format:pe(l),offset:0,shaderLocation:c.location})}t.push({arrayStride:n.byteStride||a,stepMode:o,attributes:s})}for(let n of i.attributes)r.has(n.name)||t.push({arrayStride:(0,_.getVertexFormatInfo)("float32x3").byteLength,stepMode:n.stepMode||(n.name.startsWith("instance")?"instance":"vertex"),attributes:[{format:pe("float32x3"),offset:0,shaderLocation:n.location}]});return t.sort((n,s)=>{let o=Math.min(...Array.from(n.attributes,l=>l.shaderLocation)),a=Math.min(...Array.from(s.attributes,l=>l.shaderLocation));return o-a}),t}function Le(i,e,t){let r=i.attributes.find(n=>n.name===e);if(!r)return _.log.warn(`Supplied attribute not present in shader layout: ${e}`)(),null;if(t){if(t.has(e))throw new Error(`Found multiple entries for attribute: ${e}`);t.add(e)}return r}var _,Te=d(()=>{"use strict";_=p(h(),1)});var A,Y,De=d(()=>{"use strict";A=p(h(),1);Ce();oe();he();Te();Y=class extends A.RenderPipeline{device;handle;vs;fs=null;_bindings;_bindGroupLayout=null;_bindGroup=null;get[Symbol.toStringTag](){return"WebGPURenderPipeline"}constructor(e,t){if(super(e,t),this.device=e,this.handle=this.props.handle,!this.handle){let r=this._getRenderPipelineDescriptor();A.log.groupCollapsed(1,`new WebGPURenderPipeline(${this.id})`)(),A.log.probe(1,JSON.stringify(r,null,2))(),A.log.groupEnd(1)(),this.device.pushErrorScope("validation"),this.handle=this.device.handle.createRenderPipeline(r),this.device.popErrorScope(n=>{this.device.reportError(new Error(`${this} creation failed:
9
+ "${n.message}"`),this)(),this.device.debug()})}this.handle.label=this.props.id,this.vs=t.vs,this.fs=t.fs,this._bindings={...this.props.bindings}}destroy(){this.handle=null}setBindings(e){for(let[t,r]of Object.entries(e))this._bindings[t]!==r&&(this._bindGroup=null);Object.assign(this._bindings,e)}draw(e){let t=e.renderPass;this.device.pushErrorScope("validation"),t.handle.setPipeline(this.handle),this.device.popErrorScope(n=>{this.device.reportError(new Error(`${this} setPipeline failed:
10
+ "${n.message}"`),this)(),this.device.debug()});let r=this._getBindGroup();return r&&t.handle.setBindGroup(0,r),e.vertexArray.bindBeforeRender(e.renderPass),e.indexCount?t.handle.drawIndexed(e.indexCount,e.instanceCount,e.firstIndex,e.baseVertex,e.firstInstance):t.handle.draw(e.vertexCount||0,e.instanceCount||1,e.firstInstance),e.vertexArray.unbindAfterRender(e.renderPass),!0}_getBindGroup(){return this.shaderLayout.bindings.length===0?null:(this._bindGroupLayout=this._bindGroupLayout||this.handle.getBindGroupLayout(0),this._bindGroup=this._bindGroup||j(this.device.handle,this._bindGroupLayout,this.shaderLayout,this._bindings),this._bindGroup)}_getRenderPipelineDescriptor(){let e={module:this.props.vs.handle,entryPoint:this.props.vertexEntryPoint||"main",buffers:Ge(this.shaderLayout,this.props.bufferLayout)},t=[];if(this.props.colorAttachmentFormats)for(let a of this.props.colorAttachmentFormats)t.push(a?{format:E(a)}:null);else t.push({format:E(this.device.preferredColorFormat)});let r={module:this.props.fs.handle,entryPoint:this.props.fragmentEntryPoint||"main",targets:t},n=this.device.createPipelineLayout({shaderLayout:this.shaderLayout}),s={vertex:e,fragment:r,primitive:{topology:this.props.topology},layout:n.handle},o=this.props.depthStencilAttachmentFormat||this.device.preferredDepthFormat;return this.props.parameters.depthWriteEnabled&&(s.depthStencil={format:E(o)}),Be(s,this.props.parameters),s}}});var Ie,L,le=d(()=>{"use strict";Ie=p(h(),1),L=class extends Ie.Framebuffer{device;handle=null;colorAttachments=[];depthStencilAttachment=null;constructor(e,t){super(e,t),this.device=e,this.autoCreateAttachmentTextures()}updateAttachments(){}}});var Fe,H,We=d(()=>{"use strict";Fe=p(h(),1);he();H=class extends Fe.ComputePipeline{device;handle;_bindGroupLayout=null;_bindGroup=null;_bindings={};constructor(e,t){super(e,t),this.device=e;let r=this.props.shader;this.handle=this.props.handle||this.device.handle.createComputePipeline({label:this.props.id,compute:{module:r.handle,entryPoint:this.props.entryPoint,constants:this.props.constants},layout:"auto"})}setBindings(e){Object.assign(this._bindings,e)}_getBindGroup(){return this._bindGroupLayout=this._bindGroupLayout||this.handle.getBindGroupLayout(0),this._bindGroup=this._bindGroup||j(this.device.handle,this._bindGroupLayout,this.shaderLayout,this._bindings),this._bindGroup}}});var Ot,Ut,kt,Me,Re=d(()=>{Ot=globalThis.document||{},Ut=globalThis.process||{},kt=globalThis.console,Me=globalThis.navigator||{}});function X(i){if(typeof window<"u"&&window.process?.type==="renderer"||typeof process<"u"&&Boolean(process.versions?.electron))return!0;let e=typeof navigator<"u"&&navigator.userAgent,t=i||e;return Boolean(t&&t.indexOf("Electron")>=0)}var ce=d(()=>{});function $e(){return!(typeof process=="object"&&String(process)==="[object process]"&&!process?.browser)||X()}var Oe=d(()=>{ce()});function ue(i){return!i&&!$e()?"Node":X(i)?"Electron":(i||Me.userAgent||"").indexOf("Edge")>-1?"Edge":globalThis.chrome?"Chrome":globalThis.safari?"Safari":globalThis.mozInnerScreenX?"Firefox":"Unknown"}var Ue=d(()=>{Oe();ce();Re()});var ke=d(()=>{Ue()});var F,J,Ve=d(()=>{"use strict";F=p(h(),1);ke();J=class extends F.VertexArray{get[Symbol.toStringTag](){return"WebGPUVertexArray"}device;handle=null;constructor(e,t){super(e,t),this.device=e}destroy(){}setIndexBuffer(e){this.indexBuffer=e}setBuffer(e,t){this.attributes[e]=t}bindBeforeRender(e,t,r){let n=e,s=this.indexBuffer;s?.handle&&(F.log.info(3,"setting index buffer",s?.handle,s?.indexType)(),n.handle.setIndexBuffer(s?.handle,s?.indexType));for(let o=0;o<this.maxVertexAttributes;o++){let a=this.attributes[o];a?.handle&&(F.log.info(3,`setting vertex buffer ${o}`,a?.handle)(),n.handle.setVertexBuffer(o,a?.handle))}}unbindAfterRender(e){}static isConstantAttributeZeroSupported(e){return ue()==="Chrome"}}});var G,W,ze=d(()=>{"use strict";G=p(h(),1);le();W=class extends G.CanvasContext{device;handle;depthStencilAttachment=null;get[Symbol.toStringTag](){return"WebGPUCanvasContext"}constructor(e,t,r){super(r);let n=this.canvas.getContext("webgpu");if(!n)throw new Error(`${this}: Failed to create WebGPU canvas context`);this.device=e,this.handle=n,this._setAutoCreatedCanvasId(`${this.device.id}-canvas`),this._updateDevice()}destroy(){this.handle.unconfigure(),super.destroy()}getCurrentFramebuffer(e={depthStencilFormat:"depth24plus"}){let t=this.getCurrentTexture();if(t.width!==this.drawingBufferWidth||t.height!==this.drawingBufferHeight){let[r,n]=this.getDrawingBufferSize();this.drawingBufferWidth=t.width,this.drawingBufferHeight=t.height,G.log.log(1,`${this}: Resized to compensate for initial canvas size mismatch ${r}x${n} => ${this.drawingBufferWidth}x${this.drawingBufferHeight}px`)()}return e?.depthStencilFormat&&this._createDepthStencilAttachment(e?.depthStencilFormat),new L(this.device,{colorAttachments:[t],depthStencilAttachment:this.depthStencilAttachment})}_updateDevice(){this.depthStencilAttachment&&(this.depthStencilAttachment.destroy(),this.depthStencilAttachment=null),this.handle.configure({device:this.device.handle,format:this.device.preferredColorFormat,colorSpace:this.props.colorSpace,alphaMode:this.props.alphaMode})}getCurrentTexture(){let e=this.handle.getCurrentTexture();return this.device.createTexture({id:`${this.id}#color-texture`,handle:e,format:this.device.preferredColorFormat,width:e.width,height:e.height})}_createDepthStencilAttachment(e){return this.depthStencilAttachment||(this.depthStencilAttachment=this.device.createTexture({id:`${this.id}#depth-stencil-texture`,usage:G.Texture.RENDER_ATTACHMENT,format:e,width:this.drawingBufferWidth,height:this.drawingBufferHeight})),this.depthStencilAttachment}}});var qe,Z,Qe=d(()=>{"use strict";qe=p(h(),1),Z=class extends qe.CommandBuffer{device;handle;constructor(e,t){super(e.device,{}),this.device=e.device,this.handle=this.props.handle||e.handle.finish({label:t?.id||"unnamed-command-buffer"})}}});function ut(i){return{r:i[0],g:i[1],b:i[2],a:i[3]}}var x,K,Ne=d(()=>{"use strict";x=p(h(),1),K=class extends x.RenderPass{device;handle;pipeline=null;constructor(e,t={}){super(e,t),this.device=e;let r=t.framebuffer||e.getCanvasContext().getCurrentFramebuffer(),n=this.getRenderPassDescriptor(r),s=t.timestampQuerySet;if(s&&(n.occlusionQuerySet=s.handle),e.features.has("timestamp-query")){let o=t.timestampQuerySet;n.timestampWrites=o?{querySet:o.handle,beginningOfPassWriteIndex:t.beginTimestampIndex,endOfPassWriteIndex:t.endTimestampIndex}:void 0}if(!e.commandEncoder)throw new Error("commandEncoder not available");this.device.pushErrorScope("validation"),this.handle=this.props.handle||e.commandEncoder.handle.beginRenderPass(n),this.device.popErrorScope(o=>{this.device.reportError(new Error(`${this} creation failed:
11
+ "${o.message}"`),this)(),this.device.debug()}),this.handle.label=this.props.id,x.log.groupCollapsed(3,`new WebGPURenderPass(${this.id})`)(),x.log.probe(3,JSON.stringify(n,null,2))(),x.log.groupEnd(3)()}destroy(){}end(){this.handle.end()}setPipeline(e){this.pipeline=e,this.device.pushErrorScope("validation"),this.handle.setPipeline(this.pipeline.handle),this.device.popErrorScope(t=>{this.device.reportError(new Error(`${this} setPipeline failed:
12
+ "${t.message}"`),this)(),this.device.debug()})}setBindings(e){this.pipeline?.setBindings(e);let t=this.pipeline?._getBindGroup();t&&this.handle.setBindGroup(0,t)}setIndexBuffer(e,t,r=0,n){this.handle.setIndexBuffer(e.handle,t,r,n)}setVertexBuffer(e,t,r=0){this.handle.setVertexBuffer(e,t.handle,r)}draw(e){e.indexCount?this.handle.drawIndexed(e.indexCount,e.instanceCount,e.firstIndex,e.baseVertex,e.firstInstance):this.handle.draw(e.vertexCount||0,e.instanceCount||1,e.firstIndex,e.firstInstance)}drawIndirect(){}setParameters(e){let{blendConstant:t,stencilReference:r,scissorRect:n,viewport:s}=e;t&&this.handle.setBlendConstant(t),r&&this.handle.setStencilReference(r),n&&this.handle.setScissorRect(n[0],n[1],n[2],n[3]),s&&this.handle.setViewport(s[0],s[1],s[2],s[3],s[4]??0,s[5]??1)}pushDebugGroup(e){this.handle.pushDebugGroup(e)}popDebugGroup(){this.handle.popDebugGroup()}insertDebugMarker(e){this.handle.insertDebugMarker(e)}beginOcclusionQuery(e){this.handle.beginOcclusionQuery(e)}endOcclusionQuery(){this.handle.endOcclusionQuery()}getRenderPassDescriptor(e){let t={colorAttachments:[]};if(t.colorAttachments=e.colorAttachments.map((r,n)=>({loadOp:this.props.clearColor!==!1?"clear":"load",clearValue:ut(this.props.clearColors?.[n]||this.props.clearColor||x.RenderPass.defaultClearColor),storeOp:this.props.discard?"discard":"store",view:r.handle})),e.depthStencilAttachment){t.depthStencilAttachment={view:e.depthStencilAttachment.handle};let{depthStencilAttachment:r}=t;this.props.depthReadOnly&&(r.depthReadOnly=!0),this.props.clearDepth!==!1&&(r.depthClearValue=this.props.clearDepth),!0&&(r.depthLoadOp=this.props.clearDepth!==!1?"clear":"load",r.depthStoreOp="store"),!1&&(r.stencilLoadOp=this.props.clearStencil!==!1?"clear":"load",r.stencilStoreOp="store")}return t}}});var je,ee,Ye=d(()=>{"use strict";je=p(h(),1),ee=class extends je.ComputePass{device;handle;_webgpuPipeline=null;constructor(e,t){super(e,t),this.device=e;let r;if(e.features.has("timestamp-query")){let n=t.timestampQuerySet;n&&(r={querySet:n.handle,beginningOfPassWriteIndex:t.beginTimestampIndex,endOfPassWriteIndex:t.endTimestampIndex})}this.handle=this.props.handle||e.commandEncoder.handle.beginComputePass({label:this.props.id,timestampWrites:r})}destroy(){}end(){this.handle.end()}setPipeline(e){let t=e;this.handle.setPipeline(t.handle),this._webgpuPipeline=t,this.setBindings([])}setBindings(e){let t=this._webgpuPipeline._getBindGroup();this.handle.setBindGroup(0,t)}dispatch(e,t,r){this.handle.dispatchWorkgroups(e,t,r)}dispatchIndirect(e,t=0){let r=e;this.handle.dispatchWorkgroupsIndirect(r.handle,t)}pushDebugGroup(e){this.handle.pushDebugGroup(e)}popDebugGroup(){this.handle.popDebugGroup()}insertDebugMarker(e){this.handle.insertDebugMarker(e)}}});var He,te,Xe=d(()=>{"use strict";He=p(h(),1);Qe();Ne();Ye();te=class extends He.CommandEncoder{device;handle;constructor(e,t={}){super(e,t),this.device=e,this.handle=t.handle||this.device.handle.createCommandEncoder({label:this.props.id}),this.handle.label=this.props.id}destroy(){}finish(e){this.device.pushErrorScope("validation");let t=new Z(this,{id:e?.id||"unnamed-command-buffer"});return this.device.popErrorScope(r=>{let n=`${this} command encoding: ${r.message}. Maybe add depthWriteEnabled to your Model?`;this.device.reportError(new Error(n),this)(),this.device.debug()}),t}beginRenderPass(e){return new K(this.device,e)}beginComputePass(e){return new ee(this.device,e)}copyBufferToBuffer(e){let t=e.sourceBuffer,r=e.destinationBuffer;this.handle.copyBufferToBuffer(t.handle,e.sourceOffset??0,r.handle,e.destinationOffset??0,e.size??0)}copyBufferToTexture(e){let t=e.sourceBuffer,r=e.destinationTexture;this.handle.copyBufferToTexture({buffer:t.handle,offset:e.offset??0,bytesPerRow:e.bytesPerRow,rowsPerImage:e.rowsPerImage},{texture:r.handle,mipLevel:e.mipLevel??0,origin:e.origin??{}},{width:e.extent?.[0],height:e.extent?.[1],depthOrArrayLayers:e.extent?.[2]})}copyTextureToBuffer(e){}copyTextureToTexture(e){}pushDebugGroup(e){this.handle.pushDebugGroup(e)}popDebugGroup(){this.handle.popDebugGroup()}insertDebugMarker(e){this.handle.insertDebugMarker(e)}resolveQuerySet(e,t,r){let n=e,s=t;this.handle.resolveQuerySet(n.handle,r?.firstQuery||0,r?.queryCount||e.props.count-(r?.firstQuery||0),s.handle,r?.destinationOffset||0)}}});var Je,re,Ze=d(()=>{"use strict";Je=p(h(),1),re=class extends Je.QuerySet{device;handle;constructor(e,t){super(e,t),this.device=e,this.handle=this.props.handle||this.device.handle.createQuerySet({type:this.props.type,count:this.props.count}),this.handle.label=this.props.id}destroy(){this.handle?.destroy(),this.handle=null}}});var ne,ie,ft,Ke=d(()=>{"use strict";ne=p(h(),1),ie=class extends ne.PipelineLayout{device;handle;constructor(e,t){super(e,t),this.device=e;let r=this.mapShaderLayoutToBindGroupEntries();this.handle=this.device.handle.createPipelineLayout({label:t?.id??"unnamed-pipeline-layout",bindGroupLayouts:[this.device.handle.createBindGroupLayout({label:"bind-group-layout",entries:r})]})}destroy(){this.handle=null}mapShaderLayoutToBindGroupEntries(){let e=[];for(let t=0;t<this.props.shaderLayout.bindings.length;t++){let r=this.props.shaderLayout.bindings[t],n={};switch(r.type){case"uniform":{n.buffer={type:"uniform",hasDynamicOffset:r.hasDynamicOffset,minBindingSize:r.minBindingSize};break}case"read-only-storage":{n.buffer={type:"read-only-storage",hasDynamicOffset:r.hasDynamicOffset,minBindingSize:r.minBindingSize};break}case"sampler":{n.sampler={type:r.samplerType};break}case"storage":{ft(r)?n.storageTexture={format:r.format,access:r.access,viewDimension:r.viewDimension}:n.buffer={type:"storage",hasDynamicOffset:r.hasDynamicOffset,minBindingSize:r.minBindingSize};break}case"texture":{n.texture={multisampled:r.multisampled,sampleType:r.sampleType,viewDimension:r.viewDimension};break}default:ne.log.warn("unhandled binding type when creating pipeline descriptor")()}let s=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE;e.push({binding:r.location,visibility:r.visibility||s,...n})}return e}},ft=i=>i.format!==void 0});var et={};ge(et,{WebGPUDevice:()=>R});var M,R,fe=d(()=>{"use strict";M=p(h(),1);se();ae();Se();D();de();De();le();We();Ve();ze();Xe();Ze();Ke();R=class extends M.Device{handle;adapter;adapterInfo;type="webgpu";preferredColorFormat=navigator.gpu.getPreferredCanvasFormat();preferredDepthFormat="depth24plus";features;info;limits;lost;canvasContext=null;_isLost=!1;commandEncoder;get[Symbol.toStringTag](){return"WebGPUDevice"}toString(){return`WebGPUDevice(${this.id})`}constructor(e,t,r,n){super({...e,id:e.id||"webgpu-device"}),this.handle=t,this.adapter=r,this.adapterInfo=n,this.info=this._getInfo(),this.features=this._getFeatures(),this.limits=this.handle.limits,t.addEventListener("uncapturederror",o=>{o.preventDefault();let a=o instanceof GPUUncapturedErrorEvent?o.error.message:"Unknown WebGPU error";this.reportError(new Error(a),this)(),this.debug()}),this.lost=new Promise(async o=>{let a=await this.handle.lost;this._isLost=!0,o({reason:"destroyed",message:a.message})});let s=M.Device._getCanvasContextProps(e);s&&(this.canvasContext=new W(this,this.adapter,s)),this.commandEncoder=this.createCommandEncoder({})}destroy(){this.handle.destroy()}get isLost(){return this._isLost}isVertexFormatSupported(e){return!this.getVertexFormatInfo(e).webglOnly}getTextureByteAlignment(){return 1}createBuffer(e){let t=this._normalizeBufferProps(e);return new v(this,t)}createTexture(e){return new P(this,e)}createExternalTexture(e){return new z(this,e)}createShader(e){return new C(this,e)}createSampler(e){return new u(this,e)}createRenderPipeline(e){return new Y(this,e)}createFramebuffer(e){return new L(this,e)}createComputePipeline(e){return new H(this,e)}createVertexArray(e){return new J(this,e)}createCommandEncoder(e){return new te(this,e)}createTransformFeedback(e){throw new Error("Transform feedback not supported in WebGPU")}createQuerySet(e){return new re(this,e)}createCanvasContext(e){return new W(this,this.adapter,e)}createPipelineLayout(e){return new ie(this,e)}submit(e){e||(e=this.commandEncoder.finish(),this.commandEncoder.destroy(),this.commandEncoder=this.createCommandEncoder({id:`${this.id}-default-encoder`})),this.pushErrorScope("validation"),this.handle.queue.submit([e.handle]),this.popErrorScope(t=>{this.reportError(new Error(`${this} command submission: ${t.message}`),this)(),this.debug()})}pushErrorScope(e){this.handle.pushErrorScope(e)}popErrorScope(e){this.handle.popErrorScope().then(t=>{t&&e(t)})}_getInfo(){let[e,t]=(this.adapterInfo.driver||"").split(" Version "),r=this.adapterInfo.vendor||this.adapter.__brand||"unknown",n=e||"",s=t||"",o=r==="apple"?"apple":"unknown",a=this.adapterInfo.architecture||"unknown",l=this.adapterInfo.backend||"unknown",c=(this.adapterInfo.type||"").split(" ")[0].toLowerCase()||"unknown";return{type:"webgpu",vendor:r,renderer:n,version:s,gpu:o,gpuType:c,gpuBackend:l,gpuArchitecture:a,shadingLanguage:"wgsl",shadingLanguageVersion:100}}_getFeatures(){let e=new Set(this.handle.features);e.has("depth-clamping")&&(e.delete("depth-clamping"),e.add("depth-clip-control")),e.has("texture-compression-bc")&&e.add("texture-compression-bc5-webgl");let t=["timer-query-webgl","compilation-status-async-webgl","float32-renderable-webgl","float16-renderable-webgl","norm16-renderable-webgl","texture-filterable-anisotropic-webgl","shader-noperspective-interpolation-webgl"];for(let r of t)e.add(r);return new M.DeviceFeatures(Array.from(e),this.props._disabledFeatures)}_getDeviceSpecificTextureFormatCapabilities(e){let{format:t}=e;return t.includes("webgl")?{format:t,create:!1,render:!1,filter:!1,blend:!1,store:!1}:e}}});var $={};ge($,{WebGPUBuffer:()=>v,WebGPUDevice:()=>R,WebGPUSampler:()=>u,WebGPUShader:()=>C,WebGPUTexture:()=>P,webgpuAdapter:()=>tt});V($,p(h(),1));var y=p(h(),1),me=class extends y.Adapter{type="webgpu";isSupported(){return Boolean(typeof navigator<"u"&&navigator.gpu)}isDeviceHandle(e){return!!(typeof GPUDevice<"u"&&e instanceof GPUDevice||e?.queue)}async create(e){if(!navigator.gpu)throw new Error("WebGPU not available. Recent Chrome browsers should work.");y.log.groupCollapsed(1,"WebGPUDevice created")();try{let t=await navigator.gpu.requestAdapter({powerPreference:"high-performance"});if(!t)throw new Error("Failed to request WebGPU adapter");let r=t.info||await t.requestAdapterInfo?.();y.log.probe(2,"Adapter available",r)();let n=[],s={};if(e._requestMaxLimits){n.push(...Array.from(t.features));let c=Object.keys(t.limits).filter(T=>!["minSubgroupSize","maxSubgroupSize"].includes(T));for(let T of c){let S=T,O=t.limits[S];typeof O=="number"&&(s[S]=O)}}let o=await t.requestDevice({requiredFeatures:n,requiredLimits:s});y.log.probe(1,"GPUDevice available")();let{WebGPUDevice:a}=await Promise.resolve().then(()=>(fe(),et)),l=new a(e,o,t,r);return y.log.probe(1,"Device created. For more info, set chrome://flags/#enable-webgpu-developer-features")(),y.log.table(1,l.info)(),l}finally{y.log.groupEnd(1)()}}async attach(e){throw new Error("WebGPUAdapter.attach() not implemented")}},tt=new me;fe();se();ae();D();de();return dt($);})();
12
13
  return __exports__;
13
14
  });