@derschmale/tiny-helix 0.1.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"tiny-helix.debug.js","mappings":"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","sources":["webpack://TinyHelix/webpack/universalModuleDefinition","webpack://TinyHelix/./src/BindGroup.ts","webpack://TinyHelix/./src/BlendMode.ts","webpack://TinyHelix/./src/CommandEncoder.ts","webpack://TinyHelix/./src/ComputePass.ts","webpack://TinyHelix/./src/ComputePipeline.ts","webpack://TinyHelix/./src/Mesh.ts","webpack://TinyHelix/./src/RenderPass.ts","webpack://TinyHelix/./src/RenderPipeline.ts","webpack://TinyHelix/./src/RenderTarget.ts","webpack://TinyHelix/./src/Sampler.ts","webpack://TinyHelix/./src/Shader.ts","webpack://TinyHelix/./src/Texture.ts","webpack://TinyHelix/./src/TinyHelix.ts","webpack://TinyHelix/./src/WebGPUContext.ts","webpack://TinyHelix/./src/buffers/Buffer.ts","webpack://TinyHelix/./src/buffers/BufferDataWriter.ts","webpack://TinyHelix/./src/buffers/UniformBuffer.ts","webpack://TinyHelix/./src/enums.ts","webpack://TinyHelix/./src/utils/float32ToFloat16.ts","webpack://TinyHelix/./src/utils/mapUndefined.ts","webpack://TinyHelix/./src/utils/padArrayBuffer.ts","webpack://TinyHelix/webpack/bootstrap","webpack://TinyHelix/webpack/runtime/define property getters","webpack://TinyHelix/webpack/runtime/hasOwnProperty shorthand","webpack://TinyHelix/webpack/runtime/make namespace object","webpack://TinyHelix/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TinyHelix\"] = factory();\n\telse\n\t\troot[\"TinyHelix\"] = factory();\n})(this, () => {\nreturn ","import {WebGPUContext} from \"./WebGPUContext\";\r\nimport {UniformBuffer, UniformBufferLayout} from \"./buffers/UniformBuffer\";\r\nimport {IBuffer} from \"./buffers/IBuffer\";\r\nimport {mapUndefined} from \"./utils/mapUndefined\";\r\nimport {Texture, TextureView} from \"./Texture\";\r\nimport {Sampler} from \"./Sampler\";\r\nimport {TextureFormat} from \"../dist\";\r\nimport {StorageAccess} from \"./enums\";\r\n\r\n/**\r\n * Lightweight wrapper around a GPUBindGroup.\r\n * Use {@link TinyHelix.createBindGroup} to create instances.\r\n */\r\nexport class BindGroup {\r\n /** @internal */\r\n readonly _inner: GPUBindGroup;\r\n\r\n /**\r\n * Construct a wrapper around an existing GPUBindGroup.\r\n * @internal\r\n */\r\n constructor(inner: GPUBindGroup) {\r\n this._inner = inner;\r\n }\r\n}\r\n\r\n/**\r\n * Builder for creating GPUBindGroup instances. Supports adding uniform buffer\r\n * entries and a human-readable label.\r\n */\r\nexport class BindGroupBuilder {\r\n private _entries: GPUBindGroupEntry[] = [];\r\n private _label?: string;\r\n private _layout: BindGroupLayout;\r\n private _ctx: WebGPUContext;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(ctx: WebGPUContext, layout: BindGroupLayout) {\r\n this._ctx = ctx;\r\n this._layout = layout;\r\n }\r\n\r\n /**\r\n * Assign a human-readable label for the bind group (useful in GPU debuggers).\r\n */\r\n withLabel(label: string): this {\r\n this._label = label;\r\n return this;\r\n }\r\n\r\n /**\r\n * Attach a buffer to the bind group\r\n * @param fieldName\r\n * @param buffer\r\n */\r\n withBuffer(fieldName: string, buffer: IBuffer): this {\r\n const index = this._layout._getBindingIndex(fieldName);\r\n this._entries[index] = {\r\n binding: index, resource: buffer._getBufferResource()\r\n };\r\n return this;\r\n }\r\n\r\n /** Attach a texture to the bind group. */\r\n withTexture(fieldName: string, texture: Texture | TextureView): this {\r\n const index = this._layout._getBindingIndex(fieldName);\r\n this._entries[index] = {\r\n binding: index, resource: texture._inner\r\n };\r\n return this;\r\n }\r\n\r\n /** Attach a sampler to the bind group at the given binding index. */\r\n withSampler(fieldName: string, sampler: Sampler): this {\r\n const index = this._layout._getBindingIndex(fieldName);\r\n this._entries[index] = {\r\n binding: index, resource: sampler._inner\r\n };\r\n return this;\r\n }\r\n\r\n /**\r\n * Create the GPUBindGroup and return a wrapped `BindGroup` instance.\r\n */\r\n build(): BindGroup\r\n {\r\n const inner = this._ctx.device.createBindGroup({\r\n label: this._label,\r\n entries: this._entries,\r\n layout: this._layout._inner\r\n });\r\n return new BindGroup(inner);\r\n }\r\n}\r\n\r\n/**\r\n * Wrapper around a GPUBindGroupLayout that also keeps track of any\r\n * UniformBufferLayout objects associated with the layout. Useful for\r\n * constructing `BindGroupBuilder` instances for specific layouts.\r\n */\r\nexport class BindGroupLayout {\r\n /** @internal */\r\n readonly _inner: GPUBindGroupLayout;\r\n private _uboLayouts: Map<string, UniformBufferLayout>;\r\n private _ctx: WebGPUContext;\r\n private _indices: Map<string, number>;\r\n\r\n constructor(inner: GPUBindGroupLayout, ctx: WebGPUContext, indices: Map<string, number>, uboLayouts: Map<string, UniformBufferLayout>) {\r\n this._inner = inner;\r\n this._indices = indices;\r\n this._uboLayouts = uboLayouts;\r\n this._ctx = ctx;\r\n }\r\n\r\n /**\r\n * Get the UniformBufferLayout associated with a named field (if any).\r\n */\r\n getUniformBufferLayout(name: string): UniformBufferLayout | undefined {\r\n return this._uboLayouts.get(name);\r\n }\r\n\r\n createUniformBuffer(name: string): UniformBuffer | undefined\r\n {\r\n const layout = this._uboLayouts.get(name);\r\n return mapUndefined(layout, layout => new UniformBuffer(layout, this._ctx));\r\n }\r\n\r\n _getBindingIndex(fieldName: string): number\r\n {\r\n const index = this._indices.get(fieldName);\r\n if (index === undefined) {\r\n throw(`No field name found for ${fieldName} in bind group layout.`);\r\n }\r\n return index;\r\n }\r\n}\r\n\r\n/**\r\n * Builder for GPUBindGroupLayout. Currently supports adding uniform buffers\r\n * and their associated layout information.\r\n */\r\nclass BindGroupLayoutBuilder {\r\n private _entries: GPUBindGroupLayoutEntry[] = [];\r\n private _indices: Map<string, number> = new Map();\r\n // TODO: add other buffer/texture types\r\n private _uboLayouts: Map<string, UniformBufferLayout> = new Map();\r\n private _label?: string;\r\n private _ctx: WebGPUContext;\r\n\r\n constructor(ctx: WebGPUContext) {\r\n this._ctx = ctx;\r\n }\r\n\r\n /**\r\n * Assign a label for the bind group layout.\r\n */\r\n withLabel(label: string): this {\r\n this._label = label;\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a uniform buffer binding at the given index and record its layout.\r\n * @param index - binding index\r\n * @param field_name - a name used to reference the layout later\r\n * @param layout - the UniformBufferLayout describing the UBO\r\n * @param visibility - shader stage visibility flags (defaults to VERTEX|FRAGMENT|COMPUTE)\r\n */\r\n withUniformBuffer(index: number, field_name: string, layout: UniformBufferLayout, visibility?: GPUShaderStageFlags): this {\r\n this._entries[index] = {\r\n binding: index,\r\n visibility: visibility ?? GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE,\r\n buffer: {type: 'uniform'}\r\n };\r\n this._indices.set(field_name, index);\r\n this._uboLayouts.set(field_name, layout);\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a storage buffer binding at the given index and record its layout.\r\n * @param index - binding index\r\n * @param field_name - a name used to reference the layout later\r\n * @param access_mode - Defines whether the storage buffer is read-only or not.\r\n * @param visibility - shader stage visibility flags (defaults to FRAGMENT|COMPUTE)\r\n */\r\n withStorageBuffer(index: number, field_name: string, access_mode: StorageAccess, visibility?: GPUShaderStageFlags): this {\r\n let type: GPUBufferBindingType = \"storage\";\r\n\r\n if (access_mode === StorageAccess.Read) {\r\n type = \"read-only-storage\";\r\n }\r\n\r\n this._entries[index] = {\r\n binding: index,\r\n visibility: visibility ?? GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE,\r\n buffer: {type, hasDynamicOffset: false, minBindingSize: 4}\r\n };\r\n this._indices.set(field_name, index);\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a storage texture binding at the given index. The texture will be\r\n * write-only and use RGBA8Unorm format.\r\n * @param index\r\n * @param field_name\r\n * @param format\r\n * @param access_mode\r\n * @param visibility\r\n */\r\n withStorageTexture(index: number, field_name: string, format: TextureFormat, access_mode: StorageAccess, visibility?: GPUShaderStageFlags): this {\r\n this._entries[index] = {\r\n binding: index,\r\n visibility: visibility ?? GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE,\r\n storageTexture: {access: access_mode, format}\r\n };\r\n this._indices.set(field_name, index);\r\n return this;\r\n }\r\n\r\n withTexture(index: number, field_name: string, visibility?: GPUShaderStageFlags): this {\r\n this._entries[index] = {\r\n binding: index,\r\n visibility: visibility ?? GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE,\r\n texture: {sampleType: 'float'}\r\n };\r\n this._indices.set(field_name, index);\r\n return this;\r\n }\r\n\r\n withSampler(index: number, field_name: string, visibility?: GPUShaderStageFlags): this {\r\n this._entries[index] = {\r\n binding: index,\r\n visibility: visibility ?? GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE,\r\n sampler: {type: 'filtering'}\r\n };\r\n this._indices.set(field_name, index);\r\n return this;\r\n }\r\n\r\n /**\r\n * Create the underlying GPUBindGroupLayout and return a wrapped `BindGroupLayout`.\r\n */\r\n build(): BindGroupLayout\r\n {\r\n const inner = this._ctx.device.createBindGroupLayout({\r\n label: this._label,\r\n entries: this._entries\r\n });\r\n return new BindGroupLayout(inner, this._ctx, this._indices, this._uboLayouts)\r\n }\r\n}\r\n\r\nexport default BindGroupLayoutBuilder\r\n","import {BlendFactor} from \"./enums\";\r\n\r\nexport class BlendMode {\r\n readonly _inner: GPUBlendState = {\r\n color: {srcFactor: BlendFactor.SrcAlpha, dstFactor: BlendFactor.OneMinusSrcAlpha},\r\n alpha: {srcFactor: BlendFactor.One, dstFactor: BlendFactor.OneMinusSrcAlpha}\r\n };\r\n\r\n static ALPHA: BlendMode = new BlendMode(BlendFactor.SrcAlpha, BlendFactor.OneMinusSrcAlpha, BlendFactor.One, BlendFactor.OneMinusSrcAlpha);\r\n static ADDITIVE: BlendMode = new BlendMode(BlendFactor.SrcAlpha, BlendFactor.One, BlendFactor.One, BlendFactor.One)\r\n static MULTIPLY: BlendMode = new BlendMode(BlendFactor.DstColor, BlendFactor.Zero, BlendFactor.Zero, BlendFactor.One)\r\n static SCREEN: BlendMode = new BlendMode(BlendFactor.One, BlendFactor.OneMinusSrcColor, BlendFactor.One, BlendFactor.OneMinusSrcAlpha)\r\n static OVERLAY: BlendMode = new BlendMode(BlendFactor.SrcAlpha, BlendFactor.OneMinusSrcAlpha, BlendFactor.One, BlendFactor.OneMinusSrcAlpha)\r\n static DARKEN: BlendMode = new BlendMode(BlendFactor.One, BlendFactor.OneMinusSrcColor, BlendFactor.One, BlendFactor.OneMinusSrcAlpha)\r\n static LIGHTEN: BlendMode = new BlendMode(BlendFactor.OneMinusSrcColor, BlendFactor.One, BlendFactor.One, BlendFactor.OneMinusSrcAlpha)\r\n\r\n get srcFactor(): BlendFactor { return this._inner.color.srcFactor as BlendFactor; }\r\n set srcFactor(value: BlendFactor) { this._inner.color.srcFactor = value; }\r\n get dstFactor(): BlendFactor { return this._inner.color.dstFactor as BlendFactor; }\r\n set dstFactor(value: BlendFactor) { this._inner.color.dstFactor = value; }\r\n get alphaSrcFactor(): BlendFactor { return this._inner.alpha.srcFactor as BlendFactor; }\r\n set alphaSrcFactor(value: BlendFactor) { this._inner.alpha.srcFactor = value; }\r\n get alphaDstFactor(): BlendFactor { return this._inner.alpha.dstFactor as BlendFactor; }\r\n set alphaDstFactor(value: BlendFactor) { this._inner.alpha.dstFactor = value; }\r\n\r\n constructor(srcFactor: BlendFactor, dstFactor: BlendFactor, alphaSrcFactor: BlendFactor, alphaDstFactor: BlendFactor) {\r\n this.srcFactor = srcFactor;\r\n this.dstFactor = dstFactor;\r\n this.alphaSrcFactor = alphaSrcFactor;\r\n this.alphaDstFactor = alphaDstFactor;\r\n }\r\n}","import {WebGPUContext} from \"./WebGPUContext\";\r\nimport {RenderPassBuilder} from \"./RenderPass\";\r\nimport {RenderTarget} from \"./RenderTarget\";\r\nimport {ComputePassBuilder} from \"./ComputePass\";\r\nimport {BindGroup} from \"./BindGroup\";\r\nimport {Buffer} from \"./buffers/Buffer\";\r\n\r\n/**\r\n * Encapsulates a GPUCommandEncoder and provides helper methods to build and\r\n * submit GPU commands for a single frame. CommandEncoder should only be created\r\n * through the TinyHelix instance (See {@link TinyHelix.createCommandEncoder})\r\n */\r\nexport class CommandEncoder {\r\n private _encoder: GPUCommandEncoder;\r\n private _queue: GPUQueue;\r\n private _backbufferTarget: RenderTarget;\r\n private _commandBuffer: GPUCommandBuffer | null = null;\r\n private _depthStencilTarget: RenderTarget | undefined;\r\n private _globalBindGroups: BindGroup[];\r\n\r\n /**\r\n * Create a new CommandEncoder bound to a backbuffer/render target and\r\n * the WebGPU context.\r\n *\r\n * @internal\r\n */\r\n constructor(backbufferTarget: RenderTarget, globalBindGroups: BindGroup[], ctx: WebGPUContext, depthStencilTarget?: RenderTarget, label?: string) {\r\n const device = ctx.device;\r\n this._queue = device.queue;\r\n this._backbufferTarget = backbufferTarget;\r\n this._depthStencilTarget = depthStencilTarget;\r\n this._globalBindGroups = globalBindGroups;\r\n this._encoder = device.createCommandEncoder({label});\r\n }\r\n\r\n /**\r\n * Clears a buffer's contents\r\n */\r\n clearBuffer(buffer: Buffer, offset?: number, size?: number): this\r\n {\r\n this._encoder.clearBuffer(buffer._inner, offset, size);\r\n return this;\r\n }\r\n\r\n /**\r\n * Begin building a render pass attached to this encoder.\r\n * Returns a fluent RenderPassBuilder used to configure attachments and clear ops.\r\n */\r\n createRenderPass(): RenderPassBuilder {\r\n return new RenderPassBuilder(this._encoder, this._globalBindGroups, this._backbufferTarget, this._depthStencilTarget);\r\n }\r\n\r\n /**\r\n * Begin building a compute pass attached to this encoder.\r\n * Returns a fluent ComputePassBuilder used to configure bindings and dispatch ops.\r\n */\r\n createComputePass(): ComputePassBuilder {\r\n return new ComputePassBuilder(this._encoder, this._globalBindGroups);\r\n }\r\n\r\n /**\r\n * Mark the encoder as finished and finalize any pending commands.\r\n * Calling finish() multiple times is safe but a no-op after the first call.\r\n */\r\n finish() {\r\n if (!this._commandBuffer) {\r\n this._commandBuffer = this._encoder.finish();\r\n }\r\n }\r\n\r\n /**\r\n * Submit the recorded commands to the GPU queue. If the encoder has not\r\n * been finished yet, finish() will be called automatically.\r\n */\r\n submit() {\r\n this.finish();\r\n this._queue.submit([this._commandBuffer!]);\r\n }\r\n}","import {BindGroup} from \"./BindGroup\";\r\nimport {ComputePipeline} from \"./ComputePipeline\";\r\nimport {Buffer} from \"./buffers/Buffer\";\r\n\r\nexport class ComputePass\r\n{\r\n private readonly _inner: GPUComputePassEncoder;\r\n\r\n constructor(inner: GPUComputePassEncoder) {\r\n this._inner = inner;\r\n\r\n }\r\n\r\n /**\r\n * Set the compute pipeline to use for the next dispatch calls.\r\n * @param pipeline\r\n */\r\n setPipeline(pipeline: ComputePipeline): this {\r\n this._inner.setPipeline(pipeline._inner);\r\n return this;\r\n }\r\n\r\n dispatch(x: GPUSize32, y?: GPUSize32, z?: GPUSize32): this\r\n {\r\n this._inner.dispatchWorkgroups(x, y, z)\r\n return this;\r\n }\r\n\r\n dispatchIndirect(buffer: Buffer, offset: number): this\r\n {\r\n this._inner.dispatchWorkgroupsIndirect(buffer._inner, offset);\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a bind group at the given index.\r\n * @param index - bind group index in the render pipeline layout\r\n * @param bindGroup - a `BindGroup` instance\r\n */\r\n setBindGroup(index: number, bindGroup: BindGroup): this\r\n {\r\n this._inner.setBindGroup(index, bindGroup._inner);\r\n return this;\r\n }\r\n\r\n /**\r\n * End the compute pass. After calling end(), the underlying encoder may\r\n * continue recording other passes or be finished/submitted.\r\n */\r\n end() {\r\n this._inner.end();\r\n }\r\n}\r\n\r\nexport class ComputePassBuilder\r\n{\r\n private _label?: string;\r\n private _encoder: GPUCommandEncoder;\r\n private _globalBindGroups: BindGroup[];\r\n\r\n constructor(encoder: GPUCommandEncoder, globalBindGroups: BindGroup[]) {\r\n this._encoder = encoder;\r\n this._globalBindGroups = globalBindGroups;\r\n }\r\n\r\n /**\r\n * Assign a human-readable label for the render pass (useful for GPU debuggers).\r\n */\r\n withLabel(label: string): this {\r\n this._label = label;\r\n return this;\r\n }\r\n\r\n build(): ComputePass {\r\n const desc: GPUComputePassDescriptor = {\r\n label: this._label\r\n };\r\n\r\n const pass = new ComputePass(this._encoder.beginComputePass(desc));\r\n for (let i = 0; i < this._globalBindGroups.length; ++i) {\r\n pass.setBindGroup(i, this._globalBindGroups[i]);\r\n }\r\n return pass;\r\n }\r\n}","import {TinyHelix} from \"./TinyHelix\";\r\nimport {WebGPUContext} from \"./WebGPUContext\";\r\nimport {Shader} from \"./Shader\";\r\nimport {mapUndefined} from \"./utils/mapUndefined\";\r\n\r\nexport class ComputePipeline {\r\n readonly _inner: GPUComputePipeline;\r\n\r\n constructor(inner: GPUComputePipeline) {\r\n this._inner = inner;\r\n }\r\n}\r\n\r\nexport class ComputePipelineBuilder {\r\n private _ctx: WebGPUContext;\r\n private _label?: string;\r\n private _shader!: Shader;\r\n private _entry!: string;\r\n\r\n constructor(ctx: WebGPUContext) {\r\n this._ctx = ctx;\r\n }\r\n\r\n withLabel(label: string): this\r\n {\r\n this._label = label;\r\n return this;\r\n }\r\n\r\n /** Select the shader entry point for the fragment stage. */\r\n withShader(shader: Shader, entry: string): this {\r\n this._shader = shader;\r\n this._entry = entry;\r\n return this;\r\n }\r\n\r\n build(): ComputePipeline {\r\n const shader = this._shader;\r\n const layout = mapUndefined(\r\n shader._bindGroupLayouts,\r\n bindGroupLayouts => this._ctx.device.createPipelineLayout({\r\n bindGroupLayouts: bindGroupLayouts.map(value => value._inner),\r\n label: this._label\r\n })\r\n ) ?? \"auto\";\r\n\r\n const desc: GPUComputePipelineDescriptor = {\r\n label: this._label,\r\n compute: {\r\n module: shader._inner,\r\n entryPoint: this._entry\r\n },\r\n layout\r\n };\r\n return new ComputePipeline(this._ctx.device.createComputePipeline(desc));\r\n }\r\n}","import {Buffer, BufferBuilder, BufferUsage} from \"./buffers/Buffer\";\r\nimport {WebGPUContext} from \"./WebGPUContext\";\r\nimport {mapUndefined} from \"./utils/mapUndefined\";\r\n\r\n/**\r\n * Index buffer formats supported by the library.\r\n */\r\nexport enum IndexFormat {\r\n Uint16 = 'uint16',\r\n Uint32 = 'uint32'\r\n}\r\n\r\nclass IndexBuffer {\r\n buffer: Buffer;\r\n format: IndexFormat;\r\n count: number;\r\n\r\n constructor(data: Uint16Array | Uint32Array, ctx: WebGPUContext, keepData: boolean = false) {\r\n // Use BYTES_PER_ELEMENT on the union-typed array in a typed manner to avoid 'any' casts\r\n const bytesPerElement = (data as Uint16Array | Uint32Array).BYTES_PER_ELEMENT;\r\n this.format = bytesPerElement === 2 ? IndexFormat.Uint16 : IndexFormat.Uint32;\r\n this.count = data.length;\r\n this.buffer = new BufferBuilder(ctx)\r\n .withData(data.buffer, keepData)\r\n .withUsage(BufferUsage.CopyDst | BufferUsage.Index)\r\n .build();\r\n }\r\n}\r\n\r\n/**\r\n * Mesh topology enum (maps to GPU primitive topologies).\r\n */\r\nexport enum MeshTopology {\r\n TriangleList = 'triangle-list',\r\n TriangleStrip = 'triangle-strip',\r\n LineList = 'line-list',\r\n LineStrip = 'line-strip',\r\n PointList = 'point-list'\r\n}\r\n\r\n/**\r\n * Winding mode for front-facing triangles.\r\n */\r\nexport enum FrontFace {\r\n Clockwise = 'cw',\r\n CounterClockwise = 'ccw'\r\n}\r\n\r\n/**\r\n * Vertex attribute formats supported by the helper. These are translated into\r\n * GPU vertex attribute formats when building pipelines.\r\n */\r\nexport enum VertexFormat {\r\n Uint8 = 'uint8',\r\n Uint8x2 = 'uint8x2',\r\n Uint8x4 = 'uint8x4',\r\n Sint8 = 'sint8',\r\n Sint8x2 = 'sint8x2',\r\n Sint8x4 = 'sint8x4',\r\n Unorm8 = 'unorm8',\r\n Unorm8x2 = 'unorm8x2',\r\n Unorm8x4 = 'unorm8x4',\r\n Snorm8 = 'snorm8',\r\n Snorm8x2 = 'snorm8x2',\r\n Snorm8x4 = 'snorm8x4',\r\n Uint16 = 'uint16',\r\n Uint16x2 = 'uint16x2',\r\n Uint16x4 = 'uint16x4',\r\n Sint16 = 'sint16',\r\n Sint16x2 = 'sint16x2',\r\n Sint16x4 = 'sint16x4',\r\n Unorm16 = 'unorm16',\r\n Unorm16x2 = 'unorm16x2',\r\n Unorm16x4 = 'unorm16x4',\r\n Snorm16 = 'snorm16',\r\n Snorm16x2 = 'snorm16x2',\r\n Snorm16x4 = 'snorm16x4',\r\n Float16 = 'float16',\r\n Float16x2 = 'float16x2',\r\n Float16x4 = 'float16x4',\r\n Float32 = 'float32',\r\n Float32x2 = 'float32x2',\r\n Float32x3 = 'float32x3',\r\n Float32x4 = 'float32x4',\r\n Uint32 = 'uint32',\r\n Uint32x2 = 'uint32x2',\r\n Uint32x3 = 'uint32x3',\r\n Uint32x4 = 'uint32x4',\r\n Sint32 = 'sint32',\r\n Sint32x2 = 'sint32x2',\r\n Sint32x3 = 'sint32x3',\r\n Sint32x4 = 'sint32x4',\r\n Unorm10_10_10_2 = 'unorm10-10-10-2',\r\n Unorm8x4_bgra = 'unorm8x4-bgra'\r\n}\r\n\r\n/**\r\n * Lightweight Mesh representation containing vertex streams and an optional index buffer.\r\n * Use `MeshBuilder` to construct instances.\r\n */\r\nexport class Mesh {\r\n private _topology: MeshTopology;\r\n private _frontFace: FrontFace;\r\n private _streams: VertexStream[] = [];\r\n private _indexBuffer?: IndexBuffer;\r\n private _numVertices: number;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(topology: MeshTopology, frontFace: FrontFace, streams: VertexStream[], indexBuffer?: IndexBuffer) {\r\n this._topology = topology;\r\n this._frontFace = frontFace;\r\n this._streams = streams;\r\n this._indexBuffer = indexBuffer;\r\n this._numVertices = this._streams[0].numVertices;\r\n\r\n this._streams.forEach(\r\n stream => console.assert(stream.numVertices === this._numVertices,\r\n \"All vertex streams must have the same number of vertices.\"\r\n ));\r\n }\r\n\r\n /** The primitive topology for this mesh. */\r\n get topology(): MeshTopology {\r\n return this._topology;\r\n }\r\n\r\n /** The winding used to determine front-facing triangles. */\r\n get frontFace(): FrontFace {\r\n return this._frontFace;\r\n }\r\n\r\n /** The number of vertex streams in this mesh. */\r\n get numStreams() {\r\n return this._streams.length;\r\n }\r\n\r\n /** Get the number of vertices in the first vertex stream. */\r\n get numVertices() {\r\n return this._numVertices;\r\n }\r\n\r\n /** Get the GPU-backed vertex buffer for a given stream index. */\r\n getVertexBuffer(streamIndex: number): Buffer {\r\n return this._streams[streamIndex].buffer!;\r\n }\r\n\r\n /** Get the stride (byte size) of a vertex in the requested stream. */\r\n getStreamStride(streamIndex: number): number {\r\n return this._streams[streamIndex].stride;\r\n }\r\n\r\n /** Get the declared attributes for a vertex stream. */\r\n getStreamAttributes(streamIndex: number): VertexAttribute[] {\r\n return this._streams[streamIndex].attributes;\r\n }\r\n\r\n /** Get the optional index buffer backing this mesh. */\r\n get indexBuffer(): Buffer | undefined {\r\n return this._indexBuffer?.buffer;\r\n }\r\n\r\n /** Get the index format of the index buffer backing this mesh. */\r\n get indexFormat(): IndexFormat {\r\n return this._indexBuffer?.format ?? IndexFormat.Uint16;\r\n }\r\n\r\n /** Get the number of indices in the index buffer backing this mesh. */\r\n get numIndices(): number {\r\n return this._indexBuffer?.count ?? 0;\r\n }\r\n}\r\n\r\nfunction vertexFormatByteSize(format: VertexFormat): number {\r\n switch (format) {\r\n case VertexFormat.Uint8:\r\n case VertexFormat.Sint8:\r\n case VertexFormat.Unorm8:\r\n case VertexFormat.Snorm8:\r\n return 1;\r\n case VertexFormat.Uint8x2:\r\n case VertexFormat.Sint8x2:\r\n case VertexFormat.Unorm8x2:\r\n case VertexFormat.Snorm8x2:\r\n case VertexFormat.Uint16:\r\n case VertexFormat.Sint16:\r\n case VertexFormat.Unorm16:\r\n case VertexFormat.Snorm16:\r\n case VertexFormat.Float16:\r\n return 2;\r\n case VertexFormat.Uint8x4:\r\n case VertexFormat.Sint8x4:\r\n case VertexFormat.Unorm8x4:\r\n case VertexFormat.Snorm8x4:\r\n case VertexFormat.Uint16x2:\r\n case VertexFormat.Sint16x2:\r\n case VertexFormat.Unorm16x2:\r\n case VertexFormat.Snorm16x2:\r\n case VertexFormat.Float16x2:\r\n case VertexFormat.Float32:\r\n case VertexFormat.Uint32:\r\n case VertexFormat.Sint32:\r\n case VertexFormat.Unorm10_10_10_2:\r\n case VertexFormat.Unorm8x4_bgra:\r\n return 4;\r\n case VertexFormat.Uint16x4:\r\n case VertexFormat.Sint16x4:\r\n case VertexFormat.Unorm16x4:\r\n case VertexFormat.Snorm16x4:\r\n case VertexFormat.Float16x4:\r\n case VertexFormat.Float32x2:\r\n case VertexFormat.Uint32x2:\r\n case VertexFormat.Sint32x2:\r\n return 8;\r\n case VertexFormat.Float32x3:\r\n case VertexFormat.Uint32x3:\r\n case VertexFormat.Sint32x3:\r\n return 12;\r\n\r\n case VertexFormat.Float32x4:\r\n case VertexFormat.Uint32x4:\r\n case VertexFormat.Sint32x4:\r\n return 16;\r\n }\r\n}\r\n\r\nexport type VertexAttribute = {\r\n name: string;\r\n format: VertexFormat;\r\n offset: number;\r\n}\r\n\r\nclass VertexStream {\r\n stride: number = 0;\r\n attributes: VertexAttribute[] = [];\r\n buffer?: Buffer;\r\n\r\n pushAttribute(name: string, format: VertexFormat) {\r\n this.attributes.push({name, format, offset: this.stride});\r\n this.stride += vertexFormatByteSize(format);\r\n }\r\n\r\n get numVertices(): number {\r\n return this.buffer!.size / this.stride;\r\n }\r\n}\r\n\r\n/**\r\n * Builder helper used when creating a vertex stream for a Mesh.\r\n */\r\nexport class StreamBuilder {\r\n private _stream: VertexStream;\r\n private _ctx: WebGPUContext;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(stream: VertexStream, ctx: WebGPUContext) {\r\n this._stream = stream;\r\n this._ctx = ctx;\r\n }\r\n\r\n /**\r\n * Add a vertex attribute to the stream.\r\n * @param name - attribute name used by the shader bindings\r\n * @param format - attribute format (see VertexFormat)\r\n */\r\n pushAttribute(name: string, format: VertexFormat): this {\r\n this._stream.pushAttribute(name, format);\r\n return this;\r\n }\r\n\r\n /**\r\n * Upload vertex data for this stream. `keepOnCPU` controls whether the\r\n * source ArrayBuffer is retained in memory for readback.\r\n */\r\n withData(data: ArrayBufferLike, keepOnCPU: boolean = false) {\r\n this._stream.buffer = new BufferBuilder(this._ctx)\r\n .withData(data, keepOnCPU)\r\n .withUsage(BufferUsage.Vertex | BufferUsage.CopyDst)\r\n .build();\r\n }\r\n}\r\n\r\n/**\r\n * Fluent builder for creating a Mesh. Use `pushStream()` to describe vertex\r\n * streams and `withIndexData()` to add optional indices.\r\n */\r\nexport class MeshBuilder {\r\n private _topology: MeshTopology = MeshTopology.TriangleList;\r\n private _frontFace: FrontFace = FrontFace.CounterClockwise;\r\n private _streams: VertexStream[] = [];\r\n private _ctx: WebGPUContext;\r\n private _indexBuffer?: IndexBuffer;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(ctx: WebGPUContext) {\r\n this._ctx = ctx;\r\n }\r\n\r\n /** Add a vertex stream using a builder callback. */\r\n pushStream(buildFunc: (builder: StreamBuilder) => void): this {\r\n const stream = new VertexStream();\r\n buildFunc(new StreamBuilder(stream, this._ctx));\r\n console.assert(stream.buffer !== undefined, \"Vertex stream must have a buffer. Did you forget to call withData()?\");\r\n this._streams.push(stream);\r\n return this;\r\n }\r\n\r\n /** Set the winding used to determine front-facing triangles. Defaults to counter-clockwise. */\r\n withFrontFace(value: FrontFace): this {\r\n this._frontFace = value;\r\n return this;\r\n }\r\n\r\n /** Set the primitive topology for the mesh. Defaults to triangle list. */\r\n withTopology(value: MeshTopology): this {\r\n this._topology = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Provide index data (Uint16Array or Uint32Array). If `keepOnCPU` is true the\r\n * original array buffer will be preserved on the resulting mesh's index buffer.\r\n */\r\n withIndexData(data: Uint16Array | Uint32Array, keepOnCPU: boolean = false): this {\r\n this._indexBuffer = mapUndefined(data, data => new IndexBuffer(data, this._ctx, keepOnCPU));\r\n return this;\r\n }\r\n\r\n /** Build the mesh. */\r\n build(): Mesh {\r\n console.assert(this._streams.length > 0, \"Mesh must have at least one vertex stream.\");\r\n return new Mesh(\r\n this._topology,\r\n this._frontFace,\r\n this._streams,\r\n this._indexBuffer,\r\n );\r\n }\r\n}\r\n","import {RenderTarget} from \"./RenderTarget\";\r\nimport {RenderPipeline} from \"./RenderPipeline\";\r\nimport {Mesh} from \"./Mesh\";\r\nimport {BindGroup} from \"./BindGroup\";\r\nimport {IndexedCollection} from \"./utils/IndexedCollection\";\r\nimport {mapUndefined} from \"./utils/mapUndefined\";\r\nimport {TextureFormat} from \"./enums\";\r\n\r\n/**\r\n * Lightweight wrapper around GPURenderPassEncoder. Provides a minimal API\r\n * for ending the pass; higher-level helpers may be added later.\r\n */\r\nexport class RenderPass {\r\n private readonly _inner: GPURenderPassEncoder;\r\n private _renderPipeline?: RenderPipeline;\r\n private _numVertices: number = 0;\r\n private _numIndices: number = 0;\r\n\r\n /**\r\n * Internal accessor for the underlying GPURenderPassEncoder. Not intended for public use.\r\n * @internal\r\n */\r\n constructor(inner: GPURenderPassEncoder) {\r\n this._inner = inner;\r\n }\r\n\r\n /**\r\n * Set the render pipeline to use for the next draw calls.\r\n * @param pipeline\r\n */\r\n setPipeline(pipeline: RenderPipeline): this {\r\n if (this._renderPipeline != pipeline) {\r\n this._inner.setPipeline(pipeline._inner);\r\n this._renderPipeline = pipeline;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the mesh to use for the next draw calls.\r\n * @param mesh\r\n */\r\n setMesh(mesh: Mesh): this {\r\n for (let i = 0; i < mesh.numStreams; ++i) {\r\n const vertex_buffer = mesh.getVertexBuffer(i);\r\n this._inner.setVertexBuffer(i, vertex_buffer._inner);\r\n }\r\n\r\n this._numVertices = mesh.numVertices;\r\n\r\n const indexBuffer = mesh.indexBuffer;\r\n if (indexBuffer) {\r\n this._inner.setIndexBuffer(indexBuffer._inner, mesh.indexFormat);\r\n this._numIndices = mesh.numIndices;\r\n } else {\r\n this._numIndices = 0;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set a bind group at the given index.\r\n * @param index - bind group index in the render pipeline layout\r\n * @param bindGroup - a `BindGroup` instance\r\n */\r\n setBindGroup(index: number, bindGroup: BindGroup): this {\r\n this._inner.setBindGroup(index, bindGroup._inner);\r\n return this;\r\n }\r\n\r\n /**\r\n * Issue a draw call using the currently set pipeline and mesh.\r\n */\r\n draw(): this {\r\n if (this._numIndices) {\r\n this._inner.drawIndexed(this._numIndices, 1, 0, 0, 0);\r\n } else {\r\n this._inner.draw(this._numVertices, 1, 0, 0);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * End the render pass. After calling end(), the underlying encoder may\r\n * continue recording other passes or be finished/submitted.\r\n */\r\n end() {\r\n this._inner.end();\r\n }\r\n}\r\n\r\n/**\r\n * Fluent builder for configuring and creating a render pass.\r\n *\r\n * Use the builder to specify color targets, clear values and labels before\r\n * calling `build()` to obtain a `RenderPass` instance.\r\n */\r\nexport class RenderPassBuilder {\r\n private _encoder: GPUCommandEncoder;\r\n private _label?: string;\r\n private _colorTargets: RenderTarget[] = [];\r\n private _clearColors: number[][] = [];\r\n private _defaultTarget: RenderTarget;\r\n private _defaultDepthTarget?: RenderTarget;\r\n private _depthTarget?: RenderTarget;\r\n private _clearDepth?: number;\r\n private _clearStencil?: number;\r\n private _globalBindGroups: BindGroup[];\r\n\r\n /**\r\n * Create a new builder instance. This should only be called from the CommandEncoder\r\n * instance (see {@link CommandEncoder.createRenderPass}).\r\n * @internal\r\n */\r\n constructor(commandEncoder: GPUCommandEncoder, globalBindGroups: BindGroup[], defaultTarget: RenderTarget, defaultDepthTarget?: RenderTarget) {\r\n this._encoder = commandEncoder;\r\n this._defaultTarget = defaultTarget;\r\n this._defaultDepthTarget = defaultDepthTarget;\r\n this._globalBindGroups = globalBindGroups;\r\n }\r\n\r\n /**\r\n * Assign a human-readable label for the render pass (useful for GPU debuggers).\r\n */\r\n withLabel(label: string): this {\r\n this._label = label;\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a color target to render into. If no targets are added the default\r\n * backbuffer target will be used.\r\n */\r\n withColorTarget(target: RenderTarget): this {\r\n this._colorTargets.push(target);\r\n return this;\r\n }\r\n\r\n withDepthStencilTarget(target: RenderTarget): this {\r\n this._depthTarget = target;\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the clear color for the most recently added color target.\r\n * Overloads allow passing an array or individual color components.\r\n */\r\n withClearColor(): this;\r\n withClearColor(r: number[] | IndexedCollection): this;\r\n withClearColor(r: number, g: number, b: number): this;\r\n withClearColor(r: number, g: number, b: number, a: number): this;\r\n withClearColor(r?: number | number[] | IndexedCollection, g?: number, b?: number, a?: number): this {\r\n let color;\r\n if (r === undefined) {\r\n color = [0.0, 0.0, 0.0, 1.0];\r\n } else if (typeof r === 'number') {\r\n color = [r, g ?? 0.0, b ?? 0.0, a ?? 1.0];\r\n } else {\r\n color = [r[0], r[1], r[2], r[3] ?? 1.0];\r\n }\r\n\r\n // rendering to the default target is special cased, so we need to set the clear color for the last target\r\n if (this._colorTargets.length === 0) {\r\n this._clearColors[0] = color;\r\n } else {\r\n this._clearColors[this._colorTargets.length - 1] = color;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the clear stencil value\r\n */\r\n withClearStencil(stencil: number): this {\r\n this._clearStencil = stencil;\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the clear depth value\r\n */\r\n withClearDepth(depth: number): this {\r\n this._clearDepth = depth;\r\n return this;\r\n }\r\n\r\n /**\r\n * Build and begin the render pass. Returns a `RenderPass` wrapper around\r\n * the low-level GPURenderPassEncoder.\r\n */\r\n build(): RenderPass {\r\n let targets: RenderTarget[];\r\n let depthTarget: RenderTarget | undefined;\r\n\r\n // if anything was specified specifically, use those, otherwise use the defaults\r\n if (this._colorTargets.length || !!this._depthTarget) {\r\n targets = this._colorTargets;\r\n depthTarget = this._depthTarget;\r\n } else {\r\n targets = [this._defaultTarget];\r\n depthTarget = this._defaultDepthTarget;\r\n }\r\n\r\n let stencilLoadOp: GPULoadOp | undefined;\r\n let stencilStoreOp: GPUStoreOp | undefined;\r\n let stencilClearValue: number | undefined;\r\n\r\n if (depthTarget?.format === TextureFormat.Depth32FloatStencil8 || depthTarget?.format === TextureFormat.Depth24PlusStencil8) {\r\n stencilLoadOp = this._clearStencil != undefined ? 'clear' : 'load';\r\n stencilStoreOp = mapUndefined(this._clearStencil, () => 'store');\r\n stencilClearValue = this._clearStencil;\r\n }\r\n\r\n const colorAttachments: GPURenderPassColorAttachment[] = targets.map((target, i) => ({\r\n view: target._inner,\r\n loadOp: this._clearColors[i] ? 'clear' : 'load',\r\n storeOp: 'store',\r\n clearValue: this._clearColors[i]\r\n }));\r\n\r\n const desc: GPURenderPassDescriptor = {\r\n colorAttachments,\r\n depthStencilAttachment: mapUndefined(depthTarget, target => ({\r\n view: target._inner,\r\n depthClearValue: this._clearDepth,\r\n depthLoadOp: this._clearDepth != undefined ? 'clear' : 'load',\r\n depthStoreOp: mapUndefined(this._clearDepth, () => 'store'),\r\n stencilClearValue,\r\n stencilLoadOp,\r\n stencilStoreOp\r\n\r\n })),\r\n label: this._label\r\n };\r\n\r\n const pass = new RenderPass(this._encoder.beginRenderPass(desc));\r\n this._globalBindGroups.forEach((group, i) => pass.setBindGroup(i, group));\r\n return pass;\r\n }\r\n}\r\n","import {Shader} from \"./Shader\";\r\nimport {mapUndefined} from \"./utils/mapUndefined\";\r\nimport {WebGPUContext} from \"./WebGPUContext\";\r\nimport {Mesh} from \"./Mesh\";\r\nimport {CompareFunction, CullMode, TextureFormat} from \"./enums\";\r\nimport {BlendMode} from \"./BlendMode\";\r\n\r\n/**\r\n * Thin wrapper around GPURenderPipeline exposing a small helper for attribute\r\n * location lookup. The underlying pipeline and shader are available for advanced use.\r\n */\r\nexport class RenderPipeline {\r\n /** @internal */\r\n readonly _inner: GPURenderPipeline;\r\n private _shader: Shader;\r\n\r\n constructor(inner: GPURenderPipeline, shader: Shader) {\r\n this._inner = inner;\r\n this._shader = shader;\r\n }\r\n\r\n /**\r\n * Helper to get the shader-declared attribute location for a named attribute.\r\n */\r\n public getVertexAttributeLocation(name: string): number | undefined {\r\n return this._shader.getVertexAttributeLocation(name);\r\n }\r\n}\r\n\r\n/**\r\n * Fluent builder for creating a GPURenderPipeline. Attach a `Shader` and\r\n * optionally a `Mesh` (to derive vertex buffer layouts) before calling `build()`.\r\n */\r\nexport class RenderPipelineBuilder {\r\n private _ctx: WebGPUContext;\r\n private _shader?: Shader;\r\n private _colorTargets: GPUColorTargetState[] = [];\r\n private _defaultColorState: GPUColorTargetState[];\r\n private _depthState?: GPUDepthStencilState;\r\n private _defaultDepthState?: GPUDepthStencilState;\r\n private _vertexEntry: string | undefined = undefined;\r\n private _fragmentEntry: string | undefined = undefined;\r\n private _label: string | undefined = undefined;\r\n private _overrideConstants: Record<string, number> = {};\r\n private _cullMode: CullMode = CullMode.Back;\r\n private _mesh: Mesh | undefined = undefined;\r\n\r\n constructor(ctx: WebGPUContext, defaultDepthFormat?: TextureFormat) {\r\n this._ctx = ctx;\r\n this._defaultColorState = [{\r\n format: ctx.format,\r\n blend: undefined,\r\n writeMask: GPUColorWrite.ALL\r\n }];\r\n this._defaultDepthState = mapUndefined(defaultDepthFormat, format => ({\r\n format,\r\n depthWriteEnabled: true,\r\n depthCompare: 'less',\r\n }))\r\n }\r\n\r\n /** Assign a human-readable label for the pipeline (useful in graphics debuggers). */\r\n withLabel(label: string): this {\r\n this._label = label;\r\n return this;\r\n }\r\n\r\n /** Set face-culling mode. Default is `Back`. */\r\n withCullMode(value: CullMode): this {\r\n this._cullMode = value;\r\n return this;\r\n }\r\n\r\n /** Provide a Mesh to automatically derive vertex buffer layouts. */\r\n withMesh(mesh: Mesh): this {\r\n this._mesh = mesh;\r\n return this;\r\n }\r\n\r\n /** Attach a compiled Shader to the pipeline. */\r\n withShader(shader: Shader): this {\r\n this._shader = shader;\r\n return this;\r\n }\r\n\r\n /** Select the shader entry point for the vertex stage. */\r\n withVertexShader(entry: string): this {\r\n this._vertexEntry = entry;\r\n return this;\r\n }\r\n\r\n /** Select the shader entry point for the fragment stage. */\r\n withFragmentShader(entry: string): this {\r\n this._fragmentEntry = entry;\r\n return this;\r\n }\r\n\r\n /** Add a color target with the given texture format. */\r\n withColorTarget(format: TextureFormat): this {\r\n this._colorTargets.push({\r\n format,\r\n blend: undefined,\r\n writeMask: GPUColorWrite.ALL\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a depth target with the given texture format.\r\n */\r\n withDepthTarget(format: TextureFormat): this {\r\n this._depthState = {\r\n format,\r\n ...this._defaultDepthState\r\n };\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the depth compare function. Default is `less`.\r\n * @param compare\r\n */\r\n withDepthCompare(compare: CompareFunction): this {\r\n const target = this._depthState ?? this._defaultDepthState;\r\n if (!target) {\r\n console.warn(\"No depth target set. Setting depth compare function has no effect.\");\r\n }\r\n else {\r\n target.depthCompare = compare;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Enable or disable depth writes. Default is `true`.\r\n * @param enabled\r\n */\r\n withDepthWrite(enabled: boolean): this {\r\n const target = this._depthState ?? this._defaultDepthState;\r\n if (!target) {\r\n console.warn(\"No depth target set. Setting depth write enabled has no effect.\");\r\n }\r\n else {\r\n target.depthWriteEnabled = enabled;\r\n }\r\n return this;\r\n }\r\n\r\n /** Override a shader constant for specialization. */\r\n withOverrideConstant(id: string, value: number): this {\r\n this._overrideConstants[id] = value;\r\n return this;\r\n }\r\n\r\n /** Set the blend mode for the last assigned (or default) color target. */\r\n withBlendMode(blendMode: BlendMode): this {\r\n this.lastColorTarget.blend = blendMode._inner;\r\n return this;\r\n }\r\n\r\n /**\r\n * Build and create the `RenderPipeline`. Throws if required pieces (shader/vertices)\r\n * are missing.\r\n */\r\n build(): RenderPipeline {\r\n if (!this._shader) {\r\n throw new Error(\"Shader not specified. Use withShader() to set the shader to use.\");\r\n }\r\n\r\n const shader = this._shader!;\r\n\r\n if (this._vertexEntry === undefined) {\r\n throw new Error(\"Shader does not contain a vertex entry point. Use ShaderBuilder.withVertexShader() to set one.\");\r\n }\r\n\r\n let colorTargets: GPUColorTargetState[];\r\n let depthState: GPUDepthStencilState | undefined;\r\n\r\n if (this._colorTargets.length || !!this._depthState) {\r\n colorTargets = this._colorTargets;\r\n depthState = this._depthState;\r\n }\r\n else {\r\n // only use defaults if no targets were set explicitly\r\n colorTargets = this._defaultColorState;\r\n depthState = this._defaultDepthState;\r\n }\r\n\r\n const primitive: GPUPrimitiveState | undefined = mapUndefined(this._mesh, mesh => ({\r\n topology: mesh.topology,\r\n frontFace: mesh.frontFace,\r\n cullMode: this._cullMode,\r\n }));\r\n\r\n const buffers = mapUndefined(this._mesh, mesh => {\r\n const buffers: GPUVertexBufferLayout[] = [];\r\n for (let i = 0; i < mesh.numStreams; ++i) {\r\n const attributes = mesh.getStreamAttributes(i)\r\n .filter(attr => shader.hasVertexAttribute(attr.name))\r\n .map(attr => ({\r\n shaderLocation: shader.getVertexAttributeLocation(attr.name)!,\r\n offset: attr.offset,\r\n format: attr.format,\r\n }));\r\n\r\n buffers.push({\r\n arrayStride: mesh.getStreamStride(i),\r\n stepMode: 'vertex',\r\n attributes\r\n });\r\n }\r\n return buffers;\r\n });\r\n\r\n const layout = mapUndefined(\r\n shader._bindGroupLayouts,\r\n bindGroupLayouts => this._ctx.device.createPipelineLayout({\r\n bindGroupLayouts: bindGroupLayouts.map(value => value._inner),\r\n label: this._label\r\n })\r\n ) ?? \"auto\";\r\n\r\n const desc: GPURenderPipelineDescriptor = {\r\n label: this._label,\r\n layout,\r\n primitive,\r\n depthStencil: depthState,\r\n vertex: {\r\n buffers,\r\n module: shader._inner,\r\n entryPoint: this._vertexEntry!,\r\n constants: this._overrideConstants\r\n },\r\n fragment: mapUndefined(this._fragmentEntry, entry => ({\r\n module: shader._inner,\r\n entryPoint: entry,\r\n targets: colorTargets,\r\n constants: this._overrideConstants\r\n }))\r\n }\r\n\r\n const inner = this._ctx.device.createRenderPipeline(desc);\r\n return new RenderPipeline(inner, shader);\r\n }\r\n\r\n private get lastColorTarget(): GPUColorTargetState {\r\n return this._colorTargets.length ? this._colorTargets[this._colorTargets.length - 1] : this._defaultColorState[0];\r\n }\r\n}\r\n","import {Texture} from \"./Texture\";\r\nimport {TextureFormat} from \"./enums\";\r\n\r\n/**\r\n * Lightweight wrapper around a GPUTextureView representing a render target.\r\n * Use `view()` to get the underlying GPUTextureView when building render passes.\r\n */\r\nexport class RenderTarget {\r\n readonly _inner: GPUTextureView;\r\n private _format: TextureFormat;\r\n\r\n constructor(view: GPUTextureView, format: TextureFormat) {\r\n this._inner = view;\r\n this._format = format;\r\n }\r\n\r\n get format(): TextureFormat\r\n {\r\n return this._format;\r\n }\r\n}\r\n\r\n/**\r\n * Builder for creating a `RenderTarget` from a `Texture`.\r\n *\r\n * The builder produces a GPUTextureView configured with a sensible default\r\n * descriptor and wraps it in a `RenderTarget` helper.\r\n */\r\nexport class RenderTargetBuilder {\r\n private _texture: Texture;\r\n private _baseMipLevel = 0;\r\n private _baseArrayLayer = 0;\r\n\r\n /**\r\n * Create a new RenderTargetBuilder for the given texture. This should only be called\r\n * from the TinyHelix instance (see {@link TinyHelix.createRenderTarget}).\r\n * @param texture\r\n *\r\n * @internal\r\n */\r\n constructor(texture: Texture) {\r\n this._texture = texture;\r\n }\r\n\r\n /**\r\n * Set the base mip level to use for the render target. Defaults to 0.\r\n */\r\n withMipLevel(level: number): this {\r\n this._baseMipLevel = level;\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the base array layer to use for the render target. Defaults to 0.\r\n */\r\n withArrayLayer(layer: number): this {\r\n this._baseArrayLayer = layer;\r\n return this;\r\n }\r\n\r\n /**\r\n * Create and return a new `RenderTarget` instance.\r\n */\r\n build(): RenderTarget {\r\n const tex = this._texture._inner;\r\n const desc: GPUTextureViewDescriptor = {\r\n format: tex.format,\r\n dimension: tex.dimension,\r\n aspect: 'all',\r\n baseMipLevel: this._baseMipLevel,\r\n mipLevelCount: 1,\r\n baseArrayLayer: this._baseArrayLayer,\r\n arrayLayerCount: 1\r\n }\r\n return new RenderTarget(this._texture._inner.createView(desc), this._texture.format);\r\n }\r\n}\r\n","import {WebGPUContext} from \"./WebGPUContext\";\r\nimport {AddressMode, FilterMode} from \"./enums\";\r\n\r\nexport class Sampler {\r\n readonly _inner: GPUSampler;\r\n\r\n private static DEFAULT_TRILINEAR: Sampler;\r\n\r\n constructor(inner: GPUSampler) {\r\n this._inner = inner;\r\n }\r\n}\r\n\r\nexport class SamplerBuilder {\r\n private _ctx: WebGPUContext;\r\n private _addressModeU?: GPUAddressMode;\r\n private _addressModeV?: GPUAddressMode;\r\n private _addressModeW?: GPUAddressMode;\r\n private _minFilter?: GPUFilterMode;\r\n private _magFilter?: GPUFilterMode;\r\n private _mipmapFilter?: GPUFilterMode;\r\n private _minMipLevel?: number;\r\n private _maxMipLevel?: number;\r\n private _maxAnisotropy?: number;\r\n private _compare?: GPUCompareFunction;\r\n\r\n constructor(ctx: WebGPUContext) {\r\n this._ctx = ctx;\r\n }\r\n\r\n withAddressMode(u: AddressMode, v?: AddressMode, w?: AddressMode): this\r\n {\r\n this._addressModeU = u;\r\n this._addressModeV = v ?? u;\r\n this._addressModeW = w ?? u;\r\n return this;\r\n }\r\n\r\n withFiltering(minFilter: FilterMode, magFilter?: FilterMode, mipmapFilter?: FilterMode): this\r\n {\r\n this._minFilter = minFilter;\r\n this._magFilter = magFilter ?? minFilter;\r\n this._mipmapFilter = mipmapFilter ?? minFilter;\r\n return this;\r\n }\r\n\r\n withTrilinearFiltering(): this\r\n {\r\n this.withFiltering(FilterMode.Linear);\r\n return this;\r\n }\r\n\r\n withNearestFiltering(): this\r\n {\r\n this.withFiltering(FilterMode.Nearest);\r\n return this;\r\n }\r\n\r\n withAnisotropicFiltering(maxAnisotropy: number): this\r\n {\r\n this.withFiltering(FilterMode.Linear);\r\n this._maxAnisotropy = maxAnisotropy;\r\n return this;\r\n }\r\n\r\n withMinMipLevel(level: number): this\r\n {\r\n this._minMipLevel = level;\r\n return this;\r\n }\r\n\r\n withMaxMipLevel(level: number): this\r\n {\r\n this._maxMipLevel = level;\r\n return this;\r\n }\r\n\r\n withCompareFunction(compare: GPUCompareFunction): this\r\n {\r\n this._compare = compare;\r\n return this;\r\n }\r\n\r\n build(): Sampler\r\n {\r\n return new Sampler(this._ctx.device.createSampler({\r\n addressModeU: this._addressModeU,\r\n addressModeV: this._addressModeV,\r\n addressModeW: this._addressModeW,\r\n magFilter: this._magFilter,\r\n minFilter: this._minFilter,\r\n mipmapFilter: this._mipmapFilter,\r\n lodMinClamp: this._minMipLevel,\r\n lodMaxClamp: this._maxMipLevel,\r\n compare: this._compare,\r\n maxAnisotropy: this._maxAnisotropy\r\n }));\r\n }\r\n}","import {WebGPUContext} from \"./WebGPUContext\";\r\nimport BindGroupLayoutBuilder, {BindGroupBuilder, BindGroupLayout} from \"./BindGroup\";\r\n\r\ntype AttributeMap = Map<string, number>;\r\ntype BindGroupLayoutFunc = (builder: BindGroupLayoutBuilder) => void;\r\n\r\n/**\r\n * Wrapper around GPUShaderModule. Keeps a map of vertex attribute names to\r\n * shader locations to aid pipeline construction.\r\n */\r\nexport class Shader {\r\n /** @internal */\r\n readonly _inner: GPUShaderModule;\r\n /** @internal */\r\n readonly _bindGroupLayouts: BindGroupLayout[] | undefined;\r\n\r\n private _vertexAttributes: AttributeMap;\r\n private _ctx: WebGPUContext;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(inner: GPUShaderModule, ctx: WebGPUContext, vertexAttributes: AttributeMap, bindGroupLayouts?: BindGroupLayout[]) {\r\n this._inner = inner;\r\n this._ctx = ctx;\r\n this._vertexAttributes = vertexAttributes;\r\n this._bindGroupLayouts = bindGroupLayouts;\r\n }\r\n\r\n /**\r\n * Get the shader location for a named vertex attribute. Returns undefined if the attribute\r\n * is not declared by the shader.\r\n */\r\n getVertexAttributeLocation(name: string): number | undefined {\r\n return this._vertexAttributes.get(name) ?? undefined;\r\n }\r\n\r\n /**\r\n * Returns true if the shader declares a vertex attribute with the given name.\r\n * @param name\r\n */\r\n hasVertexAttribute(name: string): boolean {\r\n return this._vertexAttributes.has(name);\r\n }\r\n\r\n /**\r\n * Create a BindGroupBuilder for the shader's bind group at the given index.\r\n * @param group - index of the bind group declared by the shader\r\n */\r\n createBindGroup(group: number): BindGroupBuilder {\r\n return new BindGroupBuilder(this._ctx, this._bindGroupLayouts![group]);\r\n }\r\n}\r\n\r\n/**\r\n * Builder for creating shader modules and declaring attribute locations used by the helper\r\n * pipeline builder.\r\n */\r\nexport class ShaderBuilder {\r\n private _code?: string;\r\n private _label?: string;\r\n private _ctx: WebGPUContext;\r\n private _vertexAttributes: AttributeMap = new Map(); // name -> location\r\n private _bindGroupLayouts: BindGroupLayout[] | undefined;\r\n private _includes: Map<string, string> = new Map();\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(ctx: WebGPUContext) {\r\n this._ctx = ctx;\r\n }\r\n\r\n /** Optional label for the underlying GPUShaderModule. */\r\n withLabel(label: string): this {\r\n this._label = label;\r\n return this;\r\n }\r\n\r\n /** Set WGSL or other shader code to compile into a GPUShaderModule. */\r\n withCode(code: string): this {\r\n this._code = code;\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a named include to the shader code. The include will be expanded\r\n * in the shader code before compilation. The include name must be unique\r\n * within the shader code. This allows using `#include<name>` in the shader\r\n * code to include other files. While this is not standard WGSL, it's too\r\n * useful not to support.\r\n *\r\n * @param name - The name as used in the `#include<name>` directive.\r\n * @param code - The code the include should expand to.\r\n */\r\n withInclude(name: string, code: string): this {\r\n this._includes.set(name, code);\r\n return this;\r\n }\r\n\r\n /** Declare a named vertex attribute and the location it maps to in the shader. */\r\n withVertexAttribute(name: string, location: number): this {\r\n this._vertexAttributes.set(name, location);\r\n return this;\r\n }\r\n\r\n /**\r\n * Declare a bind group layout used by this shader. The provided builder\r\n * callback is used to construct the layout description.\r\n */\r\n withBindGroup(index: number, layout: BindGroupLayout): this;\r\n withBindGroup(index: number, buildFunc: (builder: BindGroupLayoutBuilder) => void): this;\r\n withBindGroup(index: number, layout: BindGroupLayout | BindGroupLayoutFunc): this {\r\n this._bindGroupLayouts = this._bindGroupLayouts ?? [];\r\n if (layout instanceof BindGroupLayout) {\r\n this._bindGroupLayouts[index] = layout;\r\n }\r\n else {\r\n const builder = new BindGroupLayoutBuilder(this._ctx);\r\n layout(builder);\r\n this._bindGroupLayouts[index] = builder.build();\r\n }\r\n return this;\r\n }\r\n\r\n // TODO: Provide layout methods\r\n\r\n /** Compile the shader module and return a `Shader` instance. */\r\n build(): Shader {\r\n if (!this._code) {\r\n throw new Error(\"Shader code not specified. Use withCode() to set the shader source.\");\r\n }\r\n\r\n let code = this._code;\r\n for (const [name, inc] of this._includes) {\r\n // Create a regex to match the include directive while allowing\r\n // optional whitespace between tokens, e.g.:\r\n // #include<name>\r\n // # include < name >\r\n // and so on. Escape the include name so it is safe in a RegExp.\r\n const escapedName = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n const includeRegex = new RegExp(`#\\\\s*include\\\\s*<\\\\s*${escapedName}\\\\s*>`, 'g');\r\n code = code.replace(includeRegex, inc);\r\n }\r\n\r\n const inner = this._ctx.device.createShaderModule({\r\n label: this._label,\r\n code,\r\n });\r\n\r\n return new Shader(inner, this._ctx, this._vertexAttributes, this._bindGroupLayouts);\r\n }\r\n}\r\n","import {WebGPUContext} from \"./WebGPUContext\";\r\nimport {TextureFormat} from \"./enums\";\r\nimport {IBuffer} from \"./buffers/IBuffer\";\r\nimport {TextureUsage} from \"./buffers/Buffer\";\r\n\r\n/**\r\n * Small wrapper around GPUTexture providing convenience constructors and\r\n * an internal accessor for low-level interop.\r\n */\r\nexport class Texture implements IBuffer {\r\n /** @internal */\r\n readonly _inner: GPUTexture;\r\n private _format: TextureFormat;\r\n\r\n /**\r\n * Create a Texture wrapper from an existing GPUTexture.\r\n * @param texture - The underlying GPUTexture\r\n */\r\n static from_webgpu(texture: GPUTexture, format: TextureFormat): Texture {\r\n return new Texture(texture, format);\r\n }\r\n\r\n constructor(inner: GPUTexture, format: TextureFormat) {\r\n this._inner = inner;\r\n this._format = format;\r\n }\r\n\r\n createView(): TextureViewBuilder {\r\n return new TextureViewBuilder(this);\r\n }\r\n\r\n get format(): TextureFormat {\r\n return this._format;\r\n }\r\n\r\n _getBufferResource(): GPUBindingResource {\r\n return this._inner.createView();\r\n }\r\n}\r\n\r\nexport class TextureBuilder {\r\n private _ctx: WebGPUContext;\r\n private _size: [number, number, number] = [1, 1, 1];\r\n private _data: ImageBitmap | GPUAllowSharedBufferSource | undefined = undefined;\r\n private _format: TextureFormat = TextureFormat.Rgba8UnormSrgb;\r\n private _usage: GPUTextureUsageFlags = GPUTextureUsage.TEXTURE_BINDING;\r\n\r\n constructor(ctx: WebGPUContext) {\r\n this._ctx = ctx;\r\n }\r\n\r\n withSize(width: number, height: number, depthOrArrayLayers: number = 1): this {\r\n this._size = [width, height, depthOrArrayLayers];\r\n return this;\r\n }\r\n\r\n withData(data: GPUAllowSharedBufferSource): this {\r\n this._data = data;\r\n return this;\r\n }\r\n\r\n withFormat(format: TextureFormat): this {\r\n this._format = format;\r\n return this;\r\n }\r\n\r\n withImage(data: ImageBitmap): this {\r\n this._data = data;\r\n this._size = [data.width, data.height, 1];\r\n return this;\r\n }\r\n\r\n withUsage(usage: TextureUsage): this {\r\n this._usage |= usage;\r\n return this;\r\n }\r\n\r\n build(): Texture {\r\n if (this._data) {\r\n this._usage |= GPUTextureUsage.COPY_DST;\r\n }\r\n const inner = this._ctx.device.createTexture({\r\n format: this._format, size: this._size, usage: this._usage\r\n })\r\n if (this._data instanceof ImageBitmap) {\r\n this._ctx.device.queue.copyExternalImageToTexture({source: this._data!}, {texture: inner}, [this._size[0], this._size[1], 1]);\r\n } else if (this._data) {\r\n const [width, height, depthOrArrayLayers] = this._size;\r\n const blockWidth = getBlockWidth(this._format);\r\n const blocksPerRow = Math.ceil(width / blockWidth);\r\n const bytesPerRow = blocksPerRow * bytesPerBlock(this._format);\r\n this._ctx.device.queue.writeTexture(\r\n {texture: inner},\r\n this._data,\r\n {bytesPerRow},\r\n {width, height, depthOrArrayLayers}\r\n );\r\n }\r\n return new Texture(inner, this._format);\r\n }\r\n}\r\n\r\nexport class TextureView\r\n{\r\n /** @internal */\r\n _inner: GPUTextureView;\r\n\r\n constructor(inner: GPUTextureView) {\r\n this._inner = inner;\r\n }\r\n}\r\n\r\nexport class TextureViewBuilder {\r\n private _texture: Texture;\r\n private _desc: GPUTextureViewDescriptor = {};\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(texture: Texture) {\r\n this._texture = texture;\r\n }\r\n\r\n withSingleMip(level: number): this\r\n {\r\n this._desc.baseMipLevel = level;\r\n this._desc.mipLevelCount = 1;\r\n return this;\r\n }\r\n\r\n withMipRange(start: number, end: number): this\r\n {\r\n this._desc.baseMipLevel = start;\r\n this._desc.mipLevelCount = end - start;\r\n return this;\r\n }\r\n\r\n withSingleLayer(layer: number): this\r\n {\r\n this._desc.baseArrayLayer = layer;\r\n this._desc.arrayLayerCount = 1;\r\n return this;\r\n }\r\n\r\n withLayerRange(start: number, end: number): this\r\n {\r\n this._desc.baseArrayLayer = start;\r\n this._desc.arrayLayerCount = end;\r\n return this;\r\n }\r\n\r\n build(): TextureView\r\n {\r\n return new TextureView(this._texture._inner.createView(this._desc));\r\n }\r\n}\r\n\r\nfunction isBc(format: GPUTextureFormat): boolean {\r\n switch (format) {\r\n case TextureFormat.Bc1RgbaUnorm:\r\n case TextureFormat.Bc1RgbaUnormSrgb:\r\n case TextureFormat.Bc2RgbaUnorm:\r\n case TextureFormat.Bc2RgbaUnormSrgb:\r\n case TextureFormat.Bc3RgbaUnorm:\r\n case TextureFormat.Bc3RgbaUnormSrgb:\r\n case TextureFormat.Bc4RUnorm:\r\n case TextureFormat.Bc4RSnorm:\r\n case TextureFormat.Bc5RgUnorm:\r\n case TextureFormat.Bc5RgSnorm:\r\n case TextureFormat.Bc6hRgbUfloat:\r\n case TextureFormat.Bc6hRgbFloat:\r\n case TextureFormat.Bc7RgbaUnorm:\r\n case TextureFormat.Bc7RgbaUnormSrgb:\r\n return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nfunction isEtc(format: GPUTextureFormat): boolean {\r\n switch (format) {\r\n case TextureFormat.Etc2Rgb8Unorm:\r\n case TextureFormat.Etc2Rgb8UnormSrgb:\r\n case TextureFormat.Etc2Rgb8A1Unorm:\r\n case TextureFormat.Etc2Rgb8A1UnormSrgb:\r\n case TextureFormat.Etc2Rgba8Unorm:\r\n case TextureFormat.Etc2Rgba8UnormSrgb:\r\n case TextureFormat.EacR11Unorm:\r\n case TextureFormat.EacR11Snorm:\r\n case TextureFormat.EacRg11Unorm:\r\n case TextureFormat.EacRg11Snorm:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\nfunction getBlockWidth(format: GPUTextureFormat): number {\r\n if (isBc(format) || isEtc(format)) return 4;\r\n\r\n switch (format) {\r\n case TextureFormat.Astc4x4Unorm:\r\n case TextureFormat.Astc4x4UnormSrgb:\r\n return 4;\r\n case TextureFormat.Astc5x4Unorm:\r\n case TextureFormat.Astc5x4UnormSrgb:\r\n case TextureFormat.Astc5x5Unorm:\r\n case TextureFormat.Astc5x5UnormSrgb:\r\n return 5;\r\n case TextureFormat.Astc6x5Unorm:\r\n case TextureFormat.Astc6x5UnormSrgb:\r\n case TextureFormat.Astc6x6Unorm:\r\n case TextureFormat.Astc6x6UnormSrgb:\r\n return 6;\r\n case TextureFormat.Astc8x5Unorm:\r\n case TextureFormat.Astc8x5UnormSrgb:\r\n case TextureFormat.Astc8x6Unorm:\r\n case TextureFormat.Astc8x6UnormSrgb:\r\n case TextureFormat.Astc8x8Unorm:\r\n case TextureFormat.Astc8x8UnormSrgb:\r\n return 8;\r\n case TextureFormat.Astc10x5Unorm:\r\n case TextureFormat.Astc10x5UnormSrgb:\r\n case TextureFormat.Astc10x6Unorm:\r\n case TextureFormat.Astc10x6UnormSrgb:\r\n case TextureFormat.Astc10x8Unorm:\r\n case TextureFormat.Astc10x8UnormSrgb:\r\n case TextureFormat.Astc10x10Unorm:\r\n case TextureFormat.Astc10x10UnormSrgb:\r\n return 10;\r\n case TextureFormat.Astc12x10Unorm:\r\n case TextureFormat.Astc12x10UnormSrgb:\r\n case TextureFormat.Astc12x12Unorm:\r\n case TextureFormat.Astc12x12UnormSrgb:\r\n return 12;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of bytes in a compressed or uncompressed block for the\r\n * given texture format. Matches the mapping from the Rust implementation and\r\n * throws for unsupported formats.\r\n */\r\nfunction bytesPerBlock(format: GPUTextureFormat): number {\r\n switch (format) {\r\n // 1-byte formats\r\n case TextureFormat.R8Unorm:\r\n case TextureFormat.R8Snorm:\r\n case TextureFormat.R8Uint:\r\n case TextureFormat.R8Sint:\r\n case TextureFormat.Stencil8:\r\n return 1;\r\n\r\n // 2-byte formats\r\n case TextureFormat.R16Uint:\r\n case TextureFormat.R16Sint:\r\n case TextureFormat.R16Unorm:\r\n case TextureFormat.R16Snorm:\r\n case TextureFormat.R16Float:\r\n case TextureFormat.RG8Unorm:\r\n case TextureFormat.RG8Snorm:\r\n case TextureFormat.RG8Uint:\r\n case TextureFormat.RG8Sint:\r\n case TextureFormat.Depth16Unorm:\r\n return 2;\r\n\r\n // 4-byte formats\r\n case TextureFormat.R32Uint:\r\n case TextureFormat.R32Sint:\r\n case TextureFormat.R32Float:\r\n case TextureFormat.RG16Uint:\r\n case TextureFormat.RG16Sint:\r\n case TextureFormat.RG16Unorm:\r\n case TextureFormat.RG16Snorm:\r\n case TextureFormat.RG16Float:\r\n case TextureFormat.Rgba8Unorm:\r\n case TextureFormat.Rgba8UnormSrgb:\r\n case TextureFormat.Rgba8Snorm:\r\n case TextureFormat.Rgba8Uint:\r\n case TextureFormat.Rgba8Sint:\r\n case TextureFormat.Bgra8Unorm:\r\n case TextureFormat.Bgra8UnormSrgb:\r\n case TextureFormat.Rgb9e5Ufloat:\r\n case TextureFormat.Rgb10a2Uint:\r\n case TextureFormat.Rgb10a2Unorm:\r\n case TextureFormat.Depth24Plus:\r\n case TextureFormat.Depth24PlusStencil8:\r\n case TextureFormat.Depth32Float:\r\n return 4;\r\n\r\n // 8-byte formats\r\n case TextureFormat.Rg11b10Ufloat:\r\n case TextureFormat.RG32Uint:\r\n case TextureFormat.RG32Sint:\r\n case TextureFormat.RG32Float:\r\n case TextureFormat.Rgba16Uint:\r\n case TextureFormat.Rgba16Sint:\r\n case TextureFormat.Rgba16Unorm:\r\n case TextureFormat.Rgba16Snorm:\r\n case TextureFormat.Rgba16Float:\r\n case TextureFormat.Depth32FloatStencil8:\r\n case TextureFormat.Bc1RgbaUnorm:\r\n case TextureFormat.Bc1RgbaUnormSrgb:\r\n case TextureFormat.Bc4RUnorm:\r\n case TextureFormat.Bc4RSnorm:\r\n case TextureFormat.Etc2Rgb8Unorm:\r\n case TextureFormat.Etc2Rgb8UnormSrgb:\r\n case TextureFormat.Etc2Rgb8A1Unorm:\r\n case TextureFormat.Etc2Rgb8A1UnormSrgb:\r\n case TextureFormat.EacR11Unorm:\r\n case TextureFormat.EacR11Snorm:\r\n return 8;\r\n\r\n // 16-byte formats\r\n case TextureFormat.Rgba32Uint:\r\n case TextureFormat.Rgba32Sint:\r\n case TextureFormat.Rgba32Float:\r\n case TextureFormat.Bc2RgbaUnorm:\r\n case TextureFormat.Bc2RgbaUnormSrgb:\r\n case TextureFormat.Bc3RgbaUnorm:\r\n case TextureFormat.Bc3RgbaUnormSrgb:\r\n case TextureFormat.Bc5RgUnorm:\r\n case TextureFormat.Bc5RgSnorm:\r\n case TextureFormat.Bc6hRgbUfloat:\r\n case TextureFormat.Bc6hRgbFloat:\r\n case TextureFormat.Bc7RgbaUnorm:\r\n case TextureFormat.Bc7RgbaUnormSrgb:\r\n case TextureFormat.Etc2Rgba8Unorm:\r\n case TextureFormat.Etc2Rgba8UnormSrgb:\r\n case TextureFormat.EacRg11Unorm:\r\n case TextureFormat.EacRg11Snorm:\r\n case TextureFormat.Astc4x4Unorm:\r\n case TextureFormat.Astc4x4UnormSrgb:\r\n case TextureFormat.Astc5x4Unorm:\r\n case TextureFormat.Astc5x4UnormSrgb:\r\n case TextureFormat.Astc5x5Unorm:\r\n case TextureFormat.Astc5x5UnormSrgb:\r\n case TextureFormat.Astc6x5Unorm:\r\n case TextureFormat.Astc6x5UnormSrgb:\r\n case TextureFormat.Astc6x6Unorm:\r\n case TextureFormat.Astc6x6UnormSrgb:\r\n case TextureFormat.Astc8x5Unorm:\r\n case TextureFormat.Astc8x5UnormSrgb:\r\n case TextureFormat.Astc8x6Unorm:\r\n case TextureFormat.Astc8x6UnormSrgb:\r\n case TextureFormat.Astc8x8Unorm:\r\n case TextureFormat.Astc8x8UnormSrgb:\r\n case TextureFormat.Astc10x5Unorm:\r\n case TextureFormat.Astc10x5UnormSrgb:\r\n case TextureFormat.Astc10x6Unorm:\r\n case TextureFormat.Astc10x6UnormSrgb:\r\n case TextureFormat.Astc10x8Unorm:\r\n case TextureFormat.Astc10x8UnormSrgb:\r\n case TextureFormat.Astc10x10Unorm:\r\n case TextureFormat.Astc10x10UnormSrgb:\r\n case TextureFormat.Astc12x10Unorm:\r\n case TextureFormat.Astc12x10UnormSrgb:\r\n case TextureFormat.Astc12x12Unorm:\r\n case TextureFormat.Astc12x12UnormSrgb:\r\n case TextureFormat.Bc2RgbaUnorm:\r\n // NOTE: Bc2RgbaUnorm is already listed above; duplicate entries are\r\n // harmless but kept out of caution when mapping from Rust.\r\n return 16;\r\n\r\n default:\r\n throw new Error(`Unsupported texture format: ${format}`);\r\n }\r\n}\r\n","import {WebGPUContext, WebGPUContextOptions} from './WebGPUContext';\r\nimport {CommandEncoder} from \"./CommandEncoder\";\r\nimport {Texture, TextureBuilder} from \"./Texture\";\r\nimport {RenderTarget, RenderTargetBuilder} from \"./RenderTarget\";\r\nimport {ShaderBuilder} from \"./Shader\";\r\nimport {RenderPipelineBuilder} from \"./RenderPipeline\";\r\nimport {MeshBuilder} from \"./Mesh\";\r\nimport {UniformBuffer, UniformBufferLayout, UniformBufferLayoutBuilder} from \"./buffers/UniformBuffer\";\r\nimport BindGroupLayoutBuilder, {BindGroup, BindGroupBuilder, BindGroupLayout} from \"./BindGroup\";\r\nimport {SamplerBuilder} from \"./Sampler\";\r\nimport {ComputePipelineBuilder} from \"./ComputePipeline\";\r\nimport {ColorSpace, TextureFormat} from \"./enums\";\r\nimport {mapUndefined} from \"./utils/mapUndefined\";\r\nimport {BufferBuilder} from \"./buffers/Buffer\";\r\n\r\n/**\r\n * Options for initializing TinyHelix\r\n */\r\nexport interface TinyHelixOptions extends WebGPUContextOptions {\r\n // Possible to add more options later\r\n /** Optional format to use for the depth/stencil buffer */\r\n depthStencilFormat?: TextureFormat;\r\n}\r\n\r\n/**\r\n * Main entry point for the tiny-helix API. Manages the WebGPU context,\r\n * backbuffer and provides helpers to create render targets and command encoders.\r\n */\r\nexport class TinyHelix {\r\n private _context: WebGPUContext;\r\n private _options: TinyHelixOptions = {};\r\n private _backbuffer?: Texture;\r\n private _backbufferTarget?: RenderTarget;\r\n private _depthStencil?: Texture;\r\n private _depthStencilTarget?: RenderTarget;\r\n private _shaderIncludes: Map<string, string> = new Map();\r\n private _canvas: HTMLCanvasElement;\r\n private _globalBindBufferLayouts: BindGroupLayout[] = [];\r\n private _globalBindBuffers: BindGroup[] = [];\r\n\r\n /**\r\n * Create a new TinyHelix instance. Call `initialize()` before rendering.\r\n */\r\n constructor(canvas: HTMLCanvasElement) {\r\n this._context = new WebGPUContext();\r\n this._canvas = canvas;\r\n }\r\n\r\n /**\r\n * Initializes the underlying WebGPU context and prepares resources.\r\n * @param options - Configuration options forwarded to the WebGPU context\r\n * @example await tiny.initialize({ canvas: myCanvas });\r\n */\r\n async initialize(options: TinyHelixOptions = {}) {\r\n options.canvas = this._canvas;\r\n this._options = options;\r\n\r\n await this._context.initialize(options);\r\n\r\n this._createDepthStencil();\r\n }\r\n\r\n resize(width: number, height: number) {\r\n this._canvas.width = width;\r\n this._canvas.height = height;\r\n this._createDepthStencil();\r\n }\r\n\r\n /**\r\n * Add a named include for all shader code. The include will be expanded\r\n * in any shader code created through {@link TinyHelix.createShader}.\r\n * The include name must be unique within the shader code. This allows\r\n * using `#include<name>` in the shader code to include other files.\r\n * While this is not standard WGSL, it's too useful not to support.\r\n '\r\n * @param name - The name as used in the `#include<name>` directive.\r\n * @param source - The code the include should expand to.\r\n */\r\n addShaderInclude(name: string, source: string): this {\r\n this._shaderIncludes.set(name, source);\r\n return this;\r\n }\r\n\r\n /**\r\n * Return the chosen depth/stencil format if configured.\r\n */\r\n get depthStencilFormat(): TextureFormat | undefined {\r\n return this._options.depthStencilFormat;\r\n }\r\n\r\n /**\r\n * The current frame's backbuffer texture. Valid after `startFrame()` has been\r\n * called.\r\n * @throws Error if accessed before startFrame()\r\n */\r\n get backbuffer(): Texture {\r\n if (!this._backbuffer) {\r\n throw new Error('Backbuffer not initialized. Did you forget to call startFrame()?');\r\n }\r\n return this._backbuffer!;\r\n }\r\n\r\n /**\r\n * The RenderTarget wrapper for the current backbuffer. Valid after `startFrame()`.\r\n * @throws Error if accessed before startFrame()\r\n */\r\n get backbufferTarget(): RenderTarget {\r\n if (!this._backbufferTarget) {\r\n throw new Error('Backbuffer not initialized. Did you forget to call startFrame()?');\r\n }\r\n return this._backbufferTarget!;\r\n }\r\n\r\n get colorSpace(): ColorSpace\r\n {\r\n return this._context.colorSpace;\r\n }\r\n\r\n get backbufferFormat(): TextureFormat {\r\n return this._context.format;\r\n }\r\n\r\n /**\r\n * The width of the current backbuffer. Valid after `startFrame()`.\r\n */\r\n get backbufferWidth(): number {\r\n return this._canvas.width;\r\n }\r\n\r\n /**\r\n * The height of the current backbuffer. Valid after `startFrame()`.\r\n */\r\n get backbufferHeight(): number {\r\n return this._canvas.height;\r\n }\r\n\r\n /**\r\n * Needs to be called before rendering each frame. Updates internal backbuffer\r\n * references to the current swapchain texture.\r\n * @example tiny.startFrame();\r\n */\r\n startFrame() {\r\n this._backbuffer = Texture.from_webgpu(this._context.getCurrentTexture(), this._context.format);\r\n this._backbufferTarget = this.createRenderTarget(this._backbuffer)\r\n .build();\r\n }\r\n\r\n /**\r\n * Create a RenderTargetBuilder for a given texture.\r\n */\r\n createRenderTarget(target: Texture): RenderTargetBuilder\r\n {\r\n return new RenderTargetBuilder(target);\r\n }\r\n\r\n /**\r\n * Create a ShaderBuilder for creating a Shader.\r\n */\r\n createShader(): ShaderBuilder\r\n {\r\n let builder = new ShaderBuilder(this._context);\r\n\r\n this._shaderIncludes.forEach((v, k) => builder = builder.withInclude(k, v));\r\n this._globalBindBufferLayouts.forEach((layout, i) => builder.withBindGroup(i, layout))\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Create a BindGroupLayoutBuilder for creating a BindGroupLayout.\r\n */\r\n createBindGroupLayout(): BindGroupLayoutBuilder\r\n {\r\n return new BindGroupLayoutBuilder(this._context);\r\n }\r\n\r\n /**\r\n * Create a BindGroupBuilder for creating a BindGroup.\r\n */\r\n createBindGroup(layout: BindGroupLayout): BindGroupBuilder\r\n {\r\n return new BindGroupBuilder(this._context, layout);\r\n }\r\n\r\n /**\r\n * Create a MeshBuilder for creating a Mesh.\r\n */\r\n createMesh(): MeshBuilder\r\n {\r\n return new MeshBuilder(this._context);\r\n }\r\n\r\n /**\r\n * Create a RenderPipelineBuilder for creating a RenderPipeline.\r\n */\r\n createRenderPipeline(): RenderPipelineBuilder\r\n {\r\n return new RenderPipelineBuilder(this._context, this._options.depthStencilFormat);\r\n }\r\n\r\n /**\r\n * Create a ComputePipelineBuilder for creating a ComputePipeline.\r\n */\r\n createComputePipeline(): ComputePipelineBuilder\r\n {\r\n return new ComputePipelineBuilder(this._context);\r\n }\r\n\r\n /**\r\n * Create a SamplerBuilder for creating a Sampler.\r\n */\r\n createSampler(): SamplerBuilder\r\n {\r\n return new SamplerBuilder(this._context);\r\n }\r\n\r\n /**\r\n * Create a TextureBuilder for creating a Texture.\r\n */\r\n createTexture(): TextureBuilder\r\n {\r\n return new TextureBuilder(this._context)\r\n }\r\n\r\n /**\r\n * Creates a command encoder for recording GPU commands for the current frame.\r\n * @param label - Optional debug label to assign to the encoder\r\n */\r\n createCommandEncoder(label?: string): CommandEncoder {\r\n return new CommandEncoder(this.backbufferTarget, this._globalBindBuffers, this._context, this._depthStencilTarget, label);\r\n }\r\n\r\n /**\r\n * Create a UniformBufferLayoutBuilder for creating a UniformBufferLayout.\r\n */\r\n createUniformBufferLayout(): UniformBufferLayoutBuilder\r\n {\r\n return new UniformBufferLayoutBuilder();\r\n }\r\n\r\n /**\r\n * Create a UniformBuffer for the given layout.\r\n */\r\n createUniformBuffer(layout: UniformBufferLayout): UniformBuffer\r\n {\r\n return new UniformBuffer(layout, this._context)\r\n }\r\n\r\n /**\r\n * Create a BufferBuilder to construct raw buffers.\r\n */\r\n createBuffer(): BufferBuilder\r\n {\r\n return new BufferBuilder(this._context);\r\n }\r\n\r\n /**\r\n * Allows setting a global bind group for all render passes. This is useful\r\n * for setting bind groups that are used by all passes. These buffers will\r\n * automatically be set for all render and compute passes.\r\n * @param index - The index of the bind group in the render pipeline layout.\r\n * @param buffer - The bind group to set.\r\n */\r\n setGlobalBindGroup(index: number, layout: BindGroupLayout, buffer: BindGroup): this {\r\n this._globalBindBufferLayouts[index] = layout;\r\n this._globalBindBuffers[index] = buffer;\r\n return this;\r\n }\r\n\r\n /**\r\n * Destroy the TinyHelix instance and release all GPU resources.\r\n */\r\n destroy(): void {\r\n this._context.destroy();\r\n }\r\n\r\n /**\r\n * Returns the current depth/stencil texture if configured.\r\n */\r\n depthStencilTexture(): Texture | undefined {\r\n return this._depthStencil;\r\n }\r\n\r\n /**\r\n * Returns the current depth/stencil RenderTarget if configured.\r\n */\r\n depthStencilTarget(): RenderTarget | undefined {\r\n return this._depthStencilTarget;\r\n }\r\n\r\n private _createDepthStencil() {\r\n this._depthStencil = mapUndefined(this._options.depthStencilFormat, (f) =>\r\n this.createTexture()\r\n .withFormat(f)\r\n .withSize(this._canvas.width, this._canvas.height)\r\n .withUsage(GPUTextureUsage.RENDER_ATTACHMENT)\r\n .build()\r\n );\r\n\r\n this._depthStencilTarget = mapUndefined(this._depthStencil, (t) =>\r\n this.createRenderTarget(t)\r\n .build()\r\n );\r\n }\r\n}\r\n","import {ColorSpace, TextureFormat} from \"./enums\";\r\n\r\n/**\r\n * Options for initializing WebGPU context\r\n */\r\nexport interface WebGPUContextOptions {\r\n /** The canvas element to render to */\r\n canvas?: HTMLCanvasElement;\r\n /** Power preference for adapter selection */\r\n powerPreference?: GPUPowerPreference;\r\n /** Required features for the device */\r\n requiredFeatures?: GPUFeatureName[];\r\n /** Required limits for the device */\r\n requiredLimits?: Record<string, number>;\r\n colorSpace?: ColorSpace;\r\n}\r\n\r\n/**\r\n * Manages WebGPU adapter, device, and context initialization\r\n */\r\nexport class WebGPUContext {\r\n private _adapter: GPUAdapter | null = null;\r\n private _device: GPUDevice | null = null;\r\n private _context: GPUCanvasContext | null = null;\r\n private _format: TextureFormat = TextureFormat.Rgba8UnormSrgb;\r\n private _canvas: HTMLCanvasElement | null = null;\r\n private _colorSpace: ColorSpace = ColorSpace.sRGB;\r\n\r\n /**\r\n * Gets the WebGPU adapter. Throws if not initialized.\r\n */\r\n get adapter(): GPUAdapter {\r\n return this._adapter!;\r\n }\r\n\r\n /**\r\n * Gets the WebGPU device. Throws if not initialized.\r\n */\r\n get device(): GPUDevice {\r\n return this._device!;\r\n }\r\n\r\n /**\r\n * Gets the GPU canvas context. Throws if no canvas was configured.\r\n */\r\n get context(): GPUCanvasContext {\r\n return this._context!;\r\n }\r\n\r\n /**\r\n * Gets the preferred texture format used by the configured canvas/context.\r\n */\r\n get format(): TextureFormat {\r\n return this._format;\r\n }\r\n\r\n /**\r\n * Gets the color space used by the configured canvas/context.\r\n */\r\n get colorSpace(): ColorSpace\r\n {\r\n return this._colorSpace;\r\n }\r\n\r\n /**\r\n * Gets the configured canvas element. Throws if none was provided during initialization.\r\n */\r\n get canvas(): HTMLCanvasElement {\r\n return this._canvas!;\r\n }\r\n\r\n /**\r\n * Checks if WebGPU is supported in the current environment.\r\n */\r\n static isSupported(): boolean {\r\n return typeof navigator !== 'undefined' && 'gpu' in navigator;\r\n }\r\n\r\n /**\r\n * Initializes the WebGPU context and device.\r\n * @param options - Configuration options such as canvas and adapter preferences\r\n * @throws Error if WebGPU is not supported or initialization fails\r\n */\r\n async initialize(options: WebGPUContextOptions = {}) {\r\n if (!WebGPUContext.isSupported()) {\r\n throw new Error('WebGPU is not supported in this browser');\r\n }\r\n\r\n // Request adapter\r\n this._adapter = await navigator.gpu.requestAdapter({\r\n powerPreference: options.powerPreference ?? 'high-performance',\r\n });\r\n\r\n if (!this._adapter) {\r\n throw new Error('Failed to get WebGPU adapter');\r\n }\r\n\r\n // Request device\r\n this._device = await this._adapter.requestDevice({\r\n requiredFeatures: options.requiredFeatures,\r\n requiredLimits: options.requiredLimits,\r\n });\r\n\r\n if (!this._device) {\r\n throw new Error('Failed to get WebGPU device');\r\n }\r\n\r\n // Setup error handling\r\n this._device.lost.then((info: GPUDeviceLostInfo) => {\r\n console.error('WebGPU device lost:', info.message);\r\n if (info.reason !== 'destroyed') {\r\n // Attempt to reinitialize\r\n this.initialize(options).catch((error) => {\r\n console.error('Failed to reinitialize WebGPU context:', error);\r\n });\r\n }\r\n });\r\n\r\n // Configure canvas context if provided\r\n if (options.canvas) {\r\n this._canvas = options.canvas;\r\n this._context = this._canvas.getContext(\"webgpu\") as GPUCanvasContext;\r\n\r\n if (!this._context) {\r\n throw new Error(\"Failed to get WebGPU context from canvas\");\r\n }\r\n\r\n const canUseP3 = window.matchMedia(\"(color-gamut: p3)\").matches;\r\n this._colorSpace = options.colorSpace ?? ColorSpace.sRGB;\r\n if (this._colorSpace === ColorSpace.DisplayP3 && !canUseP3) {\r\n this._colorSpace = ColorSpace.sRGB;\r\n console.warn(\"DisplayP3 not supported, falling back to sRGB\");\r\n }\r\n\r\n this._format = navigator.gpu.getPreferredCanvasFormat() as TextureFormat;\r\n this._context.configure({\r\n device: this._device,\r\n format: this._format,\r\n colorSpace: this._colorSpace,\r\n alphaMode: \"premultiplied\",\r\n });\r\n }\r\n else {\r\n console.warn(\"No canvas provided!\");\r\n }\r\n }\r\n\r\n /**\r\n * Internal helper to fetch the current swapchain texture.\r\n * @internal\r\n */\r\n getCurrentTexture(): GPUTexture {\r\n return this._context!.getCurrentTexture();\r\n }\r\n\r\n /**\r\n * Destroys the WebGPU context and releases resources\r\n */\r\n destroy(): void {\r\n if (this._device) {\r\n this._device.destroy();\r\n this._device = null;\r\n }\r\n this._adapter = null;\r\n this._context = null;\r\n this._canvas = null;\r\n }\r\n}\r\n","import {WebGPUContext} from \"../WebGPUContext\";\r\nimport {mapUndefined} from \"../utils/mapUndefined\";\r\nimport {padArrayBuffer} from \"../utils/padArrayBuffer\";\r\nimport {IBuffer} from \"./IBuffer\";\r\n\r\n/**\r\n * Buffer usage flags re-exported from the WebGPU API for convenience.\r\n * Use these when constructing buffers with `BufferBuilder.withUsage()`.\r\n */\r\nexport enum BufferUsage {\r\n MapRead = GPUBufferUsage.MAP_READ,\r\n MapWrite = GPUBufferUsage.MAP_WRITE,\r\n CopySrc = GPUBufferUsage.COPY_SRC,\r\n CopyDst = GPUBufferUsage.COPY_DST,\r\n Index = GPUBufferUsage.INDEX,\r\n Vertex = GPUBufferUsage.VERTEX,\r\n Uniform = GPUBufferUsage.UNIFORM,\r\n Storage = GPUBufferUsage.STORAGE,\r\n Indirect = GPUBufferUsage.INDIRECT,\r\n QueryResolve = GPUBufferUsage.QUERY_RESOLVE\r\n}\r\n\r\nexport enum TextureUsage {\r\n CopySrc = GPUTextureUsage.COPY_SRC,\r\n CopyDst = GPUTextureUsage.COPY_DST,\r\n TextureBinding = GPUTextureUsage.TEXTURE_BINDING,\r\n StorageBinding = GPUTextureUsage.STORAGE_BINDING,\r\n RenderAttachment = GPUTextureUsage.RENDER_ATTACHMENT\r\n}\r\n\r\n/**\r\n * Builder for creating GPU-backed buffers.\r\n *\r\n * Example:\r\n * const buf = new BufferBuilder(ctx)\r\n * .withUsage(BufferUsage.Vertex | BufferUsage.CopyDst)\r\n * .withData(new Float32Array([...]).buffer)\r\n * .build();\r\n */\r\nexport class BufferBuilder {\r\n private _ctx: WebGPUContext;\r\n private _data?: ArrayBufferLike;\r\n private _size = 0;\r\n private _keepData = false;\r\n private _usage: number = 0;\r\n\r\n constructor(ctx: WebGPUContext) {\r\n this._ctx = ctx;\r\n }\r\n\r\n /**\r\n * Add usage flags for the GPU buffer.\r\n */\r\n withUsage(usage: BufferUsage): this\r\n {\r\n this._usage |= usage;\r\n return this;\r\n }\r\n\r\n /**\r\n * Provide initial data for the buffer. If `keepOnCPU` is true the original\r\n * ArrayBuffer is stored in the resulting `Buffer.data` field for readback or\r\n * reuse.\r\n */\r\n withData(data: ArrayBufferLike, keepOnCPU: boolean = false) {\r\n this._data = data;\r\n // round to the nearest multiple of 4 bytes, as required by GPUBuffer.writeBuffer()\r\n this._size = data.byteLength;\r\n this._keepData = keepOnCPU;\r\n this._usage |= BufferUsage.CopyDst;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify a size for the buffer, used when not providing data.\r\n */\r\n withSize(size: number): this\r\n {\r\n this._size = size;\r\n return this;\r\n }\r\n\r\n /**\r\n * Create the GPU buffer and upload any provided data.\r\n */\r\n build(): Buffer {\r\n const data = mapUndefined(this._data, data => padArrayBuffer(data, 4));\r\n const buffer = this._ctx.device.createBuffer({\r\n size: data? data.byteLength : this._size, // in case we don't have data, we need to specify the size explicitly'\r\n usage: this._usage\r\n });\r\n\r\n if (data) {\r\n this._ctx.device.queue.writeBuffer(buffer, 0, data);\r\n }\r\n\r\n return new Buffer(buffer, this._keepData? this._data : undefined);\r\n }\r\n}\r\n\r\n/**\r\n * Lightweight wrapper around a GPUBuffer. Exposes the original CPU-side data\r\n * (when kept) and the underlying GPU buffer for low-level interop.\r\n */\r\nexport class Buffer implements IBuffer {\r\n readonly _inner: GPUBuffer;\r\n readonly data?: ArrayBufferLike;\r\n\r\n /**\r\n * Create a Buffer from an existing GPUBuffer.\r\n * @param inner The underlying GPUBuffer.\r\n * @param data Optional CPU-side copy of the buffer contents.\r\n */\r\n constructor(inner: GPUBuffer, data?: ArrayBufferLike) {\r\n this._inner = inner;\r\n this.data = data;\r\n }\r\n\r\n /** Size of the GPU buffer in bytes. */\r\n get size(): number { return this._inner.size; }\r\n\r\n _uploadData(ctx: WebGPUContext)\r\n {\r\n if (!this.data) {\r\n console.warn(\"Buffer has no data to upload.\");\r\n return;\r\n }\r\n\r\n ctx.device.queue.writeBuffer(this._inner, 0, this.data);\r\n }\r\n\r\n _getBufferResource(): GPUBindingResource {\r\n return { buffer: this._inner };\r\n }\r\n}","import {float32ToFloat16} from \"../utils/float32ToFloat16\";\r\nimport {IndexedCollection} from \"../utils/IndexedCollection\";\r\n\r\n/**\r\n * Utility for incrementally building binary data into an ArrayBuffer.\r\n * Provides typed push helpers for common numeric types used in vertex/index buffers.\r\n */\r\nexport class BufferDataWriter {\r\n private _buffer: ArrayBuffer;\r\n private _view: DataView;\r\n private _offset = 0;\r\n\r\n /** Create a new writer with the given total byte size. */\r\n constructor(byteSize: number) {\r\n this._buffer = new ArrayBuffer(byteSize);\r\n this._view = new DataView(this._buffer);\r\n }\r\n\r\n /** Push an unsigned 8-bit integer. */\r\n pushUint8(value: number): this {\r\n this._view.setUint8(this._offset, value);\r\n this._offset += 1;\r\n return this;\r\n }\r\n\r\n /** Push two unsigned 8-bit integers. */\r\n pushUint8x2(x: number, y: number): this {\r\n this.pushUint8(x);\r\n this.pushUint8(y);\r\n return this;\r\n }\r\n\r\n /** Push four unsigned 8-bit integers. */\r\n pushUint8x4(x: number, y: number, z: number, w: number): this {\r\n this.pushUint8(x);\r\n this.pushUint8(y);\r\n this.pushUint8(z);\r\n this.pushUint8(w);\r\n return this;\r\n }\r\n\r\n /** Push a signed 8-bit integer. */\r\n pushSint8(value: number): this {\r\n this._view.setInt8(this._offset, value);\r\n this._offset += 1;\r\n return this;\r\n }\r\n\r\n /** Push two signed 8-bit integers. */\r\n pushSint8x2(x: number, y: number): this {\r\n this.pushSint8(x);\r\n this.pushSint8(y);\r\n return this;\r\n }\r\n\r\n /** Push four signed 8-bit integers. */\r\n pushSint8x4(x: number, y: number, z: number, w: number): this {\r\n this.pushSint8(x);\r\n this.pushSint8(y);\r\n this.pushSint8(z);\r\n this.pushSint8(w);\r\n return this;\r\n }\r\n\r\n /** Push an unsigned 16-bit integer (little-endian). */\r\n pushUint16(value: number): this {\r\n this._view.setUint16(this._offset, value, true);\r\n this._offset += 2;\r\n return this;\r\n }\r\n\r\n /** Push two unsigned 16-bit integers (little-endian). */\r\n pushUint16x2(x: number, y: number): this {\r\n this.pushUint16(x);\r\n this.pushUint16(y);\r\n return this;\r\n }\r\n\r\n /** Push four unsigned 16-bit integers (little-endian). */\r\n pushUint16x4(x: number, y: number, z: number, w: number): this {\r\n this.pushUint16(x);\r\n this.pushUint16(y);\r\n this.pushUint16(z);\r\n this.pushUint16(w);\r\n return this;\r\n }\r\n\r\n /** Push a signed 16-bit integer (little-endian). */\r\n pushSint16(value: number): this {\r\n this._view.setInt16(this._offset, value, true);\r\n this._offset += 2;\r\n return this;\r\n }\r\n\r\n /** Push two signed 16-bit integers (little-endian). */\r\n pushSint16x2(x: number, y: number): this {\r\n this.pushSint16(x);\r\n this.pushSint16(y);\r\n return this;\r\n }\r\n\r\n /** Push four signed 16-bit integers (little-endian). */\r\n pushSint16x4(x: number, y: number, z: number, w: number): this {\r\n this.pushSint16(x);\r\n this.pushSint16(y);\r\n this.pushSint16(z);\r\n this.pushSint16(w);\r\n return this;\r\n }\r\n\r\n /** Push a 16-bit float (little-endian). */\r\n pushFloat16(value: number) {\r\n const bits = float32ToFloat16(value);\r\n this._view.setUint16(this._offset, bits, true);\r\n this._offset += 2;\r\n return this;\r\n }\r\n\r\n /** Push two 16-bit floats (little-endian). */\r\n pushFloat16x2(x: number, y: number): this {\r\n this.pushFloat16(x);\r\n this.pushFloat16(y);\r\n return this;\r\n }\r\n\r\n /** Push four 16-bit floats (little-endian). */\r\n pushFloat16x4(x: number, y: number, z: number, w: number): this {\r\n this.pushFloat16(x);\r\n this.pushFloat16(y);\r\n this.pushFloat16(z);\r\n this.pushFloat16(w);\r\n return this;\r\n }\r\n\r\n /** Push a 32-bit float (little-endian). */\r\n pushFloat32(value: number): this {\r\n this._view.setFloat32(this._offset, value, true);\r\n this._offset += 4;\r\n return this;\r\n }\r\n\r\n /** Push two 32-bit floats (little-endian). */\r\n pushFloat32x2(arr: [number, number] | IndexedCollection): this {\r\n this.pushFloat32(arr[0]);\r\n this.pushFloat32(arr[1]);\r\n return this;\r\n }\r\n\r\n /** Push four 32-bit floats (little-endian). */\r\n pushFloat32x3(arr: [number, number, number] | IndexedCollection): this {\r\n this.pushFloat32(arr[0]);\r\n this.pushFloat32(arr[1]);\r\n this.pushFloat32(arr[2]);\r\n return this;\r\n }\r\n\r\n /** Push an 8-bit float (little-endian). */\r\n pushFloat32x4(arr: [number, number, number, number] | IndexedCollection): this {\r\n this.pushFloat32(arr[0]);\r\n this.pushFloat32(arr[1]);\r\n this.pushFloat32(arr[2]);\r\n this.pushFloat32(arr[3]);\r\n return this;\r\n }\r\n\r\n /** Push an unsigned 32-bit integer (little-endian). */\r\n pushUint32(value: number): this {\r\n this._view.setUint32(this._offset, value, true);\r\n this._offset += 4;\r\n return this;\r\n }\r\n\r\n /** Push two unsigned 32-bit integers (little-endian). */\r\n pushUint32x2(arr: [number, number] | Uint32Array): this {\r\n this.pushUint32(arr[0]);\r\n this.pushUint32(arr[1]);\r\n return this;\r\n }\r\n\r\n /** Push three unsigned 32-bit integers (little-endian). */\r\n pushUint32x3(arr: [number, number, number] | Uint32Array): this {\r\n this.pushUint32(arr[0]);\r\n this.pushUint32(arr[1]);\r\n this.pushUint32(arr[2]);\r\n return this;\r\n }\r\n\r\n /** Push four unsigned 32-bit integers (little-endian). */\r\n pushUint32x4(arr: [number, number, number, number] | Uint32Array): this {\r\n this.pushUint32(arr[0]);\r\n this.pushUint32(arr[1]);\r\n this.pushUint32(arr[2]);\r\n this.pushUint32(arr[3]);\r\n return this;\r\n }\r\n\r\n /** Push a signed 32-bit integer (little-endian). */\r\n pushSint32(value: number): this {\r\n this._view.setInt32(this._offset, value, true);\r\n this._offset += 4;\r\n return this;\r\n }\r\n\r\n /** Push two signed 32-bit integers (little-endian). */\r\n pushSint32x2(arr: [number, number] | Int32Array): this {\r\n this.pushSint32(arr[0]);\r\n this.pushSint32(arr[1]);\r\n return this;\r\n }\r\n\r\n /** Push three signed 32-bit integers (little-endian). */\r\n pushSint32x3(arr: [number, number, number] | Int32Array): this {\r\n this.pushSint32(arr[0]);\r\n this.pushSint32(arr[1]);\r\n this.pushSint32(arr[2]);\r\n return this;\r\n }\r\n\r\n /** Push four signed 32-bit integers (little-endian). */\r\n pushSint32x4(arr: [number, number, number, number] | Int32Array): this {\r\n this.pushSint32(arr[0]);\r\n this.pushSint32(arr[1]);\r\n this.pushSint32(arr[2]);\r\n this.pushSint32(arr[3]);\r\n return this;\r\n }\r\n\r\n /** Returns the underlying ArrayBuffer containing all written data. */\r\n get arrayBuffer(): ArrayBuffer\r\n {\r\n return this._buffer;\r\n }\r\n}","import {WebGPUContext} from \"../WebGPUContext\";\r\nimport {Buffer, BufferBuilder} from \"./Buffer\";\r\nimport {float32ToFloat16} from \"../utils/float32ToFloat16\";\r\nimport {IBuffer} from \"./IBuffer\";\r\nimport {IndexedCollection} from \"../utils/IndexedCollection\";\r\n\r\n/**\r\n * Primitive base types supported by the uniform buffer helpers.\r\n * These correspond to WGSL scalar types used inside UBOs.\r\n */\r\nexport enum BaseType {\r\n Float16,\r\n Float32,\r\n Uint,\r\n Sint,\r\n Boolean\r\n}\r\n\r\nfunction sizeForBaseType(type: BaseType): number {\r\n switch (type) {\r\n case BaseType.Float16:\r\n return 2;\r\n case BaseType.Float32:\r\n return 4;\r\n case BaseType.Boolean:\r\n return 1;\r\n default:\r\n throw new Error(\"Unknown BaseType.\");\r\n }\r\n}\r\n\r\nenum ContainerType {\r\n Scalar,\r\n Vec,\r\n Matrix, // a matrix of 2 vec[numElements]<baseType>\r\n Array,\r\n}\r\n\r\nclass MemberType {\r\n baseType: BaseType;\r\n containerType: ContainerType;\r\n numRows = 1;\r\n numCols = 1;\r\n\r\n constructor(baseType: BaseType, containerType: ContainerType, numRows: number, numCols: number) {\r\n if (containerType === ContainerType.Scalar && numRows !== 1 && numCols !== 1) {\r\n throw new Error(\"Scalar member must have numRows = 1.\");\r\n }\r\n\r\n this.baseType = baseType;\r\n this.containerType = containerType;\r\n this.numRows = numRows;\r\n this.numCols = numCols;\r\n }\r\n\r\n get size(): number {\r\n // when we're dealing with matrices, storing vec3f internally stores as vec4f\r\n const numRows = this.numCols > 1 && this.numRows === 3 ? 4 : this.numRows;\r\n return sizeForBaseType(this.baseType) * numRows * this.numCols;\r\n }\r\n\r\n get alignment(): number {\r\n const numElements = this.numRows === 3 ? 4 : this.numRows;\r\n // matrices are also just aligned to their underlying vec alignment\r\n return sizeForBaseType(this.baseType) * numElements;\r\n }\r\n}\r\n\r\ninterface Member {\r\n type: MemberType;\r\n offset: number;\r\n}\r\n\r\nexport class UniformBufferLayoutBuilder {\r\n private _size: number = 0;\r\n private _members: Map<string, Member> = new Map();\r\n\r\n /**\r\n * Reserve an explicit size for the resulting UBO layout. If not set the\r\n * builder will compute a size that fits all declared members.\r\n */\r\n withSize(size: number): this {\r\n if (this._size !== 0) throw new Error(\"Size already set.\");\r\n this._size = size;\r\n return this;\r\n }\r\n\r\n pushScalar(baseType: BaseType, name: string): this {\r\n return this._pushField(baseType, name, ContainerType.Scalar);\r\n }\r\n\r\n pushVec2(baseType: BaseType, name: string): this {\r\n return this._pushField(baseType, name, ContainerType.Vec, 2);\r\n }\r\n\r\n pushVec3(baseType: BaseType, name: string): this {\r\n return this._pushField(baseType, name, ContainerType.Vec, 3);\r\n }\r\n\r\n pushVec4(baseType: BaseType, name: string): this {\r\n return this._pushField(baseType, name, ContainerType.Vec, 4);\r\n }\r\n\r\n pushMatrix(baseType: BaseType, numRows: number, numCols: number, name: string): this {\r\n if (!Number.isInteger(numRows) || !Number.isInteger(numCols)) {\r\n throw new Error('Matrix dimensions must be integers');\r\n }\r\n\r\n if (numRows < 2 || numRows > 4 || numCols < 2 || numCols > 4) {\r\n throw new Error('Matrix dimensions must be between 2 and 4 (inclusive)');\r\n }\r\n\r\n return this._pushField(baseType, name, ContainerType.Matrix, numRows, numCols);\r\n }\r\n\r\n /**\r\n * Finalize and return a `UniformBufferLayout` describing member offsets and total size.\r\n */\r\n build(): UniformBufferLayout {\r\n // round up to 16 byte alignment with a 16 byte minimum\r\n this._size = Math.ceil(this._size / 16) * 16;\r\n return new UniformBufferLayout(this._size, this._members);\r\n }\r\n\r\n private _pushField(baseType: BaseType, name: string, containerType: ContainerType, numRows: number = 1, numCols: number = 1): this {\r\n const type = new MemberType(baseType, containerType, numRows, numCols);\r\n const alignment = type.alignment;\r\n const offset = Math.ceil(this._size / alignment) * alignment;\r\n this._members.set(name, {offset, type});\r\n this._size = offset + type.size;\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * Describes the layout of a uniform buffer including member offsets and total size.\r\n * Use `UniformBufferLayoutBuilder` to construct instances.\r\n */\r\nexport class UniformBufferLayout {\r\n readonly size: number;\r\n private _members: Map<string, Member>;\r\n\r\n constructor(size: number, members: Map<string, Member>) {\r\n this.size = size;\r\n this._members = members;\r\n }\r\n\r\n /**\r\n * Create typed DataViews for each member of the layout.\r\n * @internal\r\n */\r\n _createDataViews(target: ArrayBuffer): Map<string, [Member, IndexedCollection]> {\r\n const map = new Map();\r\n for (const [name, member] of this._members) {\r\n let ArrayConst: { new(buffer: ArrayBuffer, byteOffset: number, size: number): IndexedCollection; };\r\n const size = member.type.size;\r\n let byteSize = 4;\r\n\r\n switch (member.type.baseType) {\r\n case BaseType.Float16:\r\n byteSize = 2;\r\n ArrayConst = Uint16Array;\r\n break;\r\n case BaseType.Float32:\r\n ArrayConst = Float32Array;\r\n break;\r\n case BaseType.Uint:\r\n case BaseType.Boolean:\r\n ArrayConst = Uint32Array;\r\n break;\r\n case BaseType.Sint:\r\n ArrayConst = Int32Array;\r\n break;\r\n }\r\n\r\n map.set(name, [ member, new ArrayConst(target, member.offset, size / byteSize) ]);\r\n }\r\n return map;\r\n }\r\n\r\n private _getMemberOrThrow(name: string): Member {\r\n const member = this._members.get(name);\r\n if (!member) {\r\n throw new Error(`Member ${name} not found in layout.`);\r\n }\r\n return member;\r\n }\r\n}\r\n\r\n/**\r\n * GPU-backed uniform buffer wrapper providing typed setters and an upload method.\r\n * Use {@link TinyHelix.createUniformBuffer} to create instances.\r\n */\r\nexport class UniformBuffer implements IBuffer {\r\n private _buffer: Buffer;\r\n private _data: ArrayBuffer;\r\n private _ctx: WebGPUContext;\r\n private _dataViews: Map<string, [Member, IndexedCollection]> = new Map();\r\n\r\n /**\r\n * Create a new UniformBuffer with the given layout and WebGPU context.\r\n * @internal\r\n */\r\n constructor(layout: UniformBufferLayout, ctx: WebGPUContext) {\r\n const data = new ArrayBuffer(layout.size);\r\n this._buffer = new BufferBuilder(ctx)\r\n .withUsage(GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST)\r\n .withData(data, true)\r\n .build();\r\n this._data = this._buffer.data!;\r\n this._dataViews = layout._createDataViews(this._data);\r\n\r\n // hmmm let's think a bit here.\r\n // We could go through all the members of the layout and create typed views for them, so we don't need all the\r\n // _write functions upstairs\r\n this._ctx = ctx;\r\n }\r\n\r\n /**\r\n * Sets the value of a scalar field.\r\n * @param name Name of the scalar field.\r\n * @param value Value to set.\r\n */\r\n setScalar(name: string, value: number): this {\r\n const [ member, target ] = this._dataViews.get(name)!;\r\n\r\n if (member.type.baseType === BaseType.Float16) {\r\n target[0] = float32ToFloat16(value);\r\n }\r\n else {\r\n target[0] = value;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the values for a vector field.\r\n * @param name Name of the vector field.\r\n * @param values Array of values to set.\r\n */\r\n setVec(name: string, values: number[] | IndexedCollection): this {\r\n const [ member, target ] = this._dataViews.get(name)!;\r\n\r\n if (member.type.baseType == BaseType.Float16) {\r\n for (let i = 0; i < values.length; ++i) {\r\n target[i] = float32ToFloat16(values[i]);\r\n }\r\n } else {\r\n for (let i = 0; i < values.length; ++i) {\r\n target[i] = values[i];\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the values for a matrix field.\r\n * @param name Name of the matrix field.\r\n * @param values Array of values to set. The values are expected to be in column-major order.\r\n */\r\n setMatrix(name: string, values: number[] | IndexedCollection): this {\r\n const [ member, target ] = this._dataViews.get(name)!;\r\n\r\n const numCols = member.type.numCols;\r\n const numRows = member.type.numRows;\r\n const skipW = numRows === 3;\r\n\r\n // I know looping inside the cases looks ugly and the loops are tiny, but I just can't bring myself to put\r\n // a switch in a loop\r\n let i = 0;\r\n if (member.type.baseType === BaseType.Float16) {\r\n for (let col = 0; col < numCols; ++col) {\r\n for (let row = 0; row < numRows; ++row) {\r\n target[i] = float32ToFloat16(values[i]);\r\n ++i;\r\n }\r\n if (skipW) ++i;\r\n }\r\n } else {\r\n for (let col = 0; col < numCols; ++col) {\r\n for (let row = 0; row < numRows; ++row) {\r\n target[i] = values[i];\r\n ++i;\r\n }\r\n if (skipW) ++i;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Upload the current buffer contents to the GPU.\r\n */\r\n upload(): this {\r\n this._buffer._uploadData(this._ctx);\r\n return this;\r\n }\r\n\r\n /**\r\n * Internal accessor returning the underlying Buffer wrapper.\r\n * @internal\r\n */\r\n _getBufferResource(): GPUBindingResource {\r\n return { buffer: this._buffer._inner };\r\n }\r\n}","export enum ColorSpace {\r\n sRGB = 'srgb',\r\n DisplayP3 = 'display-p3'\r\n}\r\n\r\nexport enum FilterMode {\r\n Nearest = \"nearest\",\r\n Linear = \"linear\"\r\n}\r\n\r\nexport enum AddressMode {\r\n ClampToEdge = \"clamp-to-edge\",\r\n Repeat = \"repeat\",\r\n MirrorRepeat = \"mirror-repeat\"\r\n}\r\n\r\n/**\r\n * Face culling modes used by the render pipeline primitive state.\r\n */\r\nexport enum CullMode {\r\n None = 'none',\r\n Front = 'front',\r\n Back = 'back'\r\n}\r\n\r\nexport enum TextureFormat {\r\n R8Unorm = \"r8unorm\",\r\n R8Snorm = \"r8snorm\",\r\n R8Uint = \"r8uint\",\r\n R8Sint = \"r8sint\",\r\n R16Unorm = \"r16unorm\",\r\n R16Snorm = \"r16snorm\",\r\n R16Uint = \"r16uint\",\r\n R16Sint = \"r16sint\",\r\n R16Float = \"r16float\",\r\n RG8Unorm = \"rg8unorm\",\r\n RG8Snorm = \"rg8snorm\",\r\n RG8Uint = \"rg8uint\",\r\n RG8Sint = \"rg8sint\",\r\n R32Uint = \"r32uint\",\r\n R32Sint = \"r32sint\",\r\n R32Float = \"r32float\",\r\n RG16Unorm = \"rg16unorm\",\r\n RG16Snorm = \"rg16snorm\",\r\n RG16Uint = \"rg16uint\",\r\n RG16Sint = \"rg16sint\",\r\n RG16Float = \"rg16float\",\r\n Rgba8Unorm = \"rgba8unorm\",\r\n Rgba8UnormSrgb = \"rgba8unorm-srgb\",\r\n Rgba8Snorm = \"rgba8snorm\",\r\n Rgba8Uint = \"rgba8uint\",\r\n Rgba8Sint = \"rgba8sint\",\r\n Bgra8Unorm = \"bgra8unorm\",\r\n Bgra8UnormSrgb = \"bgra8unorm-srgb\",\r\n Rgb9e5Ufloat = \"rgb9e5ufloat\",\r\n Rgb10a2Uint = \"rgb10a2uint\",\r\n Rgb10a2Unorm = \"rgb10a2unorm\",\r\n Rg11b10Ufloat = \"rg11b10ufloat\",\r\n RG32Uint = \"rg32uint\",\r\n RG32Sint = \"rg32sint\",\r\n RG32Float = \"rg32float\",\r\n Rgba16Unorm = \"rgba16unorm\",\r\n Rgba16Snorm = \"rgba16snorm\",\r\n Rgba16Uint = \"rgba16uint\",\r\n Rgba16Sint = \"rgba16sint\",\r\n Rgba16Float = \"rgba16float\",\r\n Rgba32Uint = \"rgba32uint\",\r\n Rgba32Sint = \"rgba32sint\",\r\n Rgba32Float = \"rgba32float\",\r\n Stencil8 = \"stencil8\",\r\n Depth16Unorm = \"depth16unorm\",\r\n Depth24Plus = \"depth24plus\",\r\n Depth24PlusStencil8 = \"depth24plus-stencil8\",\r\n Depth32Float = \"depth32float\",\r\n Depth32FloatStencil8 = \"depth32float-stencil8\",\r\n Bc1RgbaUnorm = \"bc1-rgba-unorm\",\r\n Bc1RgbaUnormSrgb = \"bc1-rgba-unorm-srgb\",\r\n Bc2RgbaUnorm = \"bc2-rgba-unorm\",\r\n Bc2RgbaUnormSrgb = \"bc2-rgba-unorm-srgb\",\r\n Bc3RgbaUnorm = \"bc3-rgba-unorm\",\r\n Bc3RgbaUnormSrgb = \"bc3-rgba-unorm-srgb\",\r\n Bc4RUnorm = \"bc4-r-unorm\",\r\n Bc4RSnorm = \"bc4-r-snorm\",\r\n Bc5RgUnorm = \"bc5-rg-unorm\",\r\n Bc5RgSnorm = \"bc5-rg-snorm\",\r\n Bc6hRgbUfloat = \"bc6h-rgb-ufloat\",\r\n Bc6hRgbFloat = \"bc6h-rgb-float\",\r\n Bc7RgbaUnorm = \"bc7-rgba-unorm\",\r\n Bc7RgbaUnormSrgb = \"bc7-rgba-unorm-srgb\",\r\n Etc2Rgb8Unorm = \"etc2-rgb8unorm\",\r\n Etc2Rgb8UnormSrgb = \"etc2-rgb8unorm-srgb\",\r\n Etc2Rgb8A1Unorm = \"etc2-rgb8a1unorm\",\r\n Etc2Rgb8A1UnormSrgb = \"etc2-rgb8a1unorm-srgb\",\r\n Etc2Rgba8Unorm = \"etc2-rgba8unorm\",\r\n Etc2Rgba8UnormSrgb = \"etc2-rgba8unorm-srgb\",\r\n EacR11Unorm = \"eac-r11unorm\",\r\n EacR11Snorm = \"eac-r11snorm\",\r\n EacRg11Unorm = \"eac-rg11unorm\",\r\n EacRg11Snorm = \"eac-rg11snorm\",\r\n Astc4x4Unorm = \"astc-4x4-unorm\",\r\n Astc4x4UnormSrgb = \"astc-4x4-unorm-srgb\",\r\n Astc5x4Unorm = \"astc-5x4-unorm\",\r\n Astc5x4UnormSrgb = \"astc-5x4-unorm-srgb\",\r\n Astc5x5Unorm = \"astc-5x5-unorm\",\r\n Astc5x5UnormSrgb = \"astc-5x5-unorm-srgb\",\r\n Astc6x5Unorm = \"astc-6x5-unorm\",\r\n Astc6x5UnormSrgb = \"astc-6x5-unorm-srgb\",\r\n Astc6x6Unorm = \"astc-6x6-unorm\",\r\n Astc6x6UnormSrgb = \"astc-6x6-unorm-srgb\",\r\n Astc8x5Unorm = \"astc-8x5-unorm\",\r\n Astc8x5UnormSrgb = \"astc-8x5-unorm-srgb\",\r\n Astc8x6Unorm = \"astc-8x6-unorm\",\r\n Astc8x6UnormSrgb = \"astc-8x6-unorm-srgb\",\r\n Astc8x8Unorm = \"astc-8x8-unorm\",\r\n Astc8x8UnormSrgb = \"astc-8x8-unorm-srgb\",\r\n Astc10x5Unorm = \"astc-10x5-unorm\",\r\n Astc10x5UnormSrgb = \"astc-10x5-unorm-srgb\",\r\n Astc10x6Unorm = \"astc-10x6-unorm\",\r\n Astc10x6UnormSrgb = \"astc-10x6-unorm-srgb\",\r\n Astc10x8Unorm = \"astc-10x8-unorm\",\r\n Astc10x8UnormSrgb = \"astc-10x8-unorm-srgb\",\r\n Astc10x10Unorm = \"astc-10x10-unorm\",\r\n Astc10x10UnormSrgb = \"astc-10x10-unorm-srgb\",\r\n Astc12x10Unorm = \"astc-12x10-unorm\",\r\n Astc12x10UnormSrgb = \"astc-12x10-unorm-srgb\",\r\n Astc12x12Unorm = \"astc-12x12-unorm\",\r\n Astc12x12UnormSrgb = \"astc-12x12-unorm-srgb\"\r\n}\r\n\r\nexport enum BlendFactor {\r\n Zero = \"zero\",\r\n One = \"one\",\r\n SrcColor = \"src\",\r\n OneMinusSrcColor = \"one-minus-src\",\r\n SrcAlpha = \"src-alpha\",\r\n OneMinusSrcAlpha = \"one-minus-src-alpha\",\r\n DstColor = \"dst\",\r\n OneMinusDstColor = \"one-minus-dst\",\r\n DstAlpha = \"dst-alpha\",\r\n OneMinusDstAlpha = \"one-minus-dst-alpha\",\r\n SrcAlphaSaturated = \"src-alpha-saturated\",\r\n Constant = \"constant\",\r\n OneMinusConstant = \"one-minus-constant\",\r\n Src1Color = \"src1\",\r\n OneMinusSrc1Color = \"one-minus-src1\",\r\n Src1Alpha = \"src1-alpha\",\r\n OneMinusSrc1Alpha = \"one-minus-src1-alpha\"\r\n}\r\n\r\nexport enum CompareFunction {\r\n Never = \"never\",\r\n Less = \"less\",\r\n Equal = \"equal\",\r\n LessEqual = \"less-equal\",\r\n Greater = \"greater\",\r\n NotEqual = \"not-equal\",\r\n GreaterEqual = \"greater-equal\",\r\n Always = \"always\"\r\n}\r\n\r\nexport enum StorageAccess {\r\n ReadWrite = \"read-write\",\r\n Read = \"read-only\",\r\n Write = \"write-only\"\r\n}","/**\r\n * Convert a JavaScript number (float32) to IEEE 754 binary16 (float16) representation.\r\n * Returns the 16-bit unsigned integer bit pattern for the half-float.\r\n */\r\nexport function float32ToFloat16(value: number): number {\r\n // This is a compact implementation adapted for correctness.\r\n const f32 = new Float32Array(1);\r\n f32[0] = value;\r\n const f32u = new Uint32Array(f32.buffer)[0];\r\n\r\n const sign = (f32u >> 16) & 0x8000;\r\n const exponent = ((f32u >> 23) & 0xff) - 127;\r\n const mantissa = f32u & 0x007fffff;\r\n\r\n if (exponent <= -15) {\r\n // Too small to be represented as a normalized half-float -> zero or subnormal\r\n // Round-to-zero behavior\r\n return sign;\r\n }\r\n\r\n if (exponent > 16) {\r\n // Overflow -> return Infinity\r\n return sign | 0x7c00;\r\n }\r\n\r\n const halfExp = exponent + 15;\r\n const halfMant = mantissa >> 13;\r\n return sign | (halfExp << 10) | halfMant;\r\n}","/**\r\n * Maps undefined values to undefined and non-undefined values to the result of fn. Similar to Rust's `Option<T>::map`.\r\n * @param value The value to map.\r\n * @param fn The mapping function.\r\n */\r\nexport function mapUndefined<T, U>(value: T | undefined, fn: (val: T) => U): U | undefined {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n return fn(value);\r\n}","/**\r\n * Pad an ArrayBuffer (or SharedArrayBuffer) to the given alignment in bytes.\r\n * If the input is already aligned, the original buffer is returned. Otherwise a\r\n * new buffer is allocated, the contents copied, and the new buffer returned.\r\n *\r\n * @param input - The input ArrayBuffer or SharedArrayBuffer to pad\r\n * @param alignment - Desired byte alignment (e.g. 4 for 32-bit alignment)\r\n * @returns A buffer with byteLength rounded up to the nearest multiple of alignment\r\n */\r\nexport function padArrayBuffer(input: ArrayBuffer | SharedArrayBuffer, alignment: number): ArrayBuffer | SharedArrayBuffer {\r\n const targetSize = Math.ceil(input.byteLength / alignment) * alignment;\r\n if (targetSize === input.byteLength) return input;\r\n const data = input instanceof ArrayBuffer ? new ArrayBuffer(targetSize) : new SharedArrayBuffer(targetSize);\r\n const src = new Uint8Array(input);\r\n const dst = new Uint8Array(data);\r\n dst.set(src);\r\n return data;\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\r\n * tiny-helix: A TypeScript library for WebGPU\r\n * @packageDocumentation\r\n */\r\n\r\nexport {TinyHelix, type TinyHelixOptions} from \"./TinyHelix\";\r\nexport {WebGPUContext, type WebGPUContextOptions} from \"./WebGPUContext\";\r\n\r\n// Default export for convenience\r\nimport {TinyHelix} from \"./TinyHelix\";\r\n\r\nexport default TinyHelix;\r\n\r\nexport * from \"./BindGroup\";\r\nexport * from \"./BlendMode\";\r\nexport * from \"./CommandEncoder\";\r\nexport * from \"./ComputePass\";\r\nexport * from \"./ComputePipeline\";\r\nexport * from \"./enums\";\r\nexport * from \"./Mesh\";\r\nexport * from \"./RenderPass\";\r\nexport * from \"./RenderPipeline\";\r\nexport * from \"./RenderTarget\";\r\nexport * from \"./Sampler\";\r\nexport * from \"./Shader\";\r\nexport * from \"./Texture\";\r\nexport * from \"./buffers/Buffer\";\r\nexport * from \"./buffers/UniformBuffer\";\r\nexport * from \"./buffers/BufferDataWriter\"\r\n"],"names":[],"ignoreList":[],"sourceRoot":""}
1
+ {"version":3,"file":"tiny-helix.debug.js","mappings":"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","sources":["webpack://TinyHelix/webpack/universalModuleDefinition","webpack://TinyHelix/./src/BindGroup.ts","webpack://TinyHelix/./src/BlendMode.ts","webpack://TinyHelix/./src/CommandEncoder.ts","webpack://TinyHelix/./src/ComputePass.ts","webpack://TinyHelix/./src/ComputePipeline.ts","webpack://TinyHelix/./src/Mesh.ts","webpack://TinyHelix/./src/RenderPass.ts","webpack://TinyHelix/./src/RenderPipeline.ts","webpack://TinyHelix/./src/RenderTarget.ts","webpack://TinyHelix/./src/Sampler.ts","webpack://TinyHelix/./src/Shader.ts","webpack://TinyHelix/./src/Texture.ts","webpack://TinyHelix/./src/TinyHelix.ts","webpack://TinyHelix/./src/WebGPUContext.ts","webpack://TinyHelix/./src/buffers/Buffer.ts","webpack://TinyHelix/./src/buffers/BufferDataWriter.ts","webpack://TinyHelix/./src/buffers/UniformBuffer.ts","webpack://TinyHelix/./src/enums.ts","webpack://TinyHelix/./src/utils/MipRenderer.ts","webpack://TinyHelix/./src/utils/float32ToFloat16.ts","webpack://TinyHelix/./src/utils/mapUndefined.ts","webpack://TinyHelix/./src/utils/padArrayBuffer.ts","webpack://TinyHelix/webpack/bootstrap","webpack://TinyHelix/webpack/runtime/define property getters","webpack://TinyHelix/webpack/runtime/hasOwnProperty shorthand","webpack://TinyHelix/webpack/runtime/make namespace object","webpack://TinyHelix/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TinyHelix\"] = factory();\n\telse\n\t\troot[\"TinyHelix\"] = factory();\n})(this, () => {\nreturn ","import {WebGPUContext} from \"./WebGPUContext\";\nimport {UniformBuffer, UniformBufferLayout} from \"./buffers/UniformBuffer\";\nimport {IBuffer} from \"./buffers/IBuffer\";\nimport {mapUndefined} from \"./utils/mapUndefined\";\nimport {Texture, TextureView} from \"./Texture\";\nimport {Sampler} from \"./Sampler\";\nimport {TextureFormat} from \"../dist\";\nimport {SamplerType, ShaderStage, StorageAccess, TextureSampleType, TextureViewDimension} from \"./enums\";\n\n/**\n * Lightweight wrapper around a GPUBindGroup.\n * Use {@link TinyHelix.createBindGroup} to create instances.\n */\nexport class BindGroup {\n /** @internal */\n readonly _inner: GPUBindGroup;\n\n /**\n * Construct a wrapper around an existing GPUBindGroup.\n * @internal\n */\n constructor(inner: GPUBindGroup) {\n this._inner = inner;\n }\n}\n\n/**\n * Builder for creating GPUBindGroup instances. Supports adding uniform buffer\n * entries and a human-readable label.\n */\nexport class BindGroupBuilder {\n private _entries: GPUBindGroupEntry[] = [];\n private _label?: string;\n private _layout: BindGroupLayout;\n private _ctx: WebGPUContext;\n\n /**\n * @internal\n */\n constructor(ctx: WebGPUContext, layout: BindGroupLayout) {\n this._ctx = ctx;\n this._layout = layout;\n }\n\n /**\n * Assign a human-readable label for the bind group (useful in GPU debuggers).\n */\n withLabel(label: string): this {\n this._label = label;\n return this;\n }\n\n /**\n * Attach a buffer to the bind group\n * @param fieldName\n * @param buffer\n */\n withBuffer(fieldName: string, buffer: IBuffer): this {\n const index = this._layout._getBindingIndex(fieldName);\n this._entries[index] = {\n binding: index, resource: buffer._getBufferResource()\n };\n return this;\n }\n\n /** Attach a texture to the bind group. */\n withTexture(fieldName: string, texture: TextureView): this {\n const index = this._layout._getBindingIndex(fieldName);\n this._entries[index] = {\n binding: index, resource: texture._inner,\n };\n return this;\n }\n\n /** Attach a sampler to the bind group at the given binding index. */\n withSampler(fieldName: string, sampler: Sampler): this {\n const index = this._layout._getBindingIndex(fieldName);\n this._entries[index] = {\n binding: index, resource: sampler._inner\n };\n return this;\n }\n\n /**\n * Create the GPUBindGroup and return a wrapped `BindGroup` instance.\n */\n build(): BindGroup\n {\n const inner = this._ctx.device.createBindGroup({\n label: this._label,\n entries: this._entries,\n layout: this._layout._inner\n });\n return new BindGroup(inner);\n }\n}\n\n/**\n * Wrapper around a GPUBindGroupLayout that also keeps track of any\n * UniformBufferLayout objects associated with the layout. Useful for\n * constructing `BindGroupBuilder` instances for specific layouts.\n */\nexport class BindGroupLayout {\n /** @internal */\n readonly _inner: GPUBindGroupLayout;\n private _uboLayouts: Map<string, UniformBufferLayout>;\n private _ctx: WebGPUContext;\n private _indices: Map<string, number>;\n\n constructor(inner: GPUBindGroupLayout, ctx: WebGPUContext, indices: Map<string, number>, uboLayouts: Map<string, UniformBufferLayout>) {\n this._inner = inner;\n this._indices = indices;\n this._uboLayouts = uboLayouts;\n this._ctx = ctx;\n }\n\n /**\n * Get the UniformBufferLayout associated with a named field (if any).\n */\n getUniformBufferLayout(name: string): UniformBufferLayout | undefined {\n return this._uboLayouts.get(name);\n }\n\n createUniformBuffer(name: string): UniformBuffer | undefined\n {\n const layout = this._uboLayouts.get(name);\n return mapUndefined(layout, layout => new UniformBuffer(layout, this._ctx));\n }\n\n _getBindingIndex(fieldName: string): number\n {\n const index = this._indices.get(fieldName);\n if (index === undefined) {\n throw(`No field name found for ${fieldName} in bind group layout.`);\n }\n return index;\n }\n}\n\n/**\n * Builder for GPUBindGroupLayout. Currently supports adding uniform buffers\n * and their associated layout information.\n */\nclass BindGroupLayoutBuilder {\n private _entries: GPUBindGroupLayoutEntry[] = [];\n private _indices: Map<string, number> = new Map();\n // TODO: add other buffer/texture types\n private _uboLayouts: Map<string, UniformBufferLayout> = new Map();\n private _label?: string;\n private _ctx: WebGPUContext;\n\n constructor(ctx: WebGPUContext) {\n this._ctx = ctx;\n }\n\n /**\n * Assign a label for the bind group layout.\n */\n withLabel(label: string): this {\n this._label = label;\n return this;\n }\n\n /**\n * Add a uniform buffer binding at the given index and record its layout.\n * @param index - binding index\n * @param field_name - a name used to reference the layout later\n * @param layout - the UniformBufferLayout describing the UBO\n * @param visibility - shader stage visibility flags (defaults to VERTEX|FRAGMENT|COMPUTE)\n */\n withUniformBuffer(index: number, field_name: string, layout: UniformBufferLayout, visibility?: GPUShaderStageFlags): this {\n this._entries[index] = {\n binding: index,\n visibility: visibility ?? ShaderStage.Vertex | ShaderStage.Fragment | ShaderStage.Compute,\n buffer: {type: 'uniform'}\n };\n this._indices.set(field_name, index);\n this._uboLayouts.set(field_name, layout);\n return this;\n }\n\n /**\n * Add a storage buffer binding at the given index and record its layout.\n * @param index - binding index\n * @param fieldName - a name used to reference the layout later\n * @param accessMode - Defines whether the storage buffer is read-only or not.\n * @param visibility - shader stage visibility flags (defaults to FRAGMENT|COMPUTE)\n */\n withStorageBuffer(index: number, fieldName: string, accessMode: StorageAccess, minBindingSize: number = 4, visibility?: GPUShaderStageFlags): this {\n let type: GPUBufferBindingType = \"storage\";\n\n if (accessMode === StorageAccess.Read) {\n type = \"read-only-storage\";\n }\n\n this._entries[index] = {\n binding: index,\n visibility: visibility ?? ShaderStage.Fragment | ShaderStage.Compute,\n buffer: {type, hasDynamicOffset: false, minBindingSize}\n };\n this._indices.set(fieldName, index);\n return this;\n }\n\n /**\n * Add a storage texture binding at the given index. The texture will be\n * write-only and use RGBA8Unorm format.\n * @param index\n * @param fieldName\n * @param format\n * @param accessMode\n * @param visibility\n * @param viewDimension\n */\n withStorageTexture(index: number, fieldName: string, format: TextureFormat, accessMode: StorageAccess, visibility?: GPUShaderStageFlags, viewDimension?: TextureViewDimension): this {\n this._entries[index] = {\n binding: index,\n visibility: visibility ?? ShaderStage.Fragment | ShaderStage.Compute,\n storageTexture: {\n access: accessMode,\n format,\n viewDimension: viewDimension ?? \"2d\"\n }\n };\n this._indices.set(fieldName, index);\n return this;\n }\n\n withTexture(index: number, fieldName: string, visibility?: GPUShaderStageFlags, viewDimension?: TextureViewDimension, sampleType: TextureSampleType = TextureSampleType.Float): this {\n this._entries[index] = {\n binding: index,\n visibility: visibility ?? ShaderStage.Fragment | ShaderStage.Compute,\n texture: {\n sampleType,\n viewDimension: viewDimension ?? \"2d\"\n }\n };\n this._indices.set(fieldName, index);\n return this;\n }\n\n withSampler(index: number, fieldName: string, samplerType: SamplerType = SamplerType.Filtering, visibility?: GPUShaderStageFlags): this {\n this._entries[index] = {\n binding: index,\n visibility: visibility ?? ShaderStage.Fragment | ShaderStage.Compute,\n sampler: {type: samplerType}\n };\n this._indices.set(fieldName, index);\n return this;\n }\n\n /**\n * Create the underlying GPUBindGroupLayout and return a wrapped `BindGroupLayout`.\n */\n build(): BindGroupLayout\n {\n const inner = this._ctx.device.createBindGroupLayout({\n label: this._label,\n entries: this._entries\n });\n return new BindGroupLayout(inner, this._ctx, this._indices, this._uboLayouts)\n }\n}\n\nexport default BindGroupLayoutBuilder\n","import {BlendFactor} from \"./enums\";\n\nexport class BlendMode {\n readonly _inner: GPUBlendState = {\n color: {srcFactor: BlendFactor.SrcAlpha, dstFactor: BlendFactor.OneMinusSrcAlpha},\n alpha: {srcFactor: BlendFactor.One, dstFactor: BlendFactor.OneMinusSrcAlpha}\n };\n\n static ALPHA: BlendMode = new BlendMode(BlendFactor.SrcAlpha, BlendFactor.OneMinusSrcAlpha, BlendFactor.One, BlendFactor.OneMinusSrcAlpha);\n static ADDITIVE: BlendMode = new BlendMode(BlendFactor.SrcAlpha, BlendFactor.One, BlendFactor.One, BlendFactor.One)\n static MULTIPLY: BlendMode = new BlendMode(BlendFactor.DstColor, BlendFactor.Zero, BlendFactor.Zero, BlendFactor.One)\n static SCREEN: BlendMode = new BlendMode(BlendFactor.One, BlendFactor.OneMinusSrcColor, BlendFactor.One, BlendFactor.OneMinusSrcAlpha)\n static OVERLAY: BlendMode = new BlendMode(BlendFactor.SrcAlpha, BlendFactor.OneMinusSrcAlpha, BlendFactor.One, BlendFactor.OneMinusSrcAlpha)\n static DARKEN: BlendMode = new BlendMode(BlendFactor.One, BlendFactor.OneMinusSrcColor, BlendFactor.One, BlendFactor.OneMinusSrcAlpha)\n static LIGHTEN: BlendMode = new BlendMode(BlendFactor.OneMinusSrcColor, BlendFactor.One, BlendFactor.One, BlendFactor.OneMinusSrcAlpha)\n\n get srcFactor(): BlendFactor { return this._inner.color.srcFactor as BlendFactor; }\n set srcFactor(value: BlendFactor) { this._inner.color.srcFactor = value; }\n get dstFactor(): BlendFactor { return this._inner.color.dstFactor as BlendFactor; }\n set dstFactor(value: BlendFactor) { this._inner.color.dstFactor = value; }\n get alphaSrcFactor(): BlendFactor { return this._inner.alpha.srcFactor as BlendFactor; }\n set alphaSrcFactor(value: BlendFactor) { this._inner.alpha.srcFactor = value; }\n get alphaDstFactor(): BlendFactor { return this._inner.alpha.dstFactor as BlendFactor; }\n set alphaDstFactor(value: BlendFactor) { this._inner.alpha.dstFactor = value; }\n\n constructor(srcFactor: BlendFactor, dstFactor: BlendFactor, alphaSrcFactor: BlendFactor, alphaDstFactor: BlendFactor) {\n this.srcFactor = srcFactor;\n this.dstFactor = dstFactor;\n this.alphaSrcFactor = alphaSrcFactor;\n this.alphaDstFactor = alphaDstFactor;\n }\n}","import {WebGPUContext} from \"./WebGPUContext\";\nimport {RenderPassBuilder} from \"./RenderPass\";\nimport {RenderTarget} from \"./RenderTarget\";\nimport {ComputePassBuilder} from \"./ComputePass\";\nimport {BindGroup} from \"./BindGroup\";\nimport {Buffer} from \"./buffers/Buffer\";\n\n/**\n * Encapsulates a GPUCommandEncoder and provides helper methods to build and\n * submit GPU commands for a single frame. CommandEncoder should only be created\n * through the TinyHelix instance (See {@link TinyHelix.createCommandEncoder})\n */\nexport class CommandEncoder {\n private _encoder: GPUCommandEncoder;\n private _queue: GPUQueue;\n private _backbufferTarget: RenderTarget;\n private _commandBuffer: GPUCommandBuffer | null = null;\n private _depthStencilTarget: RenderTarget | undefined;\n private _globalBindGroups: BindGroup[];\n\n /**\n * Create a new CommandEncoder bound to a backbuffer/render target and\n * the WebGPU context.\n *\n * @internal\n */\n constructor(backbufferTarget: RenderTarget, globalBindGroups: BindGroup[], ctx: WebGPUContext, depthStencilTarget?: RenderTarget, label?: string) {\n const device = ctx.device;\n this._queue = device.queue;\n this._backbufferTarget = backbufferTarget;\n this._depthStencilTarget = depthStencilTarget;\n this._globalBindGroups = globalBindGroups;\n this._encoder = device.createCommandEncoder({label});\n }\n\n /**\n * Clears a buffer's contents\n */\n clearBuffer(buffer: Buffer, offset?: number, size?: number): this\n {\n this._encoder.clearBuffer(buffer._inner, offset, size);\n return this;\n }\n\n /**\n * Begin building a render pass attached to this encoder.\n * Returns a fluent RenderPassBuilder used to configure attachments and clear ops.\n */\n createRenderPass(): RenderPassBuilder {\n return new RenderPassBuilder(this._encoder, this._globalBindGroups, this._backbufferTarget, this._depthStencilTarget);\n }\n\n /**\n * Begin building a compute pass attached to this encoder.\n * Returns a fluent ComputePassBuilder used to configure bindings and dispatch ops.\n */\n createComputePass(): ComputePassBuilder {\n return new ComputePassBuilder(this._encoder, this._globalBindGroups);\n }\n\n /**\n * Mark the encoder as finished and finalize any pending commands.\n * Calling finish() multiple times is safe but a no-op after the first call.\n */\n finish() {\n if (!this._commandBuffer) {\n this._commandBuffer = this._encoder.finish();\n }\n }\n\n /**\n * Submit the recorded commands to the GPU queue. If the encoder has not\n * been finished yet, finish() will be called automatically.\n */\n submit() {\n this.finish();\n this._queue.submit([this._commandBuffer!]);\n }\n}","import {BindGroup} from \"./BindGroup\";\nimport {ComputePipeline} from \"./ComputePipeline\";\nimport {Buffer} from \"./buffers/Buffer\";\n\nexport class ComputePass\n{\n private readonly _inner: GPUComputePassEncoder;\n\n constructor(inner: GPUComputePassEncoder) {\n this._inner = inner;\n\n }\n\n /**\n * Set the compute pipeline to use for the next dispatch calls.\n * @param pipeline\n */\n setPipeline(pipeline: ComputePipeline): this {\n this._inner.setPipeline(pipeline._inner);\n return this;\n }\n\n dispatch(x: GPUSize32, y?: GPUSize32, z?: GPUSize32): this\n {\n this._inner.dispatchWorkgroups(x, y, z)\n return this;\n }\n\n dispatchIndirect(buffer: Buffer, offset: number): this\n {\n this._inner.dispatchWorkgroupsIndirect(buffer._inner, offset);\n return this;\n }\n\n /**\n * Set a bind group at the given index.\n * @param index - bind group index in the render pipeline layout\n * @param bindGroup - a `BindGroup` instance\n */\n setBindGroup(index: number, bindGroup: BindGroup): this\n {\n this._inner.setBindGroup(index, bindGroup._inner);\n return this;\n }\n\n /**\n * End the compute pass. After calling end(), the underlying encoder may\n * continue recording other passes or be finished/submitted.\n */\n end() {\n this._inner.end();\n }\n}\n\nexport class ComputePassBuilder\n{\n private _label?: string;\n private _encoder: GPUCommandEncoder;\n private _globalBindGroups: BindGroup[];\n\n constructor(encoder: GPUCommandEncoder, globalBindGroups: BindGroup[]) {\n this._encoder = encoder;\n this._globalBindGroups = globalBindGroups;\n }\n\n /**\n * Assign a human-readable label for the render pass (useful for GPU debuggers).\n */\n withLabel(label: string): this {\n this._label = label;\n return this;\n }\n\n build(): ComputePass {\n const desc: GPUComputePassDescriptor = {\n label: this._label\n };\n\n const pass = new ComputePass(this._encoder.beginComputePass(desc));\n for (let i = 0; i < this._globalBindGroups.length; ++i) {\n pass.setBindGroup(i, this._globalBindGroups[i]);\n }\n return pass;\n }\n}","import {TinyHelix} from \"./TinyHelix\";\nimport {WebGPUContext} from \"./WebGPUContext\";\nimport {Shader} from \"./Shader\";\nimport {mapUndefined} from \"./utils/mapUndefined\";\nimport {MeshTopology} from \"./Mesh\";\n\nexport class ComputePipeline {\n readonly _inner: GPUComputePipeline;\n\n constructor(inner: GPUComputePipeline) {\n this._inner = inner;\n }\n}\n\nexport class ComputePipelineBuilder {\n private _ctx: WebGPUContext;\n private _label?: string;\n private _shader!: Shader;\n private _entry!: string;\n private _overrideConstants: Record<string, number> = {};\n\n constructor(ctx: WebGPUContext) {\n this._ctx = ctx;\n }\n\n withLabel(label: string): this\n {\n this._label = label;\n return this;\n }\n\n withOverrideConstant(id: string, value: number): this {\n this._overrideConstants[id] = value;\n return this;\n }\n\n /** Select the shader entry point for the fragment stage. */\n withShader(shader: Shader, entry: string): this {\n this._shader = shader;\n this._entry = entry;\n return this;\n }\n\n build(): ComputePipeline {\n const shader = this._shader;\n const layout = mapUndefined(\n shader._bindGroupLayouts,\n bindGroupLayouts => this._ctx.device.createPipelineLayout({\n bindGroupLayouts: bindGroupLayouts.map(value => value._inner),\n label: this._label\n })\n ) ?? \"auto\";\n\n const desc: GPUComputePipelineDescriptor = {\n label: this._label,\n compute: {\n module: shader._inner,\n entryPoint: this._entry,\n constants: this._overrideConstants\n },\n layout\n };\n return new ComputePipeline(this._ctx.device.createComputePipeline(desc));\n }\n}","import {Buffer, BufferBuilder, BufferUsage} from \"./buffers/Buffer\";\nimport {WebGPUContext} from \"./WebGPUContext\";\nimport {mapUndefined} from \"./utils/mapUndefined\";\n\n/**\n * Index buffer formats supported by the library.\n */\nexport enum IndexFormat {\n Uint16 = 'uint16',\n Uint32 = 'uint32'\n}\n\nclass IndexBuffer {\n buffer: Buffer;\n format: IndexFormat;\n count: number;\n\n constructor(data: Uint16Array | Uint32Array, ctx: WebGPUContext, keepData: boolean = false) {\n // Use BYTES_PER_ELEMENT on the union-typed array in a typed manner to avoid 'any' casts\n const bytesPerElement = (data as Uint16Array | Uint32Array).BYTES_PER_ELEMENT;\n this.format = bytesPerElement === 2 ? IndexFormat.Uint16 : IndexFormat.Uint32;\n this.count = data.length;\n this.buffer = new BufferBuilder(ctx)\n .withData(data.buffer, keepData, data.byteOffset, data.byteLength)\n .withUsage(BufferUsage.CopyDst | BufferUsage.Index)\n .build();\n }\n}\n\n/**\n * Mesh topology enum (maps to GPU primitive topologies).\n */\nexport enum MeshTopology {\n TriangleList = 'triangle-list',\n TriangleStrip = 'triangle-strip',\n LineList = 'line-list',\n LineStrip = 'line-strip',\n PointList = 'point-list'\n}\n\n/**\n * Winding mode for front-facing triangles.\n */\nexport enum FrontFace {\n Clockwise = 'cw',\n CounterClockwise = 'ccw'\n}\n\n/**\n * Vertex attribute formats supported by the helper. These are translated into\n * GPU vertex attribute formats when building pipelines.\n */\nexport enum VertexFormat {\n Uint8 = 'uint8',\n Uint8x2 = 'uint8x2',\n Uint8x4 = 'uint8x4',\n Sint8 = 'sint8',\n Sint8x2 = 'sint8x2',\n Sint8x4 = 'sint8x4',\n Unorm8 = 'unorm8',\n Unorm8x2 = 'unorm8x2',\n Unorm8x4 = 'unorm8x4',\n Snorm8 = 'snorm8',\n Snorm8x2 = 'snorm8x2',\n Snorm8x4 = 'snorm8x4',\n Uint16 = 'uint16',\n Uint16x2 = 'uint16x2',\n Uint16x4 = 'uint16x4',\n Sint16 = 'sint16',\n Sint16x2 = 'sint16x2',\n Sint16x4 = 'sint16x4',\n Unorm16 = 'unorm16',\n Unorm16x2 = 'unorm16x2',\n Unorm16x4 = 'unorm16x4',\n Snorm16 = 'snorm16',\n Snorm16x2 = 'snorm16x2',\n Snorm16x4 = 'snorm16x4',\n Float16 = 'float16',\n Float16x2 = 'float16x2',\n Float16x4 = 'float16x4',\n Float32 = 'float32',\n Float32x2 = 'float32x2',\n Float32x3 = 'float32x3',\n Float32x4 = 'float32x4',\n Uint32 = 'uint32',\n Uint32x2 = 'uint32x2',\n Uint32x3 = 'uint32x3',\n Uint32x4 = 'uint32x4',\n Sint32 = 'sint32',\n Sint32x2 = 'sint32x2',\n Sint32x3 = 'sint32x3',\n Sint32x4 = 'sint32x4',\n Unorm10_10_10_2 = 'unorm10-10-10-2',\n Unorm8x4_bgra = 'unorm8x4-bgra'\n}\n\n/**\n * Lightweight Mesh representation containing vertex streams and an optional index buffer.\n * Use `MeshBuilder` to construct instances.\n */\nexport class Mesh {\n private _topology: MeshTopology;\n private _frontFace: FrontFace;\n private _streams: VertexStream[] = [];\n private _indexBuffer?: IndexBuffer;\n private _numVertices: number;\n\n /**\n * @internal\n */\n constructor(topology: MeshTopology, frontFace: FrontFace, streams: VertexStream[], indexBuffer?: IndexBuffer) {\n this._topology = topology;\n this._frontFace = frontFace;\n this._streams = streams;\n this._indexBuffer = indexBuffer;\n this._numVertices = this._streams[0].numVertices;\n\n this._streams.forEach(\n stream => console.assert(stream.numVertices === this._numVertices,\n \"All vertex streams must have the same number of vertices.\"\n ));\n }\n\n /** The primitive topology for this mesh. */\n get topology(): MeshTopology {\n return this._topology;\n }\n\n /** The winding used to determine front-facing triangles. */\n get frontFace(): FrontFace {\n return this._frontFace;\n }\n\n /** The number of vertex streams in this mesh. */\n get numStreams() {\n return this._streams.length;\n }\n\n /** Get the number of vertices in the first vertex stream. */\n get numVertices() {\n return this._numVertices;\n }\n\n /** Get the GPU-backed vertex buffer for a given stream index. */\n getVertexBuffer(streamIndex: number): Buffer {\n return this._streams[streamIndex].buffer!;\n }\n\n /** Get the stride (byte size) of a vertex in the requested stream. */\n getStreamStride(streamIndex: number): number {\n return this._streams[streamIndex].stride;\n }\n\n /** Get the declared attributes for a vertex stream. */\n getStreamAttributes(streamIndex: number): VertexAttribute[] {\n return this._streams[streamIndex].attributes;\n }\n\n /** Get the optional index buffer backing this mesh. */\n get indexBuffer(): Buffer | undefined {\n return this._indexBuffer?.buffer;\n }\n\n /** Get the index format of the index buffer backing this mesh. */\n get indexFormat(): IndexFormat {\n return this._indexBuffer?.format ?? IndexFormat.Uint16;\n }\n\n /** Get the number of indices in the index buffer backing this mesh. */\n get numIndices(): number {\n return this._indexBuffer?.count ?? 0;\n }\n}\n\nfunction vertexFormatByteSize(format: VertexFormat): number {\n switch (format) {\n case VertexFormat.Uint8:\n case VertexFormat.Sint8:\n case VertexFormat.Unorm8:\n case VertexFormat.Snorm8:\n return 1;\n case VertexFormat.Uint8x2:\n case VertexFormat.Sint8x2:\n case VertexFormat.Unorm8x2:\n case VertexFormat.Snorm8x2:\n case VertexFormat.Uint16:\n case VertexFormat.Sint16:\n case VertexFormat.Unorm16:\n case VertexFormat.Snorm16:\n case VertexFormat.Float16:\n return 2;\n case VertexFormat.Uint8x4:\n case VertexFormat.Sint8x4:\n case VertexFormat.Unorm8x4:\n case VertexFormat.Snorm8x4:\n case VertexFormat.Uint16x2:\n case VertexFormat.Sint16x2:\n case VertexFormat.Unorm16x2:\n case VertexFormat.Snorm16x2:\n case VertexFormat.Float16x2:\n case VertexFormat.Float32:\n case VertexFormat.Uint32:\n case VertexFormat.Sint32:\n case VertexFormat.Unorm10_10_10_2:\n case VertexFormat.Unorm8x4_bgra:\n return 4;\n case VertexFormat.Uint16x4:\n case VertexFormat.Sint16x4:\n case VertexFormat.Unorm16x4:\n case VertexFormat.Snorm16x4:\n case VertexFormat.Float16x4:\n case VertexFormat.Float32x2:\n case VertexFormat.Uint32x2:\n case VertexFormat.Sint32x2:\n return 8;\n case VertexFormat.Float32x3:\n case VertexFormat.Uint32x3:\n case VertexFormat.Sint32x3:\n return 12;\n\n case VertexFormat.Float32x4:\n case VertexFormat.Uint32x4:\n case VertexFormat.Sint32x4:\n return 16;\n }\n}\n\nexport type VertexAttribute = {\n name: string;\n format: VertexFormat;\n offset: number;\n}\n\nclass VertexStream {\n stride: number = 0;\n attributes: VertexAttribute[] = [];\n buffer?: Buffer;\n\n pushAttribute(name: string, format: VertexFormat) {\n this.attributes.push({name, format, offset: this.stride});\n this.stride += vertexFormatByteSize(format);\n }\n\n get numVertices(): number {\n return this.buffer!.size / this.stride;\n }\n}\n\n/**\n * Builder helper used when creating a vertex stream for a Mesh.\n */\nexport class StreamBuilder {\n private _stream: VertexStream;\n private _ctx: WebGPUContext;\n\n /**\n * @internal\n */\n constructor(stream: VertexStream, ctx: WebGPUContext) {\n this._stream = stream;\n this._ctx = ctx;\n }\n\n /**\n * Add a vertex attribute to the stream.\n * @param name - attribute name used by the shader bindings\n * @param format - attribute format (see VertexFormat)\n */\n pushAttribute(name: string, format: VertexFormat): this {\n this._stream.pushAttribute(name, format);\n return this;\n }\n\n /**\n * Upload vertex data for this stream. `keepOnCPU` controls whether the\n * source ArrayBuffer is retained in memory for readback.\n */\n withData(data: ArrayBufferLike, byteOffset: number = 0, byteLength?: number, keepOnCPU: boolean = false) {\n byteLength = byteLength ?? (data.byteLength - byteOffset);\n this._stream.buffer = new BufferBuilder(this._ctx)\n .withData(data, keepOnCPU, byteOffset, byteLength)\n .withUsage(BufferUsage.Vertex | BufferUsage.CopyDst)\n .build();\n }\n}\n\n/**\n * Fluent builder for creating a Mesh. Use `pushStream()` to describe vertex\n * streams and `withIndexData()` to add optional indices.\n */\nexport class MeshBuilder {\n private _topology: MeshTopology = MeshTopology.TriangleList;\n private _frontFace: FrontFace = FrontFace.CounterClockwise;\n private _streams: VertexStream[] = [];\n private _ctx: WebGPUContext;\n private _indexBuffer?: IndexBuffer;\n\n /**\n * @internal\n */\n constructor(ctx: WebGPUContext) {\n this._ctx = ctx;\n }\n\n /** Add a vertex stream using a builder callback. */\n pushStream(buildFunc: (builder: StreamBuilder) => void): this {\n const stream = new VertexStream();\n buildFunc(new StreamBuilder(stream, this._ctx));\n console.assert(stream.buffer !== undefined, \"Vertex stream must have a buffer. Did you forget to call withData()?\");\n this._streams.push(stream);\n return this;\n }\n\n /** Set the winding used to determine front-facing triangles. Defaults to counter-clockwise. */\n withFrontFace(value: FrontFace): this {\n this._frontFace = value;\n return this;\n }\n\n /** Set the primitive topology for the mesh. Defaults to triangle list. */\n withTopology(value: MeshTopology): this {\n this._topology = value;\n return this;\n }\n\n /**\n * Provide index data (Uint16Array or Uint32Array). If `keepOnCPU` is true the\n * original array buffer will be preserved on the resulting mesh's index buffer.\n */\n withIndexData(data: Uint16Array | Uint32Array, keepOnCPU: boolean = false): this {\n this._indexBuffer = mapUndefined(data, data => new IndexBuffer(data, this._ctx, keepOnCPU));\n return this;\n }\n\n /** Build the mesh. */\n build(): Mesh {\n console.assert(this._streams.length > 0, \"Mesh must have at least one vertex stream.\");\n return new Mesh(\n this._topology,\n this._frontFace,\n this._streams,\n this._indexBuffer,\n );\n }\n}\n","import {RenderTarget} from \"./RenderTarget\";\nimport {RenderPipeline} from \"./RenderPipeline\";\nimport {Mesh} from \"./Mesh\";\nimport {BindGroup} from \"./BindGroup\";\nimport {IndexedCollection} from \"./utils/IndexedCollection\";\nimport {mapUndefined} from \"./utils/mapUndefined\";\nimport {StoreOp, TextureFormat} from \"./enums\";\nimport {Buffer} from \"./buffers/Buffer\";\n\n/**\n * Lightweight wrapper around GPURenderPassEncoder. Provides a minimal API\n * for ending the pass; higher-level helpers may be added later.\n */\nexport class RenderPass {\n private readonly _inner: GPURenderPassEncoder;\n private _renderPipeline?: RenderPipeline;\n private _numVertices: number = 0;\n private _numIndices: number = 0;\n\n /**\n * Internal accessor for the underlying GPURenderPassEncoder. Not intended for public use.\n * @internal\n */\n constructor(inner: GPURenderPassEncoder) {\n this._inner = inner;\n }\n\n /**\n * Set the render pipeline to use for the next draw calls.\n * @param pipeline\n */\n setPipeline(pipeline: RenderPipeline): this {\n if (this._renderPipeline != pipeline) {\n this._inner.setPipeline(pipeline._inner);\n this._renderPipeline = pipeline;\n }\n\n return this;\n }\n\n /**\n * Sets the mesh to use for the next draw calls.\n * @param mesh\n */\n setMesh(mesh: Mesh): this {\n for (let i = 0; i < mesh.numStreams; ++i) {\n const vertex_buffer = mesh.getVertexBuffer(i);\n this._inner.setVertexBuffer(i, vertex_buffer._inner);\n }\n\n this._numVertices = mesh.numVertices;\n\n const indexBuffer = mesh.indexBuffer;\n if (indexBuffer) {\n this._inner.setIndexBuffer(indexBuffer._inner, mesh.indexFormat);\n this._numIndices = mesh.numIndices;\n } else {\n this._numIndices = 0;\n }\n\n return this;\n }\n\n /**\n * Set a bind group at the given index.\n * @param index - bind group index in the render pipeline layout\n * @param bindGroup - a `BindGroup` instance\n */\n setBindGroup(index: number, bindGroup: BindGroup): this {\n this._inner.setBindGroup(index, bindGroup._inner);\n return this;\n }\n\n /**\n * Issue a draw call using the currently set pipeline and mesh.\n */\n draw(numInstances = 1): this {\n if (this._numIndices) {\n this._inner.drawIndexed(this._numIndices, numInstances, 0, 0, 0);\n } else {\n this._inner.draw(this._numVertices, numInstances, 0, 0);\n }\n return this;\n }\n\n /**\n * Issue an indirect draw call using the currently set pipeline and mesh.\n * @param indirectBuffer A Buffer containing the draw parameters. The buffer must have been created with the `Indirect` usage flag.\n * @param indirectOffset The offset in bytes into the indirectBuffer where the draw parameters are stored. Must be a multiple of 4.\n */\n drawIndirect(indirectBuffer: Buffer, indirectOffset: number = 0): this {\n if (this._numIndices) {\n this._inner.drawIndexedIndirect(indirectBuffer._inner, indirectOffset);\n }\n else {\n this._inner.drawIndirect(indirectBuffer._inner, indirectOffset);\n }\n return this;\n }\n\n /**\n * End the render pass. After calling end(), the underlying encoder may\n * continue recording other passes or be finished/submitted.\n */\n end() {\n this._inner.end();\n }\n}\n\n/**\n * Fluent builder for configuring and creating a render pass.\n *\n * Use the builder to specify color targets, clear values and labels before\n * calling `build()` to obtain a `RenderPass` instance.\n */\nexport class RenderPassBuilder {\n private _encoder: GPUCommandEncoder;\n private _label?: string;\n private _colorTargets: RenderTarget[] = [];\n private _clearColors: number[][] = [];\n private _defaultTarget: RenderTarget;\n private _defaultDepthTarget?: RenderTarget;\n private _depthTarget?: RenderTarget;\n private _clearDepth?: number;\n private _clearStencil?: number;\n private _globalBindGroups: BindGroup[];\n private _storeOps: GPUStoreOp[] = [];\n\n /**\n * Create a new builder instance. This should only be called from the CommandEncoder\n * instance (see {@link CommandEncoder.createRenderPass}).\n * @internal\n */\n constructor(commandEncoder: GPUCommandEncoder, globalBindGroups: BindGroup[], defaultTarget: RenderTarget, defaultDepthTarget?: RenderTarget) {\n this._encoder = commandEncoder;\n this._defaultTarget = defaultTarget;\n this._defaultDepthTarget = defaultDepthTarget;\n this._globalBindGroups = globalBindGroups;\n }\n\n /**\n * Assign a human-readable label for the render pass (useful for GPU debuggers).\n */\n withLabel(label: string): this {\n this._label = label;\n return this;\n }\n\n /**\n * Add a color target to render into. If no targets are added the default\n * backbuffer target will be used.\n */\n withColorTarget(target: RenderTarget): this {\n this._colorTargets.push(target);\n return this;\n }\n\n withDepthStencilTarget(target: RenderTarget): this {\n this._depthTarget = target;\n return this;\n }\n\n /**\n * Set the clear color for the most recently added color target.\n * Overloads allow passing an array or individual color components.\n * Be sure to call this unless you really want to load the existing contents of the target.\n */\n withClearColor(): this;\n withClearColor(r: number[] | IndexedCollection): this;\n withClearColor(r: number, g: number, b: number): this;\n withClearColor(r: number, g: number, b: number, a: number): this;\n withClearColor(r?: number | number[] | IndexedCollection, g?: number, b?: number, a?: number): this {\n let color;\n if (r === undefined) {\n color = [0.0, 0.0, 0.0, 1.0];\n } else if (typeof r === 'number') {\n color = [r, g ?? 0.0, b ?? 0.0, a ?? 1.0];\n } else {\n color = [r[0], r[1], r[2], r[3] ?? 1.0];\n }\n\n // rendering to the default target is special cased, so we need to set the clear color for the last target\n if (this._colorTargets.length === 0) {\n this._clearColors[0] = color;\n } else {\n this._clearColors[this._colorTargets.length - 1] = color;\n }\n\n return this;\n }\n\n /**\n * Set the store operation for the most recently added color target. Defaults to 'store' if not specified.\n * @param storeOp\n */\n withStoreOp(storeOp: StoreOp): this {\n if (this._colorTargets.length === 0) {\n this._storeOps[0] = storeOp as GPUStoreOp;\n } else {\n this._storeOps[this._colorTargets.length - 1] = storeOp as GPUStoreOp;\n }\n return this;\n }\n\n /**\n * Set the clear stencil value\n */\n withClearStencil(stencil: number): this {\n this._clearStencil = stencil;\n return this;\n }\n\n /**\n * Set the clear depth value\n */\n withClearDepth(depth: number): this {\n this._clearDepth = depth;\n return this;\n }\n\n /**\n * Build and begin the render pass. Returns a `RenderPass` wrapper around\n * the low-level GPURenderPassEncoder.\n */\n build(): RenderPass {\n let targets: RenderTarget[];\n let depthTarget: RenderTarget | undefined;\n\n // if anything was specified specifically, use those, otherwise use the defaults\n if (this._colorTargets.length || !!this._depthTarget) {\n targets = this._colorTargets;\n depthTarget = this._depthTarget;\n } else {\n targets = [this._defaultTarget];\n depthTarget = this._defaultDepthTarget;\n }\n\n let stencilLoadOp: GPULoadOp | undefined;\n let stencilStoreOp: GPUStoreOp | undefined;\n let stencilClearValue: number | undefined;\n\n if (depthTarget?.format === TextureFormat.Depth32FloatStencil8 || depthTarget?.format === TextureFormat.Depth24PlusStencil8) {\n stencilLoadOp = this._clearStencil != undefined ? 'clear' : 'load';\n stencilStoreOp = mapUndefined(this._clearStencil, () => 'store');\n stencilClearValue = this._clearStencil;\n }\n\n const colorAttachments: GPURenderPassColorAttachment[] = targets.map((target, i) => ({\n view: target._inner,\n loadOp: this._clearColors[i] ? 'clear' : 'load',\n storeOp: this._storeOps[i] ?? 'store',\n clearValue: this._clearColors[i]\n }));\n\n const desc: GPURenderPassDescriptor = {\n colorAttachments,\n depthStencilAttachment: mapUndefined(depthTarget, target => ({\n view: target._inner,\n depthClearValue: this._clearDepth,\n depthLoadOp: this._clearDepth != undefined ? 'clear' : 'load',\n depthStoreOp: mapUndefined(this._clearDepth, () => 'store'),\n stencilClearValue,\n stencilLoadOp,\n stencilStoreOp\n\n })),\n label: this._label\n };\n\n const pass = new RenderPass(this._encoder.beginRenderPass(desc));\n this._globalBindGroups.forEach((group, i) => pass.setBindGroup(i, group));\n return pass;\n }\n}\n","import {Shader} from \"./Shader\";\nimport {mapUndefined} from \"./utils/mapUndefined\";\nimport {WebGPUContext} from \"./WebGPUContext\";\nimport {Mesh} from \"./Mesh\";\nimport {CompareFunction, CullMode, ShaderStage, TextureFormat} from \"./enums\";\nimport {BlendMode} from \"./BlendMode\";\n\n/**\n * Thin wrapper around GPURenderPipeline exposing a small helper for attribute\n * location lookup. The underlying pipeline and shader are available for advanced use.\n */\nexport class RenderPipeline {\n /** @internal */\n readonly _inner: GPURenderPipeline;\n private _shader: Shader;\n\n constructor(inner: GPURenderPipeline, shader: Shader) {\n this._inner = inner;\n this._shader = shader;\n }\n\n /**\n * Helper to get the shader-declared attribute location for a named attribute.\n */\n public getVertexAttributeLocation(name: string): number | undefined {\n return this._shader.getVertexAttributeLocation(name);\n }\n}\n\n/**\n * Fluent builder for creating a GPURenderPipeline. Attach a `Shader` and\n * optionally a `Mesh` (to derive vertex buffer layouts) before calling `build()`.\n */\nexport class RenderPipelineBuilder {\n private _ctx: WebGPUContext;\n private _shader?: Shader;\n private _colorTargets: GPUColorTargetState[] = [];\n private _defaultColorState: GPUColorTargetState[];\n private _depthState?: GPUDepthStencilState;\n private _defaultDepthState?: GPUDepthStencilState;\n private _vertexEntry: string | undefined = undefined;\n private _fragmentEntry: string | undefined = undefined;\n private _label: string | undefined = undefined;\n private _overrideConstants: Record<ShaderStage, Record<string, number>> = {};\n private _cullMode: CullMode = CullMode.Back;\n private _mesh: Mesh | undefined = undefined;\n\n constructor(ctx: WebGPUContext, defaultDepthFormat?: TextureFormat) {\n this._ctx = ctx;\n this._defaultColorState = [{\n format: ctx.format,\n blend: undefined,\n writeMask: GPUColorWrite.ALL\n }];\n this._defaultDepthState = mapUndefined(defaultDepthFormat, format => ({\n format,\n depthWriteEnabled: true,\n depthCompare: 'less',\n }))\n }\n\n /** Assign a human-readable label for the pipeline (useful in graphics debuggers). */\n withLabel(label: string): this {\n this._label = label;\n return this;\n }\n\n /** Set face-culling mode. Default is `Back`. */\n withCullMode(value: CullMode): this {\n this._cullMode = value;\n return this;\n }\n\n /** Provide a Mesh to automatically derive vertex buffer layouts. */\n withMesh(mesh: Mesh): this {\n this._mesh = mesh;\n return this;\n }\n\n /** Attach a compiled Shader to the pipeline. */\n withShader(shader: Shader): this {\n this._shader = shader;\n return this;\n }\n\n /** Select the shader entry point for the vertex stage. */\n withVertexShader(entry: string): this {\n this._vertexEntry = entry;\n return this;\n }\n\n /** Select the shader entry point for the fragment stage. */\n withFragmentShader(entry: string): this {\n this._fragmentEntry = entry;\n return this;\n }\n\n /** Add a color target with the given texture format. */\n withColorTarget(format: TextureFormat): this {\n this._colorTargets.push({\n format,\n blend: undefined,\n writeMask: GPUColorWrite.ALL\n });\n return this;\n }\n\n /**\n * Add a depth target with the given texture format.\n */\n withDepthTarget(format: TextureFormat): this {\n this._depthState = {\n format,\n ...this._defaultDepthState\n };\n return this;\n }\n\n /**\n * Set the depth compare function. Default is `less`.\n * @param compare\n */\n withDepthCompare(compare: CompareFunction): this {\n const target = this._depthState ?? this._defaultDepthState;\n if (!target) {\n console.warn(\"No depth target set. Setting depth compare function has no effect.\");\n }\n else {\n target.depthCompare = compare;\n }\n return this;\n }\n\n /**\n * Sets the depth bias for each triangle.\n * @param depthBias Constant depth bias added to each triangle fragment.\n * @param slopeScale Depth bias that scales with the triangle fragment’s slope.\n * @param max The maximum depth bias of a triangle fragment.\n */\n withDepthBias(depthBias: number, slopeScale?: number, max?: number): this {\n const target = this._depthState ?? this._defaultDepthState;\n if (!target) {\n console.warn(\"No depth target set. Setting depth compare function has no effect.\");\n }\n else {\n target.depthBias = depthBias;\n target.depthBiasSlopeScale = slopeScale;\n target.depthBiasClamp = max;\n }\n return this;\n }\n\n /**\n * Enable or disable depth writes. Default is `true`.\n * @param enabled\n */\n withDepthWrite(enabled: boolean): this {\n const target = this._depthState ?? this._defaultDepthState;\n if (!target) {\n console.warn(\"No depth target set. Setting depth write enabled has no effect.\");\n }\n else {\n target.depthWriteEnabled = enabled;\n }\n return this;\n }\n\n /**\n * Override a shader constant for specialization. We do NOT use `ShaderStage.Vertex | ShaderStage.Fragment` as\n * default because some browser implementations (as of early 2026) have bugs when a non-existent constant is defined\n */\n withOverrideConstant(id: string, value: number, pipeline: GPUShaderStageFlags): this {\n if (pipeline & GPUShaderStage.VERTEX) {\n this._overrideConstants[ShaderStage.Vertex] = this._overrideConstants[ShaderStage.Vertex] || {};\n this._overrideConstants[ShaderStage.Vertex][id] = value;\n }\n if (pipeline & GPUShaderStage.FRAGMENT) {\n this._overrideConstants[ShaderStage.Fragment] = this._overrideConstants[ShaderStage.Fragment] || {};\n this._overrideConstants[ShaderStage.Fragment][id] = value;\n }\n return this;\n }\n\n /** Set the blend mode for the last assigned (or default) color target. */\n withBlendMode(blendMode: BlendMode): this {\n this.lastColorTarget.blend = blendMode._inner;\n return this;\n }\n\n /** Set the color write mask for the last assigned (or default) color target. */\n withColorWrite(r: boolean, g?: boolean, b?: boolean, a?: boolean): this {\n g ??= r;\n b ??= g;\n a ??= b;\n\n this.lastColorTarget.writeMask =\n (r ? GPUColorWrite.RED : 0) |\n (g ? GPUColorWrite.GREEN : 0) |\n (b ? GPUColorWrite.BLUE : 0) |\n (a ? GPUColorWrite.ALPHA : 0);\n return this;\n }\n\n /**\n * Build and create the `RenderPipeline`. Throws if required pieces (shader/vertices)\n * are missing.\n */\n build(): RenderPipeline {\n if (!this._shader) {\n throw new Error(\"Shader not specified. Use withShader() to set the shader to use.\");\n }\n\n const shader = this._shader!;\n\n if (this._vertexEntry === undefined) {\n throw new Error(\"Shader does not contain a vertex entry point. Use ShaderBuilder.withVertexShader() to set one.\");\n }\n\n let colorTargets: GPUColorTargetState[];\n let depthState: GPUDepthStencilState | undefined;\n\n if (this._colorTargets.length || !!this._depthState) {\n colorTargets = this._colorTargets;\n depthState = this._depthState;\n }\n else {\n // only use defaults if no targets were set explicitly\n colorTargets = this._defaultColorState;\n depthState = this._defaultDepthState;\n }\n\n const primitive: GPUPrimitiveState | undefined = mapUndefined(this._mesh, mesh => ({\n topology: mesh.topology,\n frontFace: mesh.frontFace,\n cullMode: this._cullMode,\n }));\n\n const buffers = mapUndefined(this._mesh, mesh => {\n const buffers: GPUVertexBufferLayout[] = [];\n for (let i = 0; i < mesh.numStreams; ++i) {\n const attributes = mesh.getStreamAttributes(i)\n .filter(attr => shader.hasVertexAttribute(attr.name))\n .map(attr => ({\n shaderLocation: shader.getVertexAttributeLocation(attr.name)!,\n offset: attr.offset,\n format: attr.format,\n }));\n\n buffers.push({\n arrayStride: mesh.getStreamStride(i),\n stepMode: 'vertex',\n attributes\n });\n }\n return buffers;\n });\n\n const layout = mapUndefined(\n shader._bindGroupLayouts,\n bindGroupLayouts => this._ctx.device.createPipelineLayout({\n bindGroupLayouts: bindGroupLayouts.map(value => value._inner),\n label: this._label\n })\n ) ?? \"auto\";\n\n const desc: GPURenderPipelineDescriptor = {\n label: this._label,\n layout,\n primitive,\n depthStencil: depthState,\n vertex: {\n buffers,\n module: shader._inner,\n entryPoint: this._vertexEntry!,\n constants: this._overrideConstants[ShaderStage.Vertex]\n },\n fragment: mapUndefined(this._fragmentEntry, entry => ({\n module: shader._inner,\n entryPoint: entry,\n targets: colorTargets,\n constants: this._overrideConstants[ShaderStage.Fragment]\n }))\n }\n\n const inner = this._ctx.device.createRenderPipeline(desc);\n return new RenderPipeline(inner, shader);\n }\n\n private get lastColorTarget(): GPUColorTargetState {\n return this._colorTargets.length ? this._colorTargets[this._colorTargets.length - 1] : this._defaultColorState[0];\n }\n}\n","import {Texture} from \"./Texture\";\nimport {TextureFormat} from \"./enums\";\n\n/**\n * Lightweight wrapper around a GPUTextureView representing a render target.\n * Use `view()` to get the underlying GPUTextureView when building render passes.\n */\nexport class RenderTarget {\n readonly _inner: GPUTextureView;\n private _format: TextureFormat;\n\n constructor(view: GPUTextureView, format: TextureFormat) {\n this._inner = view;\n this._format = format;\n }\n\n get format(): TextureFormat\n {\n return this._format;\n }\n}\n\n/**\n * Builder for creating a `RenderTarget` from a `Texture`.\n *\n * The builder produces a GPUTextureView configured with a sensible default\n * descriptor and wraps it in a `RenderTarget` helper.\n */\nexport class RenderTargetBuilder {\n private _texture: Texture;\n private _baseMipLevel = 0;\n private _baseArrayLayer = 0;\n\n /**\n * Create a new RenderTargetBuilder for the given texture. This should only be called\n * from the TinyHelix instance (see {@link TinyHelix.createRenderTarget}).\n * @param texture\n *\n * @internal\n */\n constructor(texture: Texture) {\n this._texture = texture;\n }\n\n /**\n * Set the base mip level to use for the render target. Defaults to 0.\n */\n withMipLevel(level: number): this {\n this._baseMipLevel = level;\n return this;\n }\n\n /**\n * Set the base array layer to use for the render target. Defaults to 0.\n */\n withArrayLayer(layer: number): this {\n this._baseArrayLayer = layer;\n return this;\n }\n\n /**\n * Create and return a new `RenderTarget` instance.\n */\n build(): RenderTarget {\n const tex = this._texture._inner;\n const view = this._texture._inner.createView({\n format: tex.format,\n dimension: tex.dimension,\n aspect: 'all',\n baseMipLevel: this._baseMipLevel,\n mipLevelCount: 1,\n baseArrayLayer: this._baseArrayLayer,\n arrayLayerCount: 1,\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n });\n return new RenderTarget(view, this._texture.format);\n }\n}\n","import {WebGPUContext} from \"./WebGPUContext\";\nimport {AddressMode, CompareFunction, FilterMode} from \"./enums\";\n\nexport class Sampler {\n readonly _inner: GPUSampler;\n\n private static DEFAULT_TRILINEAR: Sampler;\n\n constructor(inner: GPUSampler) {\n this._inner = inner;\n }\n}\n\nexport class SamplerBuilder {\n private _ctx: WebGPUContext;\n private _desc: GPUSamplerDescriptor = {};\n\n constructor(ctx: WebGPUContext) {\n this._ctx = ctx;\n }\n\n withLabel(label: string): this\n {\n this._desc.label = label;\n return this;\n }\n\n withAddressMode(u: AddressMode, v?: AddressMode, w?: AddressMode): this\n {\n this._desc.addressModeU = u;\n this._desc.addressModeV = v ?? u;\n this._desc.addressModeW = w ?? u;\n return this;\n }\n\n withFiltering(minFilter: FilterMode, magFilter?: FilterMode, mipmapFilter?: FilterMode): this\n {\n this._desc.minFilter = minFilter;\n this._desc.magFilter = magFilter ?? minFilter;\n this._desc.mipmapFilter = mipmapFilter ?? minFilter;\n return this;\n }\n\n withTrilinearFiltering(): this\n {\n this.withFiltering(FilterMode.Linear);\n return this;\n }\n\n withNearestFiltering(): this\n {\n this.withFiltering(FilterMode.Nearest);\n return this;\n }\n\n withAnisotropicFiltering(maxAnisotropy: number): this\n {\n this.withFiltering(FilterMode.Linear);\n this._desc.maxAnisotropy = maxAnisotropy;\n return this;\n }\n\n withMinMipLevel(level: number): this\n {\n this._desc.lodMinClamp = level;\n return this;\n }\n\n withMaxMipLevel(level: number): this\n {\n this._desc.lodMaxClamp = level;\n return this;\n }\n\n withCompareFunction(compare: CompareFunction): this\n {\n this._desc.compare = compare;\n return this;\n }\n\n build(): Sampler\n {\n return new Sampler(this._ctx.device.createSampler(this._desc));\n }\n}","import {WebGPUContext} from \"./WebGPUContext\";\nimport BindGroupLayoutBuilder, {BindGroupBuilder, BindGroupLayout} from \"./BindGroup\";\n\ntype AttributeMap = Map<string, number>;\ntype BindGroupLayoutFunc = (builder: BindGroupLayoutBuilder) => void;\n\n/**\n * Wrapper around GPUShaderModule. Keeps a map of vertex attribute names to\n * shader locations to aid pipeline construction.\n */\nexport class Shader {\n /** @internal */\n readonly _inner: GPUShaderModule;\n /** @internal */\n readonly _bindGroupLayouts: BindGroupLayout[] | undefined;\n\n private _vertexAttributes: AttributeMap;\n private _ctx: WebGPUContext;\n\n /**\n * @internal\n */\n constructor(inner: GPUShaderModule, ctx: WebGPUContext, vertexAttributes: AttributeMap, bindGroupLayouts?: BindGroupLayout[]) {\n this._inner = inner;\n this._ctx = ctx;\n this._vertexAttributes = vertexAttributes;\n this._bindGroupLayouts = bindGroupLayouts;\n }\n\n getCompilationInfo(): Promise<GPUCompilationInfo>\n {\n return this._inner.getCompilationInfo();\n }\n\n /**\n * Get the shader location for a named vertex attribute. Returns undefined if the attribute\n * is not declared by the shader.\n */\n getVertexAttributeLocation(name: string): number | undefined {\n return this._vertexAttributes.get(name) ?? undefined;\n }\n\n /**\n * Returns true if the shader declares a vertex attribute with the given name.\n * @param name\n */\n hasVertexAttribute(name: string): boolean {\n return this._vertexAttributes.has(name);\n }\n\n /**\n * Create a BindGroupBuilder for the shader's bind group at the given index.\n * @param group - index of the bind group declared by the shader\n */\n createBindGroup(group: number): BindGroupBuilder {\n return new BindGroupBuilder(this._ctx, this._bindGroupLayouts![group]);\n }\n}\n\n/**\n * Builder for creating shader modules and declaring attribute locations used by the helper\n * pipeline builder.\n */\nexport class ShaderBuilder {\n private _code?: string;\n private _label?: string;\n private _ctx: WebGPUContext;\n private _vertexAttributes: AttributeMap = new Map(); // name -> location\n private _bindGroupLayouts: BindGroupLayout[] | undefined;\n private _includes: Map<string, string> = new Map();\n\n /**\n * @internal\n */\n constructor(ctx: WebGPUContext) {\n this._ctx = ctx;\n }\n\n /** Optional label for the underlying GPUShaderModule. */\n withLabel(label: string): this {\n this._label = label;\n return this;\n }\n\n /** Set WGSL or other shader code to compile into a GPUShaderModule. */\n withCode(code: string): this {\n this._code = code;\n return this;\n }\n\n /**\n * Add a named include to the shader code. The include will be expanded\n * in the shader code before compilation. The include name must be unique\n * within the shader code. This allows using `#include<name>` in the shader\n * code to include other files. While this is not standard WGSL, it's too\n * useful not to support.\n *\n * @param name - The name as used in the `#include<name>` directive.\n * @param code - The code the include should expand to.\n */\n withInclude(name: string, code: string): this {\n this._includes.set(name, code);\n return this;\n }\n\n /** Declare a named vertex attribute and the location it maps to in the shader. */\n withVertexAttribute(location: number, name: string): this {\n this._vertexAttributes.set(name, location);\n return this;\n }\n\n /**\n * Declare a bind group layout used by this shader. The provided builder\n * callback is used to construct the layout description.\n */\n withBindGroup(index: number, layout: BindGroupLayout): this;\n withBindGroup(index: number, buildFunc: (builder: BindGroupLayoutBuilder) => void): this;\n withBindGroup(index: number, layout: BindGroupLayout | BindGroupLayoutFunc): this {\n this._bindGroupLayouts = this._bindGroupLayouts ?? [];\n if (layout instanceof BindGroupLayout) {\n this._bindGroupLayouts[index] = layout;\n }\n else {\n const builder = new BindGroupLayoutBuilder(this._ctx);\n layout(builder);\n this._bindGroupLayouts[index] = builder.build();\n }\n return this;\n }\n\n // TODO: Provide layout methods\n\n /** Compile the shader module and return a `Shader` instance. */\n build(): Shader {\n if (!this._code) {\n throw new Error(\"Shader code not specified. Use withCode() to set the shader source.\");\n }\n\n const header = this._ctx.shaderF16Supported ?\n `enable f16;\n alias half = f16;\n alias vec2h = vec2<f16>;\n alias vec3h = vec3<f16>;\n alias vec4h = vec4<f16>;\n `:\n `alias half = f32;\n alias vec2h = vec2<f32>; \n alias vec3h = vec3<f32>;\n alias vec4h = vec4<f32>;\n `;\n\n let code = header + \"\\n\\n\" + this._code;\n for (const [name, inc] of this._includes) {\n // regex to match the include directive while allowing\n // optional whitespace between tokens, e.g.:\n // #include<name>\n // # include < name >\n // and so on. Escape the include name so it is safe in a RegExp.\n const escapedName = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const includeRegex = new RegExp(`#\\\\s*include\\\\s*<\\\\s*${escapedName}\\\\s*>`, 'g');\n code = code.replace(includeRegex, inc);\n }\n\n const inner = this._ctx.device.createShaderModule({\n label: this._label,\n code,\n });\n\n return new Shader(inner, this._ctx, this._vertexAttributes, this._bindGroupLayouts);\n }\n}","import {WebGPUContext} from \"./WebGPUContext\";\nimport {TextureDimension, TextureFormat, TextureViewDimension} from \"./enums\";\nimport {IBuffer} from \"./buffers/IBuffer\";\nimport {TextureUsage} from \"./buffers/Buffer\";\nimport {MipRenderer} from \"./utils/MipRenderer\";\nimport {mapUndefined} from \"./utils/mapUndefined\";\n\n/**\n * Small wrapper around GPUTexture providing convenience constructors and\n * an internal accessor for low-level interop.\n */\nexport class Texture implements IBuffer {\n /** @internal */\n readonly _inner: GPUTexture;\n private _format: TextureFormat;\n private _ctx: WebGPUContext;\n private _mipper?: MipRenderer;\n\n /**\n * @internal\n */\n static from_webgpu(texture: GPUTexture, format: TextureFormat, ctx: WebGPUContext, mipShader?: GPUShaderModule): Texture {\n return new Texture(texture, format, ctx, mipShader);\n }\n\n constructor(inner: GPUTexture, format: TextureFormat, ctx: WebGPUContext, mipShader?: GPUShaderModule) {\n this._inner = inner;\n this._format = format;\n this._ctx = ctx;\n this._mipper = mapUndefined(mipShader, (mipShader) => new MipRenderer(ctx, mipShader, this));\n }\n\n createView(): TextureViewBuilder {\n return new TextureViewBuilder(this);\n }\n\n get format(): TextureFormat {\n return this._format;\n }\n\n get mipLevelCount(): number {\n return this._inner.mipLevelCount;\n }\n\n get width(): number {\n return this._inner.width;\n }\n\n get height(): number {\n return this._inner.height;\n }\n\n get depthOrArrayLayers(): number {\n return this._inner.depthOrArrayLayers;\n }\n\n _getBufferResource(): GPUBindingResource {\n return this._inner.createView();\n }\n\n uploadImage(data: ImageBitmap, mipLevel: number = 0) {\n this._ctx.device.queue.copyExternalImageToTexture({source: data}, {texture: this._inner, mipLevel}, [data.width, data.height, 1]);\n }\n\n uploadData(data: GPUAllowSharedBufferSource, mipLevel: number = 0) {\n const width = Math.max(this._inner.width >> mipLevel, 1);\n const height = Math.max(this._inner.height >> mipLevel, 1);\n const depthOrArrayLayers = Math.max(this._inner.depthOrArrayLayers >> mipLevel, 1);\n const blockWidth = TextureUtils.getBlockWidth(this._format);\n const blocksPerRow = Math.ceil(width / blockWidth);\n const bytesPerRow = blocksPerRow * TextureUtils.bytesPerBlock(this._format);\n\n this._ctx.device.queue.writeTexture(\n {texture: this._inner, mipLevel},\n data,\n {\n bytesPerRow,\n rowsPerImage: height // This is what Mario is asking for!\n },\n {width, height, depthOrArrayLayers}\n );\n }\n\n generateMipmaps() {\n if (this._inner.dimension !== TextureDimension.D2) {\n throw new Error('generateMipmaps currently only supports 2D textures.');\n }\n\n this._mipper!.render();\n }\n\n dimension(): TextureDimension {\n switch (this._inner.dimension) {\n case \"1d\":\n return TextureDimension.D1;\n case \"2d\":\n return TextureDimension.D2;\n case \"3d\":\n return TextureDimension.D3;\n default:\n throw new Error(`Unknown texture dimension: ${this._inner.dimension}`);\n }\n }\n}\n\ntype TextureData = GPUAllowSharedBufferSource | ImageBitmap;\n\nexport class TextureBuilder {\n private _ctx: WebGPUContext;\n private _size: [number, number, number] = [1, 1, 1];\n private _data?: TextureData[];\n private _format: TextureFormat = TextureFormat.Rgba8UnormSrgb;\n private _usage: GPUTextureUsageFlags = GPUTextureUsage.TEXTURE_BINDING;\n private _dimension: TextureDimension = TextureDimension.D2;\n private _mipLevelCount: number = 1; // -1 will mean auto calculate based on size\n private _generateMips: boolean = false;\n private _mipShader: GPUShaderModule;\n\n constructor(ctx: WebGPUContext, mipShader: GPUShaderModule) {\n this._mipShader = mipShader;\n this._ctx = ctx;\n }\n\n withSize(width: number, height: number, depthOrArrayLayers: number = 1): this {\n this._size = [width, height, depthOrArrayLayers];\n if (depthOrArrayLayers > 1) {\n this._dimension = TextureDimension.D3;\n }\n return this;\n }\n\n withDimension(dim: TextureDimension): this {\n this._dimension = dim;\n return this;\n }\n\n withMipLevels(count?: number): this {\n this._mipLevelCount = count ?? -1;\n return this;\n }\n\n withFormat(format: TextureFormat): this {\n this._format = format;\n return this;\n }\n\n withData(data: GPUAllowSharedBufferSource, mipLevel: number = 0): this {\n this._data = this._data ?? [];\n this._data[mipLevel] = data;\n this._mipLevelCount = Math.max(this._mipLevelCount, mipLevel + 1);\n return this;\n }\n\n withImage(data: ImageBitmap, mipLevel: number = 0): this {\n this._data = this._data ?? [];\n this._data[mipLevel] = data;\n if (mipLevel === 0) {\n this._size = [data.width, data.height, 1];\n }\n\n this._mipLevelCount = Math.max(this._mipLevelCount, mipLevel + 1);\n\n return this;\n }\n\n withGeneratedMipmaps(): this {\n this._mipLevelCount = -1;\n this._generateMips = true;\n return this;\n }\n\n withUsage(usage: TextureUsage): this {\n this._usage |= usage;\n return this;\n }\n\n build(): Texture {\n if (this._data) {\n this._usage |= GPUTextureUsage.COPY_DST;\n }\n\n if (this._generateMips) {\n this._usage |= GPUTextureUsage.RENDER_ATTACHMENT;\n }\n\n if (this._mipLevelCount == -1) {\n const maxDimension = Math.max(this._size[0], this._size[1], this._size[2]);\n this._mipLevelCount = Math.floor(Math.log2(maxDimension)) + 1;\n }\n\n const inner = this._ctx.device.createTexture({\n format: this._format, size: this._size, usage: this._usage,\n dimension: this._dimension,\n mipLevelCount: this._mipLevelCount\n })\n\n const tex = new Texture(inner, this._format, this._ctx, this._generateMips? this._mipShader : undefined);\n\n if (this._data) {\n const mipCount = this._generateMips? 1 : this._mipLevelCount;\n\n for (let mipLevel = 0; mipLevel < mipCount; mipLevel++) {\n const data = this._data[mipLevel];\n if (!data) throw new Error(`TextureBuilder: Missing data for mip level ${mipLevel}`);\n\n if (data instanceof ImageBitmap) {\n tex.uploadImage(data, mipLevel);\n } else {\n tex.uploadData(data, mipLevel);\n }\n }\n\n if (this._generateMips) {\n // Generate mipmaps using a simple render pass approach\n tex.generateMipmaps();\n }\n }\n\n return tex;\n }\n}\n\nexport class TextureView {\n /** @internal */\n _inner: GPUTextureView;\n\n constructor(inner: GPUTextureView) {\n this._inner = inner;\n }\n}\n\nexport class TextureViewBuilder {\n private _texture: Texture;\n private _desc: GPUTextureViewDescriptor = {};\n\n /**\n * @internal\n */\n constructor(texture: Texture) {\n this._texture = texture;\n }\n\n withUsage(usage: TextureUsage): this {\n if (this._desc.usage === undefined) {\n this._desc.usage = 0;\n }\n\n this._desc.usage |= usage;\n return this;\n }\n\n withSingleMip(level: number): this {\n this._desc.baseMipLevel = level;\n this._desc.mipLevelCount = 1;\n return this;\n }\n\n withMipRange(start: number, end: number): this {\n this._desc.baseMipLevel = start;\n this._desc.mipLevelCount = end - start;\n return this;\n }\n\n withSingleLayer(layer: number): this {\n this._desc.baseArrayLayer = layer;\n this._desc.arrayLayerCount = 1;\n return this;\n }\n\n withLayerRange(start: number, end: number): this {\n this._desc.baseArrayLayer = start;\n this._desc.arrayLayerCount = end;\n return this;\n }\n\n withDimension(dim: TextureViewDimension): this {\n this._desc.dimension = dim;\n return this;\n }\n\n build(): TextureView {\n return new TextureView(this._texture._inner.createView(this._desc));\n }\n}\n\nexport class TextureUtils {\n static isBc(format: TextureFormat): boolean {\n switch (format) {\n case TextureFormat.Bc1RgbaUnorm:\n case TextureFormat.Bc1RgbaUnormSrgb:\n case TextureFormat.Bc2RgbaUnorm:\n case TextureFormat.Bc2RgbaUnormSrgb:\n case TextureFormat.Bc3RgbaUnorm:\n case TextureFormat.Bc3RgbaUnormSrgb:\n case TextureFormat.Bc4RUnorm:\n case TextureFormat.Bc4RSnorm:\n case TextureFormat.Bc5RgUnorm:\n case TextureFormat.Bc5RgSnorm:\n case TextureFormat.Bc6hRgbUfloat:\n case TextureFormat.Bc6hRgbFloat:\n case TextureFormat.Bc7RgbaUnorm:\n case TextureFormat.Bc7RgbaUnormSrgb:\n return true;\n default:\n return false;\n }\n }\n\n static isEtc(format: TextureFormat): boolean {\n switch (format) {\n case TextureFormat.Etc2Rgb8Unorm:\n case TextureFormat.Etc2Rgb8UnormSrgb:\n case TextureFormat.Etc2Rgb8A1Unorm:\n case TextureFormat.Etc2Rgb8A1UnormSrgb:\n case TextureFormat.Etc2Rgba8Unorm:\n case TextureFormat.Etc2Rgba8UnormSrgb:\n case TextureFormat.EacR11Unorm:\n case TextureFormat.EacR11Snorm:\n case TextureFormat.EacRg11Unorm:\n case TextureFormat.EacRg11Snorm:\n return true;\n default:\n return false;\n }\n }\n\n static getBlockWidth(format: TextureFormat): number {\n if (TextureUtils.isBc(format) || TextureUtils.isEtc(format)) return 4;\n\n switch (format) {\n case TextureFormat.Astc4x4Unorm:\n case TextureFormat.Astc4x4UnormSrgb:\n return 4;\n case TextureFormat.Astc5x4Unorm:\n case TextureFormat.Astc5x4UnormSrgb:\n case TextureFormat.Astc5x5Unorm:\n case TextureFormat.Astc5x5UnormSrgb:\n return 5;\n case TextureFormat.Astc6x5Unorm:\n case TextureFormat.Astc6x5UnormSrgb:\n case TextureFormat.Astc6x6Unorm:\n case TextureFormat.Astc6x6UnormSrgb:\n return 6;\n case TextureFormat.Astc8x5Unorm:\n case TextureFormat.Astc8x5UnormSrgb:\n case TextureFormat.Astc8x6Unorm:\n case TextureFormat.Astc8x6UnormSrgb:\n case TextureFormat.Astc8x8Unorm:\n case TextureFormat.Astc8x8UnormSrgb:\n return 8;\n case TextureFormat.Astc10x5Unorm:\n case TextureFormat.Astc10x5UnormSrgb:\n case TextureFormat.Astc10x6Unorm:\n case TextureFormat.Astc10x6UnormSrgb:\n case TextureFormat.Astc10x8Unorm:\n case TextureFormat.Astc10x8UnormSrgb:\n case TextureFormat.Astc10x10Unorm:\n case TextureFormat.Astc10x10UnormSrgb:\n return 10;\n case TextureFormat.Astc12x10Unorm:\n case TextureFormat.Astc12x10UnormSrgb:\n case TextureFormat.Astc12x12Unorm:\n case TextureFormat.Astc12x12UnormSrgb:\n return 12;\n default:\n return 1;\n }\n }\n\n /**\n * Returns the number of bytes in a compressed or uncompressed block for the\n * given texture format. Matches the mapping from the Rust implementation and\n * throws for unsupported formats.\n */\n static bytesPerBlock(format: TextureFormat): number {\n switch (format) {\n // 1-byte formats\n case TextureFormat.R8Unorm:\n case TextureFormat.R8Snorm:\n case TextureFormat.R8Uint:\n case TextureFormat.R8Sint:\n case TextureFormat.Stencil8:\n return 1;\n\n // 2-byte formats\n case TextureFormat.R16Uint:\n case TextureFormat.R16Sint:\n case TextureFormat.R16Unorm:\n case TextureFormat.R16Snorm:\n case TextureFormat.R16Float:\n case TextureFormat.RG8Unorm:\n case TextureFormat.RG8Snorm:\n case TextureFormat.RG8Uint:\n case TextureFormat.RG8Sint:\n case TextureFormat.Depth16Unorm:\n return 2;\n\n // 4-byte formats\n case TextureFormat.R32Uint:\n case TextureFormat.R32Sint:\n case TextureFormat.R32Float:\n case TextureFormat.RG16Uint:\n case TextureFormat.RG16Sint:\n case TextureFormat.RG16Unorm:\n case TextureFormat.RG16Snorm:\n case TextureFormat.RG16Float:\n case TextureFormat.Rgba8Unorm:\n case TextureFormat.Rgba8UnormSrgb:\n case TextureFormat.Rgba8Snorm:\n case TextureFormat.Rgba8Uint:\n case TextureFormat.Rgba8Sint:\n case TextureFormat.Bgra8Unorm:\n case TextureFormat.Bgra8UnormSrgb:\n case TextureFormat.Rgb9e5Ufloat:\n case TextureFormat.Rgb10a2Uint:\n case TextureFormat.Rgb10a2Unorm:\n case TextureFormat.Depth24Plus:\n case TextureFormat.Depth24PlusStencil8:\n case TextureFormat.Depth32Float:\n return 4;\n\n // 8-byte formats\n case TextureFormat.Rg11b10Ufloat:\n case TextureFormat.RG32Uint:\n case TextureFormat.RG32Sint:\n case TextureFormat.RG32Float:\n case TextureFormat.Rgba16Uint:\n case TextureFormat.Rgba16Sint:\n case TextureFormat.Rgba16Unorm:\n case TextureFormat.Rgba16Snorm:\n case TextureFormat.Rgba16Float:\n case TextureFormat.Depth32FloatStencil8:\n case TextureFormat.Bc1RgbaUnorm:\n case TextureFormat.Bc1RgbaUnormSrgb:\n case TextureFormat.Bc4RUnorm:\n case TextureFormat.Bc4RSnorm:\n case TextureFormat.Etc2Rgb8Unorm:\n case TextureFormat.Etc2Rgb8UnormSrgb:\n case TextureFormat.Etc2Rgb8A1Unorm:\n case TextureFormat.Etc2Rgb8A1UnormSrgb:\n case TextureFormat.EacR11Unorm:\n case TextureFormat.EacR11Snorm:\n return 8;\n\n // 16-byte formats\n case TextureFormat.Rgba32Uint:\n case TextureFormat.Rgba32Sint:\n case TextureFormat.Rgba32Float:\n case TextureFormat.Bc2RgbaUnorm:\n case TextureFormat.Bc2RgbaUnormSrgb:\n case TextureFormat.Bc3RgbaUnorm:\n case TextureFormat.Bc3RgbaUnormSrgb:\n case TextureFormat.Bc5RgUnorm:\n case TextureFormat.Bc5RgSnorm:\n case TextureFormat.Bc6hRgbUfloat:\n case TextureFormat.Bc6hRgbFloat:\n case TextureFormat.Bc7RgbaUnorm:\n case TextureFormat.Bc7RgbaUnormSrgb:\n case TextureFormat.Etc2Rgba8Unorm:\n case TextureFormat.Etc2Rgba8UnormSrgb:\n case TextureFormat.EacRg11Unorm:\n case TextureFormat.EacRg11Snorm:\n case TextureFormat.Astc4x4Unorm:\n case TextureFormat.Astc4x4UnormSrgb:\n case TextureFormat.Astc5x4Unorm:\n case TextureFormat.Astc5x4UnormSrgb:\n case TextureFormat.Astc5x5Unorm:\n case TextureFormat.Astc5x5UnormSrgb:\n case TextureFormat.Astc6x5Unorm:\n case TextureFormat.Astc6x5UnormSrgb:\n case TextureFormat.Astc6x6Unorm:\n case TextureFormat.Astc6x6UnormSrgb:\n case TextureFormat.Astc8x5Unorm:\n case TextureFormat.Astc8x5UnormSrgb:\n case TextureFormat.Astc8x6Unorm:\n case TextureFormat.Astc8x6UnormSrgb:\n case TextureFormat.Astc8x8Unorm:\n case TextureFormat.Astc8x8UnormSrgb:\n case TextureFormat.Astc10x5Unorm:\n case TextureFormat.Astc10x5UnormSrgb:\n case TextureFormat.Astc10x6Unorm:\n case TextureFormat.Astc10x6UnormSrgb:\n case TextureFormat.Astc10x8Unorm:\n case TextureFormat.Astc10x8UnormSrgb:\n case TextureFormat.Astc10x10Unorm:\n case TextureFormat.Astc10x10UnormSrgb:\n case TextureFormat.Astc12x10Unorm:\n case TextureFormat.Astc12x10UnormSrgb:\n case TextureFormat.Astc12x12Unorm:\n case TextureFormat.Astc12x12UnormSrgb:\n case TextureFormat.Bc2RgbaUnorm:\n // NOTE: Bc2RgbaUnorm is already listed above; duplicate entries are\n // harmless but kept out of caution when mapping from Rust.\n return 16;\n\n default:\n throw new Error(`Unsupported texture format: ${format}`);\n }\n }\n}","import {WebGPUContext, WebGPUContextOptions} from './WebGPUContext';\nimport {CommandEncoder} from \"./CommandEncoder\";\nimport {Texture, TextureBuilder} from \"./Texture\";\nimport {RenderTarget, RenderTargetBuilder} from \"./RenderTarget\";\nimport {ShaderBuilder} from \"./Shader\";\nimport {RenderPipelineBuilder} from \"./RenderPipeline\";\nimport {MeshBuilder} from \"./Mesh\";\nimport {UniformBuffer, UniformBufferLayout, UniformBufferLayoutBuilder} from \"./buffers/UniformBuffer\";\nimport BindGroupLayoutBuilder, {BindGroup, BindGroupBuilder, BindGroupLayout} from \"./BindGroup\";\nimport {SamplerBuilder} from \"./Sampler\";\nimport {ComputePipelineBuilder} from \"./ComputePipeline\";\nimport {ColorSpace, TextureFormat} from \"./enums\";\nimport {mapUndefined} from \"./utils/mapUndefined\";\nimport {BufferBuilder} from \"./buffers/Buffer\";\nimport mipCode from './wgsl/mip_2d_2x2.wgsl';\n\n/**\n * Options for initializing TinyHelix\n */\nexport interface TinyHelixOptions extends WebGPUContextOptions {\n // Possible to add more options later\n /** Optional format to use for the depth/stencil buffer */\n depthStencilFormat?: TextureFormat;\n}\n\n/**\n * Main entry point for the tiny-helix API. Manages the WebGPU context,\n * backbuffer and provides helpers to create render targets and command encoders.\n */\nexport class TinyHelix {\n private _parent: TinyHelix | null = null;\n private _context: WebGPUContext;\n private _options: TinyHelixOptions = {};\n private _backbuffer?: Texture;\n private _backbufferTarget?: RenderTarget;\n private _depthStencil?: Texture;\n private _depthStencilTarget?: RenderTarget;\n private _shaderIncludes: Map<string, string> = new Map();\n private _canvas: HTMLCanvasElement;\n private _globalBindGroupLayouts: BindGroupLayout[] = [];\n private _globalBindGroups: BindGroup[] = [];\n private _mipShader!: GPUShaderModule;\n\n /**\n * Create a new TinyHelix instance from a HTMLCanvasElement or an existing TinyHelix instance.\n * When creating from a Canvas, call `initialize()` before rendering to initialize the WebGPU context. When\n * using an existing TinyHelix instance, the new instance will share the same WebGPU context and resources.\n */\n constructor(canvasOrHX: HTMLCanvasElement | TinyHelix) {\n if (canvasOrHX instanceof TinyHelix) {\n this._context = canvasOrHX._context;\n this._canvas = canvasOrHX._canvas;\n this._mipShader = canvasOrHX._mipShader;\n this._depthStencil = canvasOrHX._depthStencil;\n this._depthStencilTarget = canvasOrHX._depthStencilTarget;\n } else {\n this._context = new WebGPUContext();\n this._canvas = canvasOrHX;\n }\n }\n\n get shaderF16Supported(): boolean\n {\n return this._context.shaderF16Supported;\n }\n\n get floatFilteringSupported(): boolean\n {\n return this._context.floatFilteringSupported;\n }\n\n get adapter(): GPUAdapter\n {\n return this._context.adapter;\n }\n\n get device(): GPUDevice\n {\n return this._context.device;\n }\n\n get context(): GPUCanvasContext\n {\n return this._context.context;\n }\n\n /**\n * Copies all shader includes from another TinyHelix instance.\n * @param hx - The TinyHelix instance to copy includes from.\n */\n copyIncludesFrom(hx: TinyHelix): this {\n hx._shaderIncludes.forEach((v, k) => this._shaderIncludes.set(k, v));\n return this;\n }\n\n /**\n * Copies all global bind groups from another TinyHelix instance.\n * @param hx - The TinyHelix instance to copy global bind groups from.\n */\n copyGlobalBindGroupsFrom(hx: TinyHelix): this {\n if (this._context != hx._context) {\n throw new Error(\"Cannot copy global bind groups from another TinyHelix instance with a different WebGPU context.\");\n }\n\n if (this._globalBindGroups.length > 0 || this._globalBindGroupLayouts.length > 0) {\n throw new Error(\"Cannot copy global bind groups from another TinyHelix instance if this instance already has global bind groups set.\");\n }\n\n this._globalBindGroupLayouts = [...hx._globalBindGroupLayouts];\n this._globalBindGroups = [...hx._globalBindGroups];\n return this;\n }\n\n /**\n * Initializes the underlying WebGPU context and prepares resources.\n * @param options - Configuration options forwarded to the WebGPU context\n * @example await tiny.initialize({ canvas: myCanvas });\n */\n async initialize(options: TinyHelixOptions = {}) {\n options.canvas = this._canvas;\n this._options = options;\n\n await this._context.initialize(options);\n\n this._createDepthStencil();\n this._mipShader = this._context.device.createShaderModule({\n code: mipCode,\n label: \"MipRenderer Shader Module\",\n });\n }\n\n resize(width: number, height: number) {\n this._canvas.width = width;\n this._canvas.height = height;\n this._createDepthStencil();\n }\n\n /**\n * Add a named include for all shader code. The include will be expanded\n * in any shader code created through {@link TinyHelix.createShader}.\n * The include name must be unique within the shader code. This allows\n * using `#include<name>` in the shader code to include other files.\n * While this is not standard WGSL, it's too useful not to support.\n '\n * @param name - The name as used in the `#include<name>` directive.\n * @param source - The code the include should expand to.\n */\n addShaderInclude(name: string, source: string): this {\n this._shaderIncludes.set(name, source);\n return this;\n }\n\n /**\n * Return the chosen depth/stencil format if configured.\n */\n get depthStencilFormat(): TextureFormat | undefined {\n return this._options.depthStencilFormat;\n }\n\n /**\n * The current frame's backbuffer texture. Valid after `startFrame()` has been\n * called.\n * @throws Error if accessed before startFrame()\n */\n get backbuffer(): Texture {\n if (!this._backbuffer) {\n throw new Error('Backbuffer not initialized. Did you forget to call startFrame()?');\n }\n return this._backbuffer!;\n }\n\n /**\n * The RenderTarget wrapper for the current backbuffer. Valid after `startFrame()`.\n * @throws Error if accessed before startFrame()\n */\n get backbufferTarget(): RenderTarget {\n if (!this._backbufferTarget) {\n throw new Error('Backbuffer not initialized. Did you forget to call startFrame()?');\n }\n return this._backbufferTarget!;\n }\n\n get colorSpace(): ColorSpace\n {\n return this._context.colorSpace;\n }\n\n get backbufferFormat(): TextureFormat {\n return this._context.format;\n }\n\n /**\n * The width of the current backbuffer. Valid after `startFrame()`.\n */\n get backbufferWidth(): number {\n return this._canvas.width;\n }\n\n /**\n * The height of the current backbuffer. Valid after `startFrame()`.\n */\n get backbufferHeight(): number {\n return this._canvas.height;\n }\n\n /**\n * Needs to be called before rendering each frame. Updates internal backbuffer\n * references to the current swapchain texture.\n * @example tiny.startFrame();\n */\n startFrame() {\n if (this._parent) {\n this._backbuffer = this._parent.backbuffer;\n this._backbufferTarget = this._parent.backbufferTarget;\n return;\n }\n else {\n this._backbuffer = Texture.from_webgpu(this._context.getCurrentTexture(), this._context.format, this._context);\n this._backbufferTarget = this.createRenderTarget(this._backbuffer)\n .withMipLevel(0)\n .build();\n }\n }\n\n /**\n * Create a RenderTargetBuilder for a given texture.\n */\n createRenderTarget(target: Texture): RenderTargetBuilder\n {\n return new RenderTargetBuilder(target);\n }\n\n /**\n * Create a ShaderBuilder for creating a Shader.\n */\n createShader(): ShaderBuilder\n {\n let builder = new ShaderBuilder(this._context);\n\n this._shaderIncludes.forEach((v, k) => builder = builder.withInclude(k, v));\n this._globalBindGroupLayouts.forEach((layout, i) => builder.withBindGroup(i, layout))\n\n return builder;\n }\n\n /**\n * Create a BindGroupLayoutBuilder for creating a BindGroupLayout.\n */\n createBindGroupLayout(): BindGroupLayoutBuilder\n {\n return new BindGroupLayoutBuilder(this._context);\n }\n\n /**\n * Create a BindGroupBuilder for creating a BindGroup.\n */\n createBindGroup(layout: BindGroupLayout): BindGroupBuilder\n {\n return new BindGroupBuilder(this._context, layout);\n }\n\n /**\n * Create a MeshBuilder for creating a Mesh.\n */\n createMesh(): MeshBuilder\n {\n return new MeshBuilder(this._context);\n }\n\n /**\n * Create a RenderPipelineBuilder for creating a RenderPipeline.\n */\n createRenderPipeline(): RenderPipelineBuilder\n {\n return new RenderPipelineBuilder(this._context, this._options.depthStencilFormat);\n }\n\n /**\n * Create a ComputePipelineBuilder for creating a ComputePipeline.\n */\n createComputePipeline(): ComputePipelineBuilder\n {\n return new ComputePipelineBuilder(this._context);\n }\n\n /**\n * Create a SamplerBuilder for creating a Sampler.\n */\n createSampler(): SamplerBuilder\n {\n return new SamplerBuilder(this._context);\n }\n\n /**\n * Create a TextureBuilder for creating a Texture.\n */\n createTexture(): TextureBuilder\n {\n return new TextureBuilder(this._context, this._mipShader)\n }\n\n /**\n * Creates a command encoder for recording GPU commands for the current frame.\n * @param label - Optional debug label to assign to the encoder\n */\n createCommandEncoder(label?: string): CommandEncoder {\n return new CommandEncoder(this.backbufferTarget, this._globalBindGroups, this._context, this._depthStencilTarget, label);\n }\n\n /**\n * Create a UniformBufferLayoutBuilder for creating a UniformBufferLayout.\n */\n createUniformBufferLayout(): UniformBufferLayoutBuilder\n {\n return new UniformBufferLayoutBuilder();\n }\n\n /**\n * Create a UniformBuffer for the given layout.\n */\n createUniformBuffer(layout: UniformBufferLayout): UniformBuffer\n {\n return new UniformBuffer(layout, this._context)\n }\n\n /**\n * Create a BufferBuilder to construct raw buffers.\n */\n createBuffer(): BufferBuilder\n {\n return new BufferBuilder(this._context);\n }\n\n /**\n * Allows setting a global bind group for all render passes. This is useful\n * for setting bind groups that are used by all passes. These buffers will\n * automatically be set for all render and compute passes.\n * @param index - The index of the bind group in the render pipeline layout.\n * @param buffer - The bind group to set.\n */\n setGlobalBindGroup(index: number, layout: BindGroupLayout, buffer: BindGroup): this {\n this._globalBindGroupLayouts[index] = layout;\n this._globalBindGroups[index] = buffer;\n return this;\n }\n\n /**\n * Destroy the TinyHelix instance and release all GPU resources.\n */\n destroy(): void {\n this._context.destroy();\n }\n\n /**\n * Returns the current depth/stencil texture if configured.\n */\n depthStencilTexture(): Texture | undefined {\n return this._depthStencil;\n }\n\n /**\n * Returns the current depth/stencil RenderTarget if configured.\n */\n depthStencilTarget(): RenderTarget | undefined {\n return this._depthStencilTarget;\n }\n\n private _createDepthStencil() {\n this._depthStencil = mapUndefined(this._options.depthStencilFormat, (f) =>\n this.createTexture()\n .withFormat(f)\n .withSize(this._canvas.width, this._canvas.height)\n .withUsage(GPUTextureUsage.RENDER_ATTACHMENT)\n .build()\n );\n\n this._depthStencilTarget = mapUndefined(this._depthStencil, (t) =>\n this.createRenderTarget(t)\n .build()\n );\n }\n}\n","import {ColorSpace, TextureFormat} from \"./enums\";\n\n/**\n * Options for initializing WebGPU context\n */\nexport interface WebGPUContextOptions {\n /** The canvas element to render to */\n canvas?: HTMLCanvasElement;\n /** Power preference for adapter selection */\n powerPreference?: GPUPowerPreference;\n /** Required features for the device */\n requiredFeatures?: GPUFeatureName[];\n /** Required limits for the device */\n requiredLimits?: Record<string, number>;\n colorSpace?: ColorSpace;\n}\n\n/**\n * Manages WebGPU adapter, device, and context initialization\n */\nexport class WebGPUContext {\n private _adapter: GPUAdapter | null = null;\n private _device: GPUDevice | null = null;\n private _context: GPUCanvasContext | null = null;\n private _format: TextureFormat = TextureFormat.Rgba8UnormSrgb;\n private _canvas: HTMLCanvasElement | null = null;\n private _colorSpace: ColorSpace = ColorSpace.sRGB;\n private _shaderF16Supported: boolean = false;\n private _floatFilteringSupported: boolean = false;\n\n /**\n * Gets the WebGPU adapter. Throws if not initialized.\n */\n get adapter(): GPUAdapter {\n return this._adapter!;\n }\n\n /**\n * Gets the WebGPU device. Throws if not initialized.\n */\n get device(): GPUDevice {\n return this._device!;\n }\n\n /**\n * Gets the GPU canvas context. Throws if no canvas was configured.\n */\n get context(): GPUCanvasContext {\n return this._context!;\n }\n\n /**\n * Gets the preferred texture format used by the configured canvas/context.\n */\n get format(): TextureFormat {\n return this._format;\n }\n\n /**\n * Gets the color space used by the configured canvas/context.\n */\n get colorSpace(): ColorSpace\n {\n return this._colorSpace;\n }\n\n /**\n * Gets the configured canvas element. Throws if none was provided during initialization.\n */\n get canvas(): HTMLCanvasElement {\n return this._canvas!;\n }\n\n /**\n * Checks if WebGPU is supported in the current environment.\n */\n static isSupported(): boolean {\n return typeof navigator !== 'undefined' && 'gpu' in navigator;\n }\n\n /**\n * Initializes the WebGPU context and device.\n * @param options - Configuration options such as canvas and adapter preferences\n * @throws Error if WebGPU is not supported or initialization fails\n */\n async initialize(options: WebGPUContextOptions = {}) {\n if (!WebGPUContext.isSupported()) {\n throw new Error('WebGPU is not supported in this browser');\n }\n\n // Request adapter\n this._adapter = await navigator.gpu.requestAdapter({\n powerPreference: options.powerPreference ?? 'high-performance',\n });\n\n if (!this._adapter) {\n throw new Error('Failed to get WebGPU adapter');\n }\n\n // By default, shader-f16 is enabled whenever available, while TinyHelix provides f32 fallback if it doesn't.\n // The user can ask for explicit support through the features. At this point, it will NOT provide a fallback\n // and fail to create the context.\n this._shaderF16Supported = this._adapter.features.has(\"shader-f16\");\n this._floatFilteringSupported = this._adapter.features.has(\"float32-filterable\");\n const requiresF16 = options.requiredFeatures?.includes(\"shader-f16\");\n if (!this._shaderF16Supported) {\n if (requiresF16)\n throw new Error(\"shader-f16 feature requested but not available\");\n else\n console.warn(\"WebGPU adapter does not support shader-f16 feature. Performance may be suboptimal for certain workloads.\");\n }\n else if (!requiresF16) {\n options.requiredFeatures = options.requiredFeatures ?? [];\n options.requiredFeatures?.push(\"shader-f16\");\n }\n\n if (this._floatFilteringSupported && !options.requiredFeatures?.includes(\"float32-filterable\")) {\n options.requiredFeatures = options.requiredFeatures ?? [];\n options.requiredFeatures?.push(\"float32-filterable\");\n }\n\n // Request device\n this._device = await this._adapter.requestDevice({\n requiredFeatures: options.requiredFeatures,\n requiredLimits: options.requiredLimits,\n });\n\n if (!this._device) {\n throw new Error('Failed to get WebGPU device');\n }\n\n // Setup error handling\n this._device.lost.then((info: GPUDeviceLostInfo) => {\n console.error(\"WebGPU device lost:\", info.message, \"\\nReason:\", info.reason);\n\n if (info.reason !== \"destroyed\") {\n // Attempt to reinitialize\n this.initialize(options).catch((error) => {\n console.error(\"Failed to reinitialize WebGPU context:\", error);\n });\n }\n });\n\n // Configure canvas context if provided\n if (options.canvas) {\n this._canvas = options.canvas;\n this._context = this._canvas.getContext(\"webgpu\") as GPUCanvasContext;\n\n if (!this._context) {\n throw new Error(\"Failed to get WebGPU context from canvas\");\n }\n\n const canUseP3 = window.matchMedia(\"(color-gamut: p3)\").matches;\n this._colorSpace = options.colorSpace ?? ColorSpace.sRGB;\n if (this._colorSpace === ColorSpace.DisplayP3 && !canUseP3) {\n this._colorSpace = ColorSpace.sRGB;\n console.warn(\"DisplayP3 not supported, falling back to sRGB\");\n }\n\n this._format = navigator.gpu.getPreferredCanvasFormat() as TextureFormat;\n this._context.configure({\n device: this._device,\n format: this._format,\n colorSpace: this._colorSpace,\n alphaMode: \"premultiplied\",\n });\n }\n else {\n console.warn(\"No canvas provided!\");\n }\n }\n\n /**\n * Indicates whether the shaders support the f16 format. Use the type `half`, `vec2h`, `vec3h`, `vec4h`, etc. to\n * provide f32 fallbacks if f16 is not supported.\n */\n get shaderF16Supported(): boolean\n {\n return this._shaderF16Supported;\n }\n\n /**\n * Indicates whether the device supports filtering on float32 textures.\n */\n get floatFilteringSupported(): boolean\n {\n return this._floatFilteringSupported;\n }\n\n /**\n * Internal helper to fetch the current swapchain texture.\n * @internal\n */\n getCurrentTexture(): GPUTexture {\n return this._context!.getCurrentTexture();\n }\n\n /**\n * Destroys the WebGPU context and releases resources\n */\n destroy(): void {\n if (this._device) {\n this._device.destroy();\n this._device = null;\n }\n this._adapter = null;\n this._context = null;\n this._canvas = null;\n }\n}\n","import {WebGPUContext} from \"../WebGPUContext\";\nimport {mapUndefined} from \"../utils/mapUndefined\";\nimport {padArrayBuffer} from \"../utils/padArrayBuffer\";\nimport {IBuffer} from \"./IBuffer\";\n\n/**\n * Buffer usage flags re-exported from the WebGPU API for convenience.\n * Use these when constructing buffers with `BufferBuilder.withUsage()`.\n */\nexport enum BufferUsage {\n MapRead = GPUBufferUsage.MAP_READ,\n MapWrite = GPUBufferUsage.MAP_WRITE,\n CopySrc = GPUBufferUsage.COPY_SRC,\n CopyDst = GPUBufferUsage.COPY_DST,\n Index = GPUBufferUsage.INDEX,\n Vertex = GPUBufferUsage.VERTEX,\n Uniform = GPUBufferUsage.UNIFORM,\n Storage = GPUBufferUsage.STORAGE,\n Indirect = GPUBufferUsage.INDIRECT,\n QueryResolve = GPUBufferUsage.QUERY_RESOLVE\n}\n\nexport enum TextureUsage {\n CopySrc = GPUTextureUsage.COPY_SRC,\n CopyDst = GPUTextureUsage.COPY_DST,\n TextureBinding = GPUTextureUsage.TEXTURE_BINDING,\n StorageBinding = GPUTextureUsage.STORAGE_BINDING,\n RenderAttachment = GPUTextureUsage.RENDER_ATTACHMENT\n}\n\n/**\n * Builder for creating GPU-backed buffers.\n *\n * Example:\n * const buf = new BufferBuilder(ctx)\n * .withUsage(BufferUsage.Vertex | BufferUsage.CopyDst)\n * .withData(new Float32Array([...]).buffer)\n * .build();\n */\nexport class BufferBuilder {\n private _ctx: WebGPUContext;\n private _data?: ArrayBufferLike;\n private _size = 0;\n private _keepData = false;\n private _usage: number = 0;\n private _dataOffset: number = 0;\n\n constructor(ctx: WebGPUContext) {\n this._ctx = ctx;\n }\n\n /**\n * Add usage flags for the GPU buffer.\n */\n withUsage(usage: BufferUsage): this\n {\n this._usage |= usage;\n return this;\n }\n\n /**\n * Provide initial data for the buffer. If `keepOnCPU` is true the original\n * ArrayBuffer is stored in the resulting `Buffer.data` field for readback or\n * reuse.\n */\n withData(data: ArrayBufferLike, keepOnCPU: boolean = false, offset: number = 0, length: number = data.byteLength): this{\n this._data = data;\n // round to the nearest multiple of 4 bytes, as required by GPUBuffer.writeBuffer()\n this._size = length ?? (data.byteLength - offset);\n this._keepData = keepOnCPU;\n this._dataOffset = offset;\n this._usage |= BufferUsage.CopyDst;\n return this;\n }\n\n /**\n * Specify a size for the buffer, used when not providing data.\n */\n withSize(size: number): this\n {\n this._size = size;\n return this;\n }\n\n /**\n * Create the GPU buffer and upload any provided data.\n */\n build(): Buffer {\n const data = mapUndefined(this._data, data => padArrayBuffer(data, 4, this._dataOffset, this._size));\n if (this._keepData && data) {\n this._data = data;\n }\n this._size = data?.byteLength ?? this._size;\n const buffer = this._ctx.device.createBuffer({\n size: this._size,\n usage: this._usage\n });\n\n if (data) {\n this._ctx.device.queue.writeBuffer(buffer, 0, data);\n }\n\n return new Buffer(buffer, this._keepData ? this._data : undefined);\n }\n}\n\n/**\n * Lightweight wrapper around a GPUBuffer. Exposes the original CPU-side data\n * (when kept) and the underlying GPU buffer for low-level interop.\n */\nexport class Buffer implements IBuffer {\n readonly _inner: GPUBuffer;\n readonly data?: ArrayBufferLike;\n\n /**\n * Create a Buffer from an existing GPUBuffer.\n * @param inner The underlying GPUBuffer.\n * @param data Optional CPU-side copy of the buffer contents.\n */\n constructor(inner: GPUBuffer, data?: ArrayBufferLike) {\n this._inner = inner;\n this.data = data;\n }\n\n /** Size of the GPU buffer in bytes. */\n get size(): number { return this._inner.size; }\n\n _uploadData(ctx: WebGPUContext)\n {\n if (!this.data) {\n console.warn(\"Buffer has no data to upload.\");\n return;\n }\n\n ctx.device.queue.writeBuffer(this._inner, 0, this.data);\n }\n\n _getBufferResource(): GPUBindingResource {\n return { buffer: this._inner };\n }\n}","import {float32ToFloat16} from \"../utils/float32ToFloat16\";\nimport {IndexedCollection} from \"../utils/IndexedCollection\";\n\n/**\n * Utility for incrementally building binary data into an ArrayBuffer.\n * Provides typed push helpers for common numeric types used in vertex/index buffers.\n */\nexport class BufferDataWriter {\n private _buffer: ArrayBuffer;\n private _view: DataView;\n private _offset = 0;\n\n /** Create a new writer with the given total byte size. */\n constructor(byteSize: number) {\n this._buffer = new ArrayBuffer(byteSize);\n this._view = new DataView(this._buffer);\n }\n\n /** Push an unsigned 8-bit integer. */\n pushUint8(value: number): this {\n this._view.setUint8(this._offset, value);\n this._offset += 1;\n return this;\n }\n\n /** Push two unsigned 8-bit integers. */\n pushUint8x2(x: number, y: number): this {\n this.pushUint8(x);\n this.pushUint8(y);\n return this;\n }\n\n /** Push four unsigned 8-bit integers. */\n pushUint8x4(x: number, y: number, z: number, w: number): this {\n this.pushUint8(x);\n this.pushUint8(y);\n this.pushUint8(z);\n this.pushUint8(w);\n return this;\n }\n\n /** Push a signed 8-bit integer. */\n pushSint8(value: number): this {\n this._view.setInt8(this._offset, value);\n this._offset += 1;\n return this;\n }\n\n /** Push two signed 8-bit integers. */\n pushSint8x2(x: number, y: number): this {\n this.pushSint8(x);\n this.pushSint8(y);\n return this;\n }\n\n /** Push four signed 8-bit integers. */\n pushSint8x4(x: number, y: number, z: number, w: number): this {\n this.pushSint8(x);\n this.pushSint8(y);\n this.pushSint8(z);\n this.pushSint8(w);\n return this;\n }\n\n /** Push an unsigned 16-bit integer (little-endian). */\n pushUint16(value: number): this {\n this._view.setUint16(this._offset, value, true);\n this._offset += 2;\n return this;\n }\n\n /** Push two unsigned 16-bit integers (little-endian). */\n pushUint16x2(x: number, y: number): this {\n this.pushUint16(x);\n this.pushUint16(y);\n return this;\n }\n\n /** Push four unsigned 16-bit integers (little-endian). */\n pushUint16x4(x: number, y: number, z: number, w: number): this {\n this.pushUint16(x);\n this.pushUint16(y);\n this.pushUint16(z);\n this.pushUint16(w);\n return this;\n }\n\n /** Push a signed 16-bit integer (little-endian). */\n pushSint16(value: number): this {\n this._view.setInt16(this._offset, value, true);\n this._offset += 2;\n return this;\n }\n\n /** Push two signed 16-bit integers (little-endian). */\n pushSint16x2(x: number, y: number): this {\n this.pushSint16(x);\n this.pushSint16(y);\n return this;\n }\n\n /** Push four signed 16-bit integers (little-endian). */\n pushSint16x4(x: number, y: number, z: number, w: number): this {\n this.pushSint16(x);\n this.pushSint16(y);\n this.pushSint16(z);\n this.pushSint16(w);\n return this;\n }\n\n /** Push a 16-bit float (little-endian). */\n pushFloat16(value: number) {\n const bits = float32ToFloat16(value);\n this._view.setUint16(this._offset, bits, true);\n this._offset += 2;\n return this;\n }\n\n /** Push two 16-bit floats (little-endian). */\n pushFloat16x2(x: number, y: number): this {\n this.pushFloat16(x);\n this.pushFloat16(y);\n return this;\n }\n\n /** Push four 16-bit floats (little-endian). */\n pushFloat16x4(x: number, y: number, z: number, w: number): this {\n this.pushFloat16(x);\n this.pushFloat16(y);\n this.pushFloat16(z);\n this.pushFloat16(w);\n return this;\n }\n\n /** Push a 32-bit float (little-endian). */\n pushFloat32(value: number): this {\n this._view.setFloat32(this._offset, value, true);\n this._offset += 4;\n return this;\n }\n\n /** Push two 32-bit floats (little-endian). */\n pushFloat32x2(arr: [number, number] | IndexedCollection): this {\n this.pushFloat32(arr[0]);\n this.pushFloat32(arr[1]);\n return this;\n }\n\n /** Push four 32-bit floats (little-endian). */\n pushFloat32x3(arr: [number, number, number] | IndexedCollection): this {\n this.pushFloat32(arr[0]);\n this.pushFloat32(arr[1]);\n this.pushFloat32(arr[2]);\n return this;\n }\n\n /** Push an 8-bit float (little-endian). */\n pushFloat32x4(arr: [number, number, number, number] | IndexedCollection): this {\n this.pushFloat32(arr[0]);\n this.pushFloat32(arr[1]);\n this.pushFloat32(arr[2]);\n this.pushFloat32(arr[3]);\n return this;\n }\n\n /** Push an unsigned 32-bit integer (little-endian). */\n pushUint32(value: number): this {\n this._view.setUint32(this._offset, value, true);\n this._offset += 4;\n return this;\n }\n\n /** Push two unsigned 32-bit integers (little-endian). */\n pushUint32x2(arr: [number, number] | Uint32Array): this {\n this.pushUint32(arr[0]);\n this.pushUint32(arr[1]);\n return this;\n }\n\n /** Push three unsigned 32-bit integers (little-endian). */\n pushUint32x3(arr: [number, number, number] | Uint32Array): this {\n this.pushUint32(arr[0]);\n this.pushUint32(arr[1]);\n this.pushUint32(arr[2]);\n return this;\n }\n\n /** Push four unsigned 32-bit integers (little-endian). */\n pushUint32x4(arr: [number, number, number, number] | Uint32Array): this {\n this.pushUint32(arr[0]);\n this.pushUint32(arr[1]);\n this.pushUint32(arr[2]);\n this.pushUint32(arr[3]);\n return this;\n }\n\n /** Push a signed 32-bit integer (little-endian). */\n pushSint32(value: number): this {\n this._view.setInt32(this._offset, value, true);\n this._offset += 4;\n return this;\n }\n\n /** Push two signed 32-bit integers (little-endian). */\n pushSint32x2(arr: [number, number] | Int32Array): this {\n this.pushSint32(arr[0]);\n this.pushSint32(arr[1]);\n return this;\n }\n\n /** Push three signed 32-bit integers (little-endian). */\n pushSint32x3(arr: [number, number, number] | Int32Array): this {\n this.pushSint32(arr[0]);\n this.pushSint32(arr[1]);\n this.pushSint32(arr[2]);\n return this;\n }\n\n /** Push four signed 32-bit integers (little-endian). */\n pushSint32x4(arr: [number, number, number, number] | Int32Array): this {\n this.pushSint32(arr[0]);\n this.pushSint32(arr[1]);\n this.pushSint32(arr[2]);\n this.pushSint32(arr[3]);\n return this;\n }\n\n /** Returns the underlying ArrayBuffer containing all written data. */\n get arrayBuffer(): ArrayBuffer\n {\n return this._buffer;\n }\n}","import {WebGPUContext} from \"../WebGPUContext\";\nimport {Buffer, BufferBuilder} from \"./Buffer\";\nimport {float32ToFloat16} from \"../utils/float32ToFloat16\";\nimport {IBuffer} from \"./IBuffer\";\nimport {IndexedCollection} from \"../utils/IndexedCollection\";\n\n/**\n * Primitive base types supported by the uniform buffer helpers.\n * These correspond to WGSL scalar types used inside UBOs.\n */\nexport enum BaseType {\n Float16,\n Float32,\n Uint,\n Sint,\n Boolean\n}\n\nfunction sizeForBaseType(type: BaseType): number {\n switch (type) {\n case BaseType.Float16:\n return 2;\n case BaseType.Float32:\n case BaseType.Uint:\n case BaseType.Sint:\n return 4;\n case BaseType.Boolean:\n return 1;\n default:\n throw new Error(\"Unknown BaseType.\");\n }\n}\n\nenum ContainerType {\n Scalar,\n Vec,\n Matrix, // a matrix of 2 vec[numElements]<baseType>\n Array,\n}\n\nclass MemberType {\n baseType: BaseType;\n containerType: ContainerType;\n numRows = 1;\n numCols = 1;\n\n constructor(baseType: BaseType, containerType: ContainerType, numRows: number, numCols: number) {\n if (containerType === ContainerType.Scalar && numRows !== 1 && numCols !== 1) {\n throw new Error(\"Scalar member must have numRows = 1.\");\n }\n\n this.baseType = baseType;\n this.containerType = containerType;\n this.numRows = numRows;\n this.numCols = numCols;\n }\n\n get size(): number {\n // when we're dealing with matrices, storing vec3f internally stores as vec4f\n const numRows = this.numCols > 1 && this.numRows === 3 ? 4 : this.numRows;\n return sizeForBaseType(this.baseType) * numRows * this.numCols;\n }\n\n get alignment(): number {\n const numElements = this.numRows === 3 ? 4 : this.numRows;\n // matrices are also just aligned to their underlying vec alignment\n return sizeForBaseType(this.baseType) * numElements;\n }\n}\n\ninterface Member {\n type: MemberType;\n offset: number;\n}\n\nexport class UniformBufferLayoutBuilder {\n private _size: number = 0;\n private _members: Map<string, Member> = new Map();\n\n /**\n * Reserve an explicit size for the resulting UBO layout. If not set the\n * builder will compute a size that fits all declared members.\n */\n withSize(size: number): this {\n if (this._size !== 0) throw new Error(\"Size already set.\");\n this._size = size;\n return this;\n }\n\n pushScalar(baseType: BaseType, name: string): this {\n return this._pushField(baseType, name, ContainerType.Scalar);\n }\n\n pushVec2(baseType: BaseType, name: string): this {\n return this._pushField(baseType, name, ContainerType.Vec, 2);\n }\n\n pushVec3(baseType: BaseType, name: string): this {\n return this._pushField(baseType, name, ContainerType.Vec, 3);\n }\n\n pushVec4(baseType: BaseType, name: string): this {\n return this._pushField(baseType, name, ContainerType.Vec, 4);\n }\n\n pushMatrix(baseType: BaseType, numRows: number, numCols: number, name: string): this {\n if (!Number.isInteger(numRows) || !Number.isInteger(numCols)) {\n throw new Error('Matrix dimensions must be integers');\n }\n\n if (numRows < 2 || numRows > 4 || numCols < 2 || numCols > 4) {\n throw new Error('Matrix dimensions must be between 2 and 4 (inclusive)');\n }\n\n return this._pushField(baseType, name, ContainerType.Matrix, numRows, numCols);\n }\n\n /**\n * Finalize and return a `UniformBufferLayout` describing member offsets and total size.\n */\n build(): UniformBufferLayout {\n // round up to 16 byte alignment with a 16 byte minimum\n this._size = Math.ceil(this._size / 16) * 16;\n return new UniformBufferLayout(this._size, this._members);\n }\n\n private _pushField(baseType: BaseType, name: string, containerType: ContainerType, numRows: number = 1, numCols: number = 1): this {\n const type = new MemberType(baseType, containerType, numRows, numCols);\n const alignment = type.alignment;\n const offset = Math.ceil(this._size / alignment) * alignment;\n this._members.set(name, {offset, type});\n this._size = offset + type.size;\n return this;\n }\n}\n\n/**\n * Describes the layout of a uniform buffer including member offsets and total size.\n * Use `UniformBufferLayoutBuilder` to construct instances.\n */\nexport class UniformBufferLayout {\n readonly size: number;\n private _members: Map<string, Member>;\n\n constructor(size: number, members: Map<string, Member>) {\n this.size = size;\n this._members = members;\n }\n\n /**\n * Create typed DataViews for each member of the layout.\n * @internal\n */\n _createDataViews(target: ArrayBuffer): Map<string, [Member, IndexedCollection]> {\n const map = new Map();\n for (const [name, member] of this._members) {\n let ArrayConst: { new(buffer: ArrayBuffer, byteOffset: number, size: number): IndexedCollection; };\n const size = member.type.size;\n let byteSize = 4;\n\n switch (member.type.baseType) {\n case BaseType.Float16:\n byteSize = 2;\n ArrayConst = Uint16Array;\n break;\n case BaseType.Float32:\n ArrayConst = Float32Array;\n break;\n case BaseType.Uint:\n case BaseType.Boolean:\n ArrayConst = Uint32Array;\n break;\n case BaseType.Sint:\n ArrayConst = Int32Array;\n break;\n }\n\n map.set(name, [ member, new ArrayConst(target, member.offset, size / byteSize) ]);\n }\n return map;\n }\n\n private _getMemberOrThrow(name: string): Member {\n const member = this._members.get(name);\n if (!member) {\n throw new Error(`Member ${name} not found in layout.`);\n }\n return member;\n }\n}\n\n/**\n * GPU-backed uniform buffer wrapper providing typed setters and an upload method.\n * Use {@link TinyHelix.createUniformBuffer} to create instances.\n */\nexport class UniformBuffer implements IBuffer {\n private _buffer: Buffer;\n private _data: ArrayBuffer;\n private _ctx: WebGPUContext;\n private _dataViews: Map<string, [Member, IndexedCollection]> = new Map();\n\n /**\n * Create a new UniformBuffer with the given layout and WebGPU context.\n * @internal\n */\n constructor(layout: UniformBufferLayout, ctx: WebGPUContext) {\n const data = new ArrayBuffer(layout.size);\n this._buffer = new BufferBuilder(ctx)\n .withUsage(GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST)\n .withData(data, true)\n .build();\n this._data = this._buffer.data!;\n this._dataViews = layout._createDataViews(this._data);\n\n // hmmm let's think a bit here.\n // We could go through all the members of the layout and create typed views for them, so we don't need all the\n // _write functions upstairs\n this._ctx = ctx;\n }\n\n /**\n * Sets the value of a scalar field.\n * @param name Name of the scalar field.\n * @param value Value to set.\n */\n setScalar(name: string, value: number): this {\n const [ member, target ] = this._dataViews.get(name)!;\n\n if (member.type.baseType === BaseType.Float16) {\n target[0] = float32ToFloat16(value);\n }\n else {\n target[0] = value;\n }\n\n return this;\n }\n\n /**\n * Sets the values for a vector field.\n * @param name Name of the vector field.\n * @param values Array of values to set.\n */\n setVec(name: string, values: number[] | IndexedCollection): this {\n const [ member, target ] = this._dataViews.get(name)!;\n for (let i = 0; i < target.length; ++i) {\n target[i] = 0;\n }\n\n if (member.type.baseType == BaseType.Float16) {\n for (let i = 0; i < values.length; ++i) {\n target[i] = float32ToFloat16(values[i]);\n }\n } else {\n for (let i = 0; i < values.length; ++i) {\n target[i] = values[i];\n }\n }\n\n return this;\n }\n\n /**\n * Sets the values for a matrix field.\n * @param name Name of the matrix field.\n * @param values Array of values to set. The values are expected to be in column-major order.\n */\n setMatrix(name: string, values: number[] | IndexedCollection): this {\n const [ member, target ] = this._dataViews.get(name)!;\n\n const numCols = member.type.numCols;\n const numRows = member.type.numRows;\n const skipW = numRows === 3;\n for (let i = 0; i < target.length; ++i) {\n target[i] = 0;\n }\n\n // I know looping inside the cases looks ugly and the loops are tiny, but I just can't bring myself to put\n // a switch in a loop\n let i = 0;\n if (member.type.baseType === BaseType.Float16) {\n for (let col = 0; col < numCols; ++col) {\n for (let row = 0; row < numRows; ++row) {\n target[i] = float32ToFloat16(values[i]);\n ++i;\n }\n if (skipW) ++i;\n }\n } else {\n for (let col = 0; col < numCols; ++col) {\n for (let row = 0; row < numRows; ++row) {\n target[i] = values[i];\n ++i;\n }\n if (skipW) ++i;\n }\n }\n\n return this;\n }\n\n /**\n * Upload the current buffer contents to the GPU.\n */\n upload(): this {\n this._buffer._uploadData(this._ctx);\n return this;\n }\n\n /**\n * Internal accessor returning the underlying Buffer wrapper.\n * @internal\n */\n _getBufferResource(): GPUBindingResource {\n return { buffer: this._buffer._inner };\n }\n}","export enum ColorSpace {\n sRGB = 'srgb',\n DisplayP3 = 'display-p3'\n}\n\nexport enum FilterMode {\n Nearest = \"nearest\",\n Linear = \"linear\"\n}\n\nexport enum AddressMode {\n ClampToEdge = \"clamp-to-edge\",\n Repeat = \"repeat\",\n MirrorRepeat = \"mirror-repeat\"\n}\n\n/**\n * Face culling modes used by the render pipeline primitive state.\n */\nexport enum CullMode {\n None = 'none',\n Front = 'front',\n Back = 'back'\n}\n\nexport enum TextureFormat {\n R8Unorm = \"r8unorm\",\n R8Snorm = \"r8snorm\",\n R8Uint = \"r8uint\",\n R8Sint = \"r8sint\",\n R16Unorm = \"r16unorm\",\n R16Snorm = \"r16snorm\",\n R16Uint = \"r16uint\",\n R16Sint = \"r16sint\",\n R16Float = \"r16float\",\n RG8Unorm = \"rg8unorm\",\n RG8Snorm = \"rg8snorm\",\n RG8Uint = \"rg8uint\",\n RG8Sint = \"rg8sint\",\n R32Uint = \"r32uint\",\n R32Sint = \"r32sint\",\n R32Float = \"r32float\",\n RG16Unorm = \"rg16unorm\",\n RG16Snorm = \"rg16snorm\",\n RG16Uint = \"rg16uint\",\n RG16Sint = \"rg16sint\",\n RG16Float = \"rg16float\",\n Rgba8Unorm = \"rgba8unorm\",\n Rgba8UnormSrgb = \"rgba8unorm-srgb\",\n Rgba8Snorm = \"rgba8snorm\",\n Rgba8Uint = \"rgba8uint\",\n Rgba8Sint = \"rgba8sint\",\n Bgra8Unorm = \"bgra8unorm\",\n Bgra8UnormSrgb = \"bgra8unorm-srgb\",\n Rgb9e5Ufloat = \"rgb9e5ufloat\",\n Rgb10a2Uint = \"rgb10a2uint\",\n Rgb10a2Unorm = \"rgb10a2unorm\",\n Rg11b10Ufloat = \"rg11b10ufloat\",\n RG32Uint = \"rg32uint\",\n RG32Sint = \"rg32sint\",\n RG32Float = \"rg32float\",\n Rgba16Unorm = \"rgba16unorm\",\n Rgba16Snorm = \"rgba16snorm\",\n Rgba16Uint = \"rgba16uint\",\n Rgba16Sint = \"rgba16sint\",\n Rgba16Float = \"rgba16float\",\n Rgba32Uint = \"rgba32uint\",\n Rgba32Sint = \"rgba32sint\",\n Rgba32Float = \"rgba32float\",\n Stencil8 = \"stencil8\",\n Depth16Unorm = \"depth16unorm\",\n Depth24Plus = \"depth24plus\",\n Depth24PlusStencil8 = \"depth24plus-stencil8\",\n Depth32Float = \"depth32float\",\n Depth32FloatStencil8 = \"depth32float-stencil8\",\n Bc1RgbaUnorm = \"bc1-rgba-unorm\",\n Bc1RgbaUnormSrgb = \"bc1-rgba-unorm-srgb\",\n Bc2RgbaUnorm = \"bc2-rgba-unorm\",\n Bc2RgbaUnormSrgb = \"bc2-rgba-unorm-srgb\",\n Bc3RgbaUnorm = \"bc3-rgba-unorm\",\n Bc3RgbaUnormSrgb = \"bc3-rgba-unorm-srgb\",\n Bc4RUnorm = \"bc4-r-unorm\",\n Bc4RSnorm = \"bc4-r-snorm\",\n Bc5RgUnorm = \"bc5-rg-unorm\",\n Bc5RgSnorm = \"bc5-rg-snorm\",\n Bc6hRgbUfloat = \"bc6h-rgb-ufloat\",\n Bc6hRgbFloat = \"bc6h-rgb-float\",\n Bc7RgbaUnorm = \"bc7-rgba-unorm\",\n Bc7RgbaUnormSrgb = \"bc7-rgba-unorm-srgb\",\n Etc2Rgb8Unorm = \"etc2-rgb8unorm\",\n Etc2Rgb8UnormSrgb = \"etc2-rgb8unorm-srgb\",\n Etc2Rgb8A1Unorm = \"etc2-rgb8a1unorm\",\n Etc2Rgb8A1UnormSrgb = \"etc2-rgb8a1unorm-srgb\",\n Etc2Rgba8Unorm = \"etc2-rgba8unorm\",\n Etc2Rgba8UnormSrgb = \"etc2-rgba8unorm-srgb\",\n EacR11Unorm = \"eac-r11unorm\",\n EacR11Snorm = \"eac-r11snorm\",\n EacRg11Unorm = \"eac-rg11unorm\",\n EacRg11Snorm = \"eac-rg11snorm\",\n Astc4x4Unorm = \"astc-4x4-unorm\",\n Astc4x4UnormSrgb = \"astc-4x4-unorm-srgb\",\n Astc5x4Unorm = \"astc-5x4-unorm\",\n Astc5x4UnormSrgb = \"astc-5x4-unorm-srgb\",\n Astc5x5Unorm = \"astc-5x5-unorm\",\n Astc5x5UnormSrgb = \"astc-5x5-unorm-srgb\",\n Astc6x5Unorm = \"astc-6x5-unorm\",\n Astc6x5UnormSrgb = \"astc-6x5-unorm-srgb\",\n Astc6x6Unorm = \"astc-6x6-unorm\",\n Astc6x6UnormSrgb = \"astc-6x6-unorm-srgb\",\n Astc8x5Unorm = \"astc-8x5-unorm\",\n Astc8x5UnormSrgb = \"astc-8x5-unorm-srgb\",\n Astc8x6Unorm = \"astc-8x6-unorm\",\n Astc8x6UnormSrgb = \"astc-8x6-unorm-srgb\",\n Astc8x8Unorm = \"astc-8x8-unorm\",\n Astc8x8UnormSrgb = \"astc-8x8-unorm-srgb\",\n Astc10x5Unorm = \"astc-10x5-unorm\",\n Astc10x5UnormSrgb = \"astc-10x5-unorm-srgb\",\n Astc10x6Unorm = \"astc-10x6-unorm\",\n Astc10x6UnormSrgb = \"astc-10x6-unorm-srgb\",\n Astc10x8Unorm = \"astc-10x8-unorm\",\n Astc10x8UnormSrgb = \"astc-10x8-unorm-srgb\",\n Astc10x10Unorm = \"astc-10x10-unorm\",\n Astc10x10UnormSrgb = \"astc-10x10-unorm-srgb\",\n Astc12x10Unorm = \"astc-12x10-unorm\",\n Astc12x10UnormSrgb = \"astc-12x10-unorm-srgb\",\n Astc12x12Unorm = \"astc-12x12-unorm\",\n Astc12x12UnormSrgb = \"astc-12x12-unorm-srgb\"\n}\n\nexport enum BlendFactor {\n Zero = \"zero\",\n One = \"one\",\n SrcColor = \"src\",\n OneMinusSrcColor = \"one-minus-src\",\n SrcAlpha = \"src-alpha\",\n OneMinusSrcAlpha = \"one-minus-src-alpha\",\n DstColor = \"dst\",\n OneMinusDstColor = \"one-minus-dst\",\n DstAlpha = \"dst-alpha\",\n OneMinusDstAlpha = \"one-minus-dst-alpha\",\n SrcAlphaSaturated = \"src-alpha-saturated\",\n Constant = \"constant\",\n OneMinusConstant = \"one-minus-constant\",\n Src1Color = \"src1\",\n OneMinusSrc1Color = \"one-minus-src1\",\n Src1Alpha = \"src1-alpha\",\n OneMinusSrc1Alpha = \"one-minus-src1-alpha\"\n}\n\nexport enum CompareFunction {\n Never = \"never\",\n Less = \"less\",\n Equal = \"equal\",\n LessEqual = \"less-equal\",\n Greater = \"greater\",\n NotEqual = \"not-equal\",\n GreaterEqual = \"greater-equal\",\n Always = \"always\"\n}\n\nexport enum StorageAccess {\n ReadWrite = \"read-write\",\n Read = \"read-only\",\n Write = \"write-only\"\n}\n\nexport enum TextureSampleType {\n Float = \"float\",\n Sint = \"sint\",\n Uint = \"uint\",\n UnfilterableFloat = \"unfilterable-float\",\n Depth = \"depth\",\n}\n\nexport enum SamplerType {\n Filtering = \"filtering\",\n NonFiltering = \"non-filtering\",\n Comparison = \"comparison\",\n}\n\nexport enum ColorChannel {\n Red = GPUColorWrite.RED,\n Green = GPUColorWrite.GREEN,\n Blue = GPUColorWrite.BLUE\n}\n\nexport enum TextureDimension {\n D1 = \"1d\",\n D2 = \"2d\",\n D3 = \"3d\"\n}\n\nexport enum TextureViewDimension {\n D1 = \"1d\",\n D2 = \"2d\",\n D2Array = \"2d-array\",\n Cube = \"cube\",\n CubeArray = \"cube-array\",\n D3 = \"3d\"\n}\n\nexport enum ShaderStage {\n Vertex = GPUShaderStage.VERTEX,\n Fragment = GPUShaderStage.FRAGMENT,\n Compute = GPUShaderStage.COMPUTE\n}\n\nexport enum StoreOp {\n Store = \"store\",\n Discard = \"discard\"\n}","import {FilterMode} from \"../enums\";\n\nimport {Texture} from \"../Texture\";\nimport {WebGPUContext} from \"../WebGPUContext\";\nimport {TextureUsage} from \"../buffers/Buffer\";\n\nexport class MipRenderer {\n private _pipeline: GPURenderPipeline;\n private _ctx: WebGPUContext;\n private _bindgroupLayout: GPUBindGroupLayout;\n private _bindgroups: GPUBindGroup[] = [];\n private _views: GPUTextureView[] = [];\n private _passDescs: GPURenderPassDescriptor[] = [];\n\n constructor(ctx: WebGPUContext, shader: GPUShaderModule, texture: Texture) {\n this._ctx = ctx;\n\n const sampler = ctx.device.createSampler({\n label: \"MipRenderer Bilinear Sampler\",\n magFilter: FilterMode.Linear,\n minFilter: FilterMode.Linear,\n mipmapFilter: FilterMode.Nearest\n });\n\n this._bindgroupLayout = ctx.device.createBindGroupLayout({\n label: \"MipRenderer BindGroup Layout\",\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.FRAGMENT,\n texture: {\n sampleType: \"float\",\n viewDimension: texture.dimension(),\n multisampled: false\n }\n },\n {\n binding: 1,\n visibility: GPUShaderStage.FRAGMENT,\n sampler: {\n type: \"filtering\"\n }\n }\n ]\n });\n\n this._pipeline = ctx.device.createRenderPipeline({\n label: \"MipRenderer Pipeline\",\n layout: ctx.device.createPipelineLayout({\n label: \"MipRenderer Pipeline Layout\",\n bindGroupLayouts: [this._bindgroupLayout]\n }),\n vertex: {\n module: shader,\n entryPoint: \"vs_main\"\n },\n fragment: {\n module: shader,\n entryPoint: \"fs_main\",\n targets: [\n {\n format: texture.format\n }\n ]\n },\n primitive: {\n topology: \"triangle-list\",\n stripIndexFormat: undefined,\n frontFace: \"ccw\",\n cullMode: \"none\"\n }\n });\n\n for (let level = 0; level < texture.mipLevelCount; ++level) {\n this._views.push(\n texture.createView()\n .withSingleMip(level)\n .withUsage(TextureUsage.RenderAttachment)\n .withUsage(TextureUsage.TextureBinding)\n .build()._inner\n );\n\n if (level === 0) continue;\n\n this._bindgroups.push(ctx.device.createBindGroup({\n label: `MipRenderer BindGroup Mip ${level}`,\n layout: this._bindgroupLayout,\n entries: [\n {\n binding: 0,\n resource: this._views[level - 1]\n },\n {\n binding: 1,\n resource: sampler\n }\n ]\n }));\n\n this._passDescs.push({\n label: `MipRenderer Render Pass mip ${level}`,\n colorAttachments: [{\n view: this._views[level],\n loadOp: 'clear',\n storeOp: 'store',\n clearValue: {r: 0, g: 0, b: 0, a: 0}\n }]\n });\n }\n }\n\n render() {\n const encoder = this._ctx.device.createCommandEncoder({\n label: \"MipRenderer Command Encoder\"\n });\n\n this._passDescs.forEach((desc, level) => {\n const pass = encoder.beginRenderPass(desc);\n pass.setPipeline(this._pipeline);\n pass.setBindGroup(0, this._bindgroups[level]);\n pass.draw(3, 1, 0, 0);\n pass.end();\n });\n\n this._ctx.device.queue.submit([encoder.finish()]);\n }\n}","/**\n * Convert a JavaScript number (float32) to IEEE 754 binary16 (float16) representation.\n * Returns the 16-bit unsigned integer bit pattern for the half-float.\n */\nexport function float32ToFloat16(value: number): number {\n // This is a compact implementation adapted for correctness.\n const f32 = new Float32Array(1);\n f32[0] = value;\n const f32u = new Uint32Array(f32.buffer)[0];\n\n const sign = (f32u >> 16) & 0x8000;\n const exponent = ((f32u >> 23) & 0xff) - 127;\n const mantissa = f32u & 0x007fffff;\n\n if (exponent <= -15) {\n // Too small to be represented as a normalized half-float -> zero or subnormal\n // Round-to-zero behavior\n return sign;\n }\n\n if (exponent > 16) {\n // Overflow -> return Infinity\n return sign | 0x7c00;\n }\n\n const halfExp = exponent + 15;\n const halfMant = mantissa >> 13;\n return sign | (halfExp << 10) | halfMant;\n}","/**\n * Maps undefined values to undefined and non-undefined values to the result of fn. Similar to Rust's `Option<T>::map`.\n * @param value The value to map.\n * @param fn The mapping function.\n */\nexport function mapUndefined<T, U>(value: T | undefined, fn: (val: T) => U): U | undefined {\n if (value === undefined) {\n return undefined;\n }\n return fn(value);\n}","/**\n * Pad an ArrayBuffer (or SharedArrayBuffer) to the given alignment in bytes.\n * If the input is already aligned, the original buffer is returned. Otherwise a\n * new buffer is allocated, the contents copied, and the new buffer returned.\n *\n * @param input - The input ArrayBuffer or SharedArrayBuffer to pad\n * @param alignment - Desired byte alignment (e.g. 4 for 32-bit alignment)\n * @param offset - The offset in bytes from the start of the input buffer to begin copying from\n * @param size - The number of bytes to copy from the input buffer\n * @returns A buffer with byteLength rounded up to the nearest multiple of alignment\n */\nexport function padArrayBuffer(input: ArrayBuffer | SharedArrayBuffer, alignment: number, offset: number, size: number): ArrayBuffer | SharedArrayBuffer {\n const targetSize = Math.ceil(size / alignment) * alignment;\n const needsSlice = offset !== 0 || size !== input.byteLength;\n if (!needsSlice && targetSize === size) return input;\n const data = input instanceof ArrayBuffer ? new ArrayBuffer(targetSize) : new SharedArrayBuffer(targetSize);\n const src = new Uint8Array(input, offset, size);\n const dst = new Uint8Array(data);\n dst.set(src);\n return data;\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * tiny-helix: A TypeScript library for WebGPU\n * @packageDocumentation\n */\n\nexport {TinyHelix, type TinyHelixOptions} from \"./TinyHelix\";\nexport {WebGPUContext, type WebGPUContextOptions} from \"./WebGPUContext\";\n\n// Default export for convenience\nimport {TinyHelix} from \"./TinyHelix\";\n\nexport default TinyHelix;\n\nexport * from \"./BindGroup\";\nexport * from \"./BlendMode\";\nexport * from \"./CommandEncoder\";\nexport * from \"./ComputePass\";\nexport * from \"./ComputePipeline\";\nexport * from \"./enums\";\nexport * from \"./Mesh\";\nexport * from \"./RenderPass\";\nexport * from \"./RenderPipeline\";\nexport * from \"./RenderTarget\";\nexport * from \"./Sampler\";\nexport * from \"./Shader\";\nexport * from \"./Texture\";\nexport * from \"./buffers/Buffer\";\nexport * from \"./buffers/UniformBuffer\";\nexport * from \"./buffers/BufferDataWriter\"\n"],"names":[],"ignoreList":[],"sourceRoot":""}