@luma.gl/webgpu 9.0.0-alpha.3 → 9.0.0-alpha.31
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.
- package/LICENSE +2 -1
- package/dist/adapter/helpers/accessor-to-format.js.map +1 -1
- package/dist/adapter/helpers/convert-texture-format.d.ts +2 -2
- package/dist/adapter/helpers/convert-texture-format.d.ts.map +1 -1
- package/dist/adapter/helpers/convert-texture-format.js +0 -1
- package/dist/adapter/helpers/convert-texture-format.js.map +1 -1
- package/dist/adapter/helpers/generate-mipmaps.d.ts +1 -1
- package/dist/adapter/helpers/generate-mipmaps.js +1 -8
- package/dist/adapter/helpers/generate-mipmaps.js.map +1 -1
- package/dist/adapter/helpers/get-bind-group.d.ts +4 -4
- package/dist/adapter/helpers/get-bind-group.d.ts.map +1 -1
- package/dist/adapter/helpers/get-bind-group.js +7 -16
- package/dist/adapter/helpers/get-bind-group.js.map +1 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts +5 -5
- package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-vertex-buffer-layout.js +26 -34
- package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.d.ts +2 -2
- package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
- package/dist/adapter/helpers/webgpu-parameters.js +50 -47
- package/dist/adapter/helpers/webgpu-parameters.js.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.d.ts +4 -5
- package/dist/adapter/resources/webgpu-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-buffer.js +13 -27
- package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.d.ts +6 -15
- package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-command-encoder.js +9 -26
- package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.d.ts +6 -6
- package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pass.js +12 -24
- package/dist/adapter/resources/webgpu-compute-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts +4 -4
- package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-compute-pipeline.js +4 -8
- package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-external-texture.d.ts +5 -5
- package/dist/adapter/resources/webgpu-external-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-external-texture.js +3 -10
- package/dist/adapter/resources/webgpu-external-texture.js.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.d.ts +4 -21
- package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-framebuffer.js +3 -103
- package/dist/adapter/resources/webgpu-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgpu-query.js.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.d.ts +12 -7
- package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pass.js +37 -32
- package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts +11 -6
- package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-render-pipeline.js +33 -48
- package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.d.ts +5 -5
- package/dist/adapter/resources/webgpu-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-sampler.js +9 -8
- package/dist/adapter/resources/webgpu-sampler.js.map +1 -1
- package/dist/adapter/resources/webgpu-shader.d.ts +7 -7
- package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-shader.js +6 -19
- package/dist/adapter/resources/webgpu-shader.js.map +1 -1
- package/dist/adapter/resources/webgpu-texture.d.ts +15 -8
- package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgpu-texture.js +13 -22
- package/dist/adapter/resources/webgpu-texture.js.map +1 -1
- package/dist/adapter/webgpu-canvas-context.d.ts +8 -10
- package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgpu-canvas-context.js +11 -32
- package/dist/adapter/webgpu-canvas-context.js.map +1 -1
- package/dist/adapter/webgpu-device.d.ts +35 -22
- package/dist/adapter/webgpu-device.d.ts.map +1 -1
- package/dist/adapter/webgpu-device.js +74 -73
- package/dist/adapter/webgpu-device.js.map +1 -1
- package/dist/adapter/webgpu-types.js.map +1 -1
- package/dist/dist.dev.js +3264 -0
- package/dist/glsl/glsllang.js +0 -1
- package/dist/glsl/glsllang.js.map +1 -1
- package/dist/index.cjs +1448 -0
- package/dist/index.d.ts +5 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -7
- package/dist/index.js.map +1 -1
- package/dist.min.js +17 -0
- package/package.json +18 -9
- package/src/adapter/helpers/accessor-to-format.ts +2 -2
- package/src/adapter/helpers/convert-texture-format.ts +1 -1
- package/src/adapter/helpers/generate-mipmaps.ts +1 -1
- package/src/adapter/helpers/get-bind-group.ts +22 -12
- package/src/adapter/helpers/get-vertex-buffer-layout.ts +49 -29
- package/src/adapter/helpers/webgpu-parameters.ts +56 -47
- package/src/adapter/resources/webgpu-buffer.ts +6 -10
- package/src/adapter/resources/webgpu-command-encoder.ts +62 -41
- package/src/adapter/resources/webgpu-compute-pass.ts +13 -13
- package/src/adapter/resources/webgpu-compute-pipeline.ts +6 -5
- package/src/adapter/resources/webgpu-external-texture.ts +5 -5
- package/src/adapter/resources/webgpu-framebuffer.ts +8 -109
- package/src/adapter/resources/webgpu-query.ts +3 -3
- package/src/adapter/resources/webgpu-render-pass.ts +50 -17
- package/src/adapter/resources/webgpu-render-pipeline.ts +46 -22
- package/src/adapter/resources/webgpu-sampler.ts +12 -5
- package/src/adapter/resources/webgpu-shader.ts +11 -9
- package/src/adapter/resources/webgpu-texture.ts +15 -8
- package/src/adapter/webgpu-canvas-context.ts +20 -15
- package/src/adapter/webgpu-device.ts +136 -54
- package/src/index.ts +6 -9
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/bundle.js.map +0 -1
- package/dist/init.d.ts +0 -2
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -4
- package/dist/init.js.map +0 -1
- package/src/bundle.ts +0 -4
- package/src/init.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapter/resources/webgpu-render-pass.ts"],"names":["RenderPass","cast","WebGPURenderPass","constructor","device","props","framebuffer","canvasContext","getCurrentFramebuffer","renderPassDescriptor","handle","commandEncoder","beginRenderPass","label","id","destroy","endPass","setPipeline","pipeline","setBindings","bindings","setBindGroup","_getBindGroup","setIndexBuffer","buffer","indexFormat","offset","size","setVertexBuffer","slot","draw","options","indexCount","drawIndexed","instanceCount","firstIndex","baseVertex","firstInstance","vertexCount","drawIndirect","setParameters","parameters","blendConstant","stencilReference","scissorRect","viewport","setBlendConstant","setStencilReference","setScissorRect","setViewport","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"mappings":"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","sourcesContent":["import type {RenderPassProps, RenderPassParameters, Binding} from '@luma.gl/api';\nimport {Buffer, RenderPass, RenderPipeline, cast, log} from '@luma.gl/api';\nimport WebGPUDevice from '../webgpu-device';\nimport WebGPUBuffer from './webgpu-buffer';\n// import WebGPUCommandEncoder from './webgpu-command-encoder';\nimport WebGPURenderPipeline from './webgpu-render-pipeline';\n\nexport default class WebGPURenderPass extends RenderPass {\n readonly device: WebGPUDevice;\n readonly handle: GPURenderPassEncoder;\n\n /** Active pipeline */\n pipeline: WebGPURenderPipeline | null = null;\n\n constructor(device: WebGPUDevice, props: RenderPassProps = {}) {\n super(device, props);\n this.device = device;\n const framebuffer = props.framebuffer || device.canvasContext.getCurrentFramebuffer();\n // @ts-expect-error\n const renderPassDescriptor = framebuffer.renderPassDescriptor;\n this.handle = this.props.handle || device.commandEncoder.beginRenderPass(renderPassDescriptor);\n this.handle.label = this.props.id;\n }\n\n destroy() {}\n\n endPass(): void {\n this.handle.endPass();\n }\n\n setPipeline(pipeline: RenderPipeline): void {\n this.pipeline = cast<WebGPURenderPipeline>(pipeline);\n this.handle.setPipeline(this.pipeline.handle);\n }\n\n /** Sets an array of bindings (uniform buffers, samplers, textures, ...) */\n setBindings(bindings: Record<string, Binding>): void {\n this.pipeline.setBindings(bindings);\n this.handle.setBindGroup(0, this.pipeline._getBindGroup());\n }\n\n setIndexBuffer(\n buffer: Buffer,\n indexFormat: GPUIndexFormat,\n offset: number = 0,\n size?: number\n ): void {\n this.handle.setIndexBuffer(cast<WebGPUBuffer>(buffer).handle, indexFormat, offset, size);\n }\n\n setVertexBuffer(slot: number, buffer: Buffer, offset: number = 0): void {\n this.handle.setVertexBuffer(slot, cast<WebGPUBuffer>(buffer).handle, offset);\n }\n\n draw(options: {\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): void {\n if (options.indexCount) {\n this.handle.drawIndexed(\n options.indexCount,\n options.instanceCount,\n options.firstIndex,\n options.baseVertex,\n options.firstInstance\n );\n } else {\n this.handle.draw(\n options.vertexCount,\n options.instanceCount,\n options.firstIndex,\n options.firstInstance\n );\n }\n }\n\n drawIndirect(): void {\n // drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;\n // drawIndexedIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;\n }\n\n setParameters(parameters: RenderPassParameters): void {\n const {blendConstant, stencilReference, scissorRect, viewport} = parameters;\n if (blendConstant) {\n this.handle.setBlendConstant(blendConstant);\n }\n if (stencilReference) {\n this.handle.setStencilReference(stencilReference);\n }\n if (scissorRect) {\n this.handle.setScissorRect(scissorRect[0], scissorRect[1], scissorRect[2], scissorRect[3]);\n }\n // TODO - explain how 3 dimensions vs 2 in WebGL works.\n if (viewport) {\n this.handle.setViewport(\n viewport[0],\n viewport[1],\n viewport[2],\n viewport[3],\n viewport[4],\n viewport[5]\n );\n }\n }\n\n pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n // beginPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n // endPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n}\n"],"file":"webgpu-render-pass.js"}
|
|
1
|
+
{"version":3,"file":"webgpu-render-pass.js","names":["RenderPass","cast","WebGPURenderPass","constructor","device","props","arguments","length","undefined","_defineProperty","framebuffer","canvasContext","getCurrentFramebuffer","renderPassDescriptor","getRenderPassDescriptor","handle","commandEncoder","beginRenderPass","label","id","destroy","end","setPipeline","pipeline","setBindings","bindings","_this$pipeline","_this$pipeline2","bindGroup","_getBindGroup","setBindGroup","setIndexBuffer","buffer","indexFormat","offset","size","setVertexBuffer","slot","draw","options","indexCount","drawIndexed","instanceCount","firstIndex","baseVertex","firstInstance","vertexCount","drawIndirect","setParameters","parameters","blendConstant","stencilReference","scissorRect","viewport","setBlendConstant","setStencilReference","setScissorRect","setViewport","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel","colorAttachments","map","colorAttachment","loadOp","colorClearValue","clearColor","storeOp","discard","view","createView","depthStencilAttachment"],"sources":["../../../src/adapter/resources/webgpu-render-pass.ts"],"sourcesContent":["import type {RenderPassProps, RenderPassParameters, Binding, Framebuffer} from '@luma.gl/core';\nimport {Buffer, RenderPass, RenderPipeline, cast} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\nimport {WebGPUTexture} from './webgpu-texture';\n// import {WebGPUCommandEncoder} from './webgpu-command-encoder';\nimport {WebGPURenderPipeline} from './webgpu-render-pipeline';\n\nexport class WebGPURenderPass extends RenderPass {\n readonly device: WebGPUDevice;\n readonly handle: GPURenderPassEncoder;\n\n /** Active pipeline */\n pipeline: WebGPURenderPipeline | null = null;\n\n constructor(device: WebGPUDevice, props: RenderPassProps = {}) {\n super(device, props);\n this.device = device;\n const framebuffer = props.framebuffer || device.canvasContext.getCurrentFramebuffer() ;\n const renderPassDescriptor = this.getRenderPassDescriptor(framebuffer);\n this.handle = this.props.handle || device.commandEncoder.beginRenderPass(renderPassDescriptor);\n this.handle.label = this.props.id;\n }\n\n override destroy(): void {}\n\n end(): void {\n this.handle.end();\n }\n\n setPipeline(pipeline: RenderPipeline): void {\n this.pipeline = cast<WebGPURenderPipeline>(pipeline);\n this.handle.setPipeline(this.pipeline.handle);\n }\n\n /** Sets an array of bindings (uniform buffers, samplers, textures, ...) */\n setBindings(bindings: Record<string, Binding>): void {\n this.pipeline?.setBindings(bindings);\n const bindGroup = this.pipeline?._getBindGroup();\n if (bindGroup) {\n this.handle.setBindGroup(0, bindGroup);\n }\n }\n\n setIndexBuffer(\n buffer: Buffer,\n indexFormat: GPUIndexFormat,\n offset: number = 0,\n size?: number\n ): void {\n this.handle.setIndexBuffer(cast<WebGPUBuffer>(buffer).handle, indexFormat, offset, size);\n }\n\n setVertexBuffer(slot: number, buffer: Buffer, offset: number = 0): void {\n this.handle.setVertexBuffer(slot, cast<WebGPUBuffer>(buffer).handle, offset);\n }\n\n draw(options: {\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): void {\n if (options.indexCount) {\n this.handle.drawIndexed(\n options.indexCount,\n options.instanceCount,\n options.firstIndex,\n options.baseVertex,\n options.firstInstance\n );\n } else {\n this.handle.draw(\n options.vertexCount || 0,\n options.instanceCount,\n options.firstIndex,\n options.firstInstance\n );\n }\n }\n\n drawIndirect(): void {\n // drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;\n // drawIndexedIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;\n }\n\n setParameters(parameters: RenderPassParameters): void {\n const {blendConstant, stencilReference, scissorRect, viewport} = parameters;\n if (blendConstant) {\n this.handle.setBlendConstant(blendConstant);\n }\n if (stencilReference) {\n this.handle.setStencilReference(stencilReference);\n }\n if (scissorRect) {\n this.handle.setScissorRect(scissorRect[0], scissorRect[1], scissorRect[2], scissorRect[3]);\n }\n // TODO - explain how 3 dimensions vs 2 in WebGL works.\n if (viewport) {\n this.handle.setViewport(\n viewport[0],\n viewport[1],\n viewport[2],\n viewport[3],\n viewport[4],\n viewport[5]\n );\n }\n }\n\n pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n // beginPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n // endPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n\n // INTERNAL\n\n /** \n * Partial render pass descriptor. Used by WebGPURenderPass.\n * @returns attachments fields of a renderpass descriptor. \n */\n protected getRenderPassDescriptor(framebuffer: Framebuffer): GPURenderPassDescriptor {\n const renderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: []\n };\n\n renderPassDescriptor.colorAttachments = framebuffer.colorAttachments.map(colorAttachment => ({\n // clear values\n loadOp: 'clear',\n colorClearValue: this.props.clearColor || [0, 0, 0, 0],\n storeOp: this.props.discard? 'discard': 'store',\n // ...colorAttachment,\n view: (colorAttachment as WebGPUTexture).handle.createView()\n }));\n\n if (framebuffer.depthStencilAttachment) {\n renderPassDescriptor.depthStencilAttachment = {\n ...this.props,\n view: (framebuffer.depthStencilAttachment as WebGPUTexture).handle.createView()\n };\n }\n\n return renderPassDescriptor;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
/// <reference types="
|
|
2
|
-
import type { Binding, RenderPass } from '@luma.gl/
|
|
3
|
-
import { Buffer, RenderPipeline, RenderPipelineProps } from '@luma.gl/
|
|
4
|
-
import type WebGPUDevice from '../webgpu-device';
|
|
5
|
-
import type
|
|
1
|
+
/// <reference types="dist" />
|
|
2
|
+
import type { Binding, RenderPass, TypedArray } from '@luma.gl/core';
|
|
3
|
+
import { Buffer, RenderPipeline, RenderPipelineProps } from '@luma.gl/core';
|
|
4
|
+
import type { WebGPUDevice } from '../webgpu-device';
|
|
5
|
+
import type { WebGPUShader } from './webgpu-shader';
|
|
6
|
+
import type { WebGPURenderPass } from './webgpu-render-pass';
|
|
6
7
|
/** Creates a new render pipeline when parameters change */
|
|
7
|
-
export
|
|
8
|
+
export declare class WebGPURenderPipeline extends RenderPipeline {
|
|
8
9
|
device: WebGPUDevice;
|
|
9
10
|
handle: GPURenderPipeline;
|
|
11
|
+
vs: WebGPUShader;
|
|
12
|
+
fs: WebGPUShader | null;
|
|
10
13
|
private _bufferSlots;
|
|
11
14
|
private _buffers;
|
|
12
15
|
private _indexBuffer;
|
|
@@ -18,6 +21,8 @@ export default class WebGPURenderPipeline extends RenderPipeline {
|
|
|
18
21
|
destroy(): void;
|
|
19
22
|
setIndexBuffer(indexBuffer: Buffer): void;
|
|
20
23
|
setAttributes(attributes: Record<string, Buffer>): void;
|
|
24
|
+
/** Constant attributes are not available in WebGPU */
|
|
25
|
+
setConstantAttributes(attributes: Record<string, TypedArray>): void;
|
|
21
26
|
/** Set the bindings */
|
|
22
27
|
setBindings(bindings: Record<string, Binding>): void;
|
|
23
28
|
setUniforms(uniforms: Record<string, any>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-render-pipeline.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"webgpu-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-render-pipeline.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACnE,OAAO,EAAC,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAA2B,MAAM,eAAe,CAAC;AASpG,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAI3D,2DAA2D;AAC3D,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAE1B,EAAE,EAAE,YAAY,CAAC;IACjB,EAAE,EAAE,YAAY,GAAG,IAAI,CAAQ;IAE/B,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAA6B;IAIjD,4CAA4C;IAC5C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAA6B;gBAEnC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB;IAc5D,SAAS,CAAC,YAAY,IAAI,iBAAiB;IASlC,OAAO,IAAI,IAAI;IAIxB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAmBvD,sDAAsD;IACtD,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI;IAInE,uBAAuB;IACvB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAapD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMhD,WAAW;IAIX,iDAAiD;IACjD,aAAa;IAKb,8DAA8D;IAC9D,SAAS,CAAC,4BAA4B;IA+CtC,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI;IAmCR,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB;CAwCxD"}
|
|
@@ -1,55 +1,45 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
import { RenderPipeline, cast, log, isObjectEmpty } from '@luma.gl/
|
|
3
|
-
import { applyParametersToRenderPipelineDescriptor } from
|
|
4
|
-
import { getWebGPUTextureFormat } from
|
|
5
|
-
import { getBindGroup } from
|
|
6
|
-
import { getVertexBufferLayout, getBufferSlots } from
|
|
7
|
-
export
|
|
2
|
+
import { RenderPipeline, cast, log, isObjectEmpty } from '@luma.gl/core';
|
|
3
|
+
import { applyParametersToRenderPipelineDescriptor } from "../helpers/webgpu-parameters.js";
|
|
4
|
+
import { getWebGPUTextureFormat } from "../helpers/convert-texture-format.js";
|
|
5
|
+
import { getBindGroup } from "../helpers/get-bind-group.js";
|
|
6
|
+
import { getVertexBufferLayout, getBufferSlots } from "../helpers/get-vertex-buffer-layout.js";
|
|
7
|
+
export class WebGPURenderPipeline extends RenderPipeline {
|
|
8
8
|
constructor(device, props) {
|
|
9
9
|
super(device, props);
|
|
10
|
-
|
|
11
10
|
_defineProperty(this, "device", void 0);
|
|
12
|
-
|
|
13
11
|
_defineProperty(this, "handle", void 0);
|
|
14
|
-
|
|
12
|
+
_defineProperty(this, "vs", void 0);
|
|
13
|
+
_defineProperty(this, "fs", null);
|
|
15
14
|
_defineProperty(this, "_bufferSlots", void 0);
|
|
16
|
-
|
|
17
15
|
_defineProperty(this, "_buffers", void 0);
|
|
18
|
-
|
|
19
|
-
_defineProperty(this, "_indexBuffer", void 0);
|
|
20
|
-
|
|
16
|
+
_defineProperty(this, "_indexBuffer", null);
|
|
21
17
|
_defineProperty(this, "_bindGroupLayout", void 0);
|
|
22
|
-
|
|
23
18
|
_defineProperty(this, "_bindGroup", null);
|
|
24
|
-
|
|
25
19
|
this.device = device;
|
|
26
20
|
this.handle = this.props.handle || this.createHandle();
|
|
27
21
|
this.handle.label = this.props.id;
|
|
28
|
-
this.
|
|
22
|
+
this.vs = cast(props.vs);
|
|
23
|
+
this.fs = cast(props.fs);
|
|
24
|
+
this._bufferSlots = getBufferSlots(this.props.shaderLayout, this.props.bufferLayout);
|
|
29
25
|
this._buffers = new Array(Object.keys(this._bufferSlots).length).fill(null);
|
|
30
26
|
this._bindGroupLayout = this.handle.getBindGroupLayout(0);
|
|
31
27
|
}
|
|
32
|
-
|
|
33
28
|
createHandle() {
|
|
34
29
|
const descriptor = this._getRenderPipelineDescriptor();
|
|
35
|
-
|
|
36
30
|
const renderPipeline = this.device.handle.createRenderPipeline(descriptor);
|
|
37
31
|
log.groupCollapsed(1, "new WebGPRenderPipeline(".concat(this.id, ")"))();
|
|
38
32
|
log.log(1, JSON.stringify(descriptor, null, 2))();
|
|
39
33
|
log.groupEnd(1)();
|
|
40
34
|
return renderPipeline;
|
|
41
35
|
}
|
|
42
|
-
|
|
43
36
|
destroy() {}
|
|
44
|
-
|
|
45
37
|
setIndexBuffer(indexBuffer) {
|
|
46
38
|
this._indexBuffer = cast(indexBuffer);
|
|
47
39
|
}
|
|
48
|
-
|
|
49
40
|
setAttributes(attributes) {
|
|
50
41
|
for (const [name, buffer] of Object.entries(attributes)) {
|
|
51
42
|
const bufferIndex = this._bufferSlots[name];
|
|
52
|
-
|
|
53
43
|
if (bufferIndex >= 0) {
|
|
54
44
|
this._buffers[bufferIndex] = buffer;
|
|
55
45
|
} else {
|
|
@@ -57,92 +47,87 @@ export default class WebGPURenderPipeline extends RenderPipeline {
|
|
|
57
47
|
}
|
|
58
48
|
}
|
|
59
49
|
}
|
|
60
|
-
|
|
50
|
+
setConstantAttributes(attributes) {
|
|
51
|
+
throw new Error('not implemented');
|
|
52
|
+
}
|
|
61
53
|
setBindings(bindings) {
|
|
62
54
|
if (!isObjectEmpty(this.props.bindings)) {
|
|
63
55
|
Object.assign(this.props.bindings, bindings);
|
|
64
|
-
this._bindGroup = getBindGroup(this.device.handle, this._bindGroupLayout, this.props.
|
|
56
|
+
this._bindGroup = getBindGroup(this.device.handle, this._bindGroupLayout, this.props.shaderLayout, this.props.bindings);
|
|
65
57
|
}
|
|
66
58
|
}
|
|
67
|
-
|
|
68
59
|
setUniforms(uniforms) {
|
|
69
60
|
if (!isObjectEmpty(uniforms)) {
|
|
70
61
|
throw new Error('WebGPU does not support uniforms');
|
|
71
62
|
}
|
|
72
63
|
}
|
|
73
|
-
|
|
74
64
|
_getBuffers() {
|
|
75
65
|
return this._buffers;
|
|
76
66
|
}
|
|
77
|
-
|
|
78
67
|
_getBindGroup() {
|
|
79
68
|
return this._bindGroup;
|
|
80
69
|
}
|
|
81
|
-
|
|
82
70
|
_getRenderPipelineDescriptor() {
|
|
83
71
|
const vertex = {
|
|
84
72
|
module: cast(this.props.vs).handle,
|
|
85
73
|
entryPoint: this.props.vsEntryPoint || 'main',
|
|
86
|
-
buffers: getVertexBufferLayout(this.props.
|
|
74
|
+
buffers: getVertexBufferLayout(this.props.shaderLayout, this.props.bufferLayout)
|
|
87
75
|
};
|
|
88
76
|
let fragment;
|
|
89
|
-
|
|
90
77
|
if (this.props.fs) {
|
|
78
|
+
var _this$device;
|
|
91
79
|
fragment = {
|
|
92
80
|
module: cast(this.props.fs).handle,
|
|
93
81
|
entryPoint: this.props.fsEntryPoint || 'main',
|
|
94
82
|
targets: [{
|
|
95
|
-
format: getWebGPUTextureFormat(this.device.canvasContext.format)
|
|
83
|
+
format: getWebGPUTextureFormat((_this$device = this.device) === null || _this$device === void 0 || (_this$device = _this$device.canvasContext) === null || _this$device === void 0 ? void 0 : _this$device.format)
|
|
96
84
|
}]
|
|
97
85
|
};
|
|
98
86
|
}
|
|
99
|
-
|
|
100
|
-
|
|
87
|
+
switch (this.props.topology) {
|
|
88
|
+
case 'triangle-fan-webgl':
|
|
89
|
+
case 'line-loop-webgl':
|
|
90
|
+
throw new Error("WebGPU does not support primitive topology ".concat(this.props.topology));
|
|
91
|
+
default:
|
|
92
|
+
}
|
|
93
|
+
const descriptor = {
|
|
101
94
|
vertex,
|
|
102
95
|
fragment,
|
|
103
96
|
primitive: {
|
|
104
97
|
topology: this.props.topology
|
|
105
|
-
}
|
|
98
|
+
},
|
|
99
|
+
layout: 'auto'
|
|
106
100
|
};
|
|
107
101
|
applyParametersToRenderPipelineDescriptor(descriptor, this.props.parameters);
|
|
108
102
|
return descriptor;
|
|
109
103
|
}
|
|
110
|
-
|
|
111
104
|
draw(options) {
|
|
112
105
|
const webgpuRenderPass = cast(options.renderPass) || this.device.getDefaultRenderPass();
|
|
113
106
|
webgpuRenderPass.handle.setPipeline(this.handle);
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
webgpuRenderPass.handle.setBindGroup(0,
|
|
107
|
+
const bindGroup = this._getBindGroup();
|
|
108
|
+
if (bindGroup) {
|
|
109
|
+
webgpuRenderPass.handle.setBindGroup(0, bindGroup);
|
|
117
110
|
}
|
|
118
|
-
|
|
119
111
|
this._setAttributeBuffers(webgpuRenderPass);
|
|
120
|
-
|
|
121
112
|
if (options.indexCount) {
|
|
122
113
|
webgpuRenderPass.handle.drawIndexed(options.indexCount, options.instanceCount, options.firstIndex, options.baseVertex, options.firstInstance);
|
|
123
114
|
} else {
|
|
124
|
-
webgpuRenderPass.handle.draw(options.vertexCount, options.instanceCount, options.firstIndex, options.firstInstance);
|
|
115
|
+
webgpuRenderPass.handle.draw(options.vertexCount || 0, options.instanceCount, options.firstIndex, options.firstInstance);
|
|
125
116
|
}
|
|
126
117
|
}
|
|
127
|
-
|
|
128
118
|
_setAttributeBuffers(webgpuRenderPass) {
|
|
129
119
|
if (this._indexBuffer) {
|
|
130
120
|
webgpuRenderPass.handle.setIndexBuffer(this._indexBuffer.handle, this._indexBuffer.props.indexType);
|
|
131
121
|
}
|
|
132
|
-
|
|
133
122
|
const buffers = this._getBuffers();
|
|
134
|
-
|
|
135
123
|
for (let i = 0; i < buffers.length; ++i) {
|
|
136
124
|
const buffer = cast(buffers[i]);
|
|
137
|
-
|
|
138
125
|
if (!buffer) {
|
|
139
|
-
const attribute = this.props.
|
|
126
|
+
const attribute = this.props.shaderLayout.attributes.find(attribute => attribute.location === i);
|
|
140
127
|
throw new Error("No buffer provided for attribute '".concat((attribute === null || attribute === void 0 ? void 0 : attribute.name) || '', "' in Model '").concat(this.props.id, "'"));
|
|
141
128
|
}
|
|
142
|
-
|
|
143
129
|
webgpuRenderPass.handle.setVertexBuffer(i, buffer.handle);
|
|
144
130
|
}
|
|
145
131
|
}
|
|
146
|
-
|
|
147
132
|
}
|
|
148
133
|
//# sourceMappingURL=webgpu-render-pipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapter/resources/webgpu-render-pipeline.ts"],"names":["RenderPipeline","cast","log","isObjectEmpty","applyParametersToRenderPipelineDescriptor","getWebGPUTextureFormat","getBindGroup","getVertexBufferLayout","getBufferSlots","WebGPURenderPipeline","constructor","device","props","handle","createHandle","label","id","_bufferSlots","layout","bufferMap","_buffers","Array","Object","keys","length","fill","_bindGroupLayout","getBindGroupLayout","descriptor","_getRenderPipelineDescriptor","renderPipeline","createRenderPipeline","groupCollapsed","JSON","stringify","groupEnd","destroy","setIndexBuffer","indexBuffer","_indexBuffer","setAttributes","attributes","name","buffer","entries","bufferIndex","Error","setBindings","bindings","assign","_bindGroup","setUniforms","uniforms","_getBuffers","_getBindGroup","vertex","module","vs","entryPoint","vsEntryPoint","buffers","fragment","fs","fsEntryPoint","targets","format","canvasContext","primitive","topology","parameters","draw","options","webgpuRenderPass","renderPass","getDefaultRenderPass","setPipeline","setBindGroup","_setAttributeBuffers","indexCount","drawIndexed","instanceCount","firstIndex","baseVertex","firstInstance","vertexCount","indexType","i","attribute","find","location","setVertexBuffer"],"mappings":"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","sourcesContent":["import type {Binding, RenderPass} from '@luma.gl/api';\nimport {Buffer, RenderPipeline, RenderPipelineProps, cast, log, isObjectEmpty} from '@luma.gl/api';\nimport {applyParametersToRenderPipelineDescriptor} from '../helpers/webgpu-parameters';\nimport {getWebGPUTextureFormat} from '../helpers/convert-texture-format';\nimport {getBindGroup} from '../helpers/get-bind-group';\nimport {getVertexBufferLayout, getBufferSlots} from '../helpers/get-vertex-buffer-layout';\n// import {convertAttributesVertexBufferToLayout} from '../helpers/get-vertex-buffer-layout';\n// import {mapAccessorToWebGPUFormat} from './helpers/accessor-to-format';\n// import type {BufferAccessors} from './webgpu-pipeline';\n\nimport type WebGPUDevice from '../webgpu-device';\nimport type WebGPUBuffer from './webgpu-buffer';\nimport type WebGPUShader from './webgpu-shader';\nimport type WebGPURenderPass from './webgpu-render-pass';\n\n// RENDER PIPELINE\n\n/** Creates a new render pipeline when parameters change */\nexport default class WebGPURenderPipeline extends RenderPipeline {\n device: WebGPUDevice;\n handle: GPURenderPipeline;\n\n private _bufferSlots: Record<string, number>;\n private _buffers: Buffer[];\n private _indexBuffer: WebGPUBuffer;\n // private _firstIndex: number;\n // private _lastIndex: number;\n\n /** For internal use to create BindGroups */\n private _bindGroupLayout: GPUBindGroupLayout;\n private _bindGroup: GPUBindGroup = null;\n\n constructor(device: WebGPUDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = (this.props.handle as GPURenderPipeline) || this.createHandle();\n this.handle.label = this.props.id;\n\n this._bufferSlots = getBufferSlots(this.props.layout, this.props.bufferMap);\n this._buffers = new Array<Buffer>(Object.keys(this._bufferSlots).length).fill(null);\n this._bindGroupLayout = this.handle.getBindGroupLayout(0);\n }\n\n protected createHandle(): GPURenderPipeline {\n const descriptor = this._getRenderPipelineDescriptor();\n const renderPipeline = this.device.handle.createRenderPipeline(descriptor);\n log.groupCollapsed(1, `new WebGPRenderPipeline(${this.id})`)();\n log.log(1, JSON.stringify(descriptor, null, 2))();\n log.groupEnd(1)();\n return renderPipeline;\n }\n\n destroy() {\n // WebGPURenderPipeline has no destroy method.\n }\n\n setIndexBuffer(indexBuffer: Buffer): void {\n this._indexBuffer = cast<WebGPUBuffer>(indexBuffer);\n }\n\n setAttributes(attributes: Record<string, Buffer>): void {\n for (const [name, buffer] of Object.entries(attributes)) {\n const bufferIndex = this._bufferSlots[name];\n if (bufferIndex >= 0) {\n this._buffers[bufferIndex] = buffer;\n } else {\n throw new Error(\n `Setting attribute '${name}' not listed in shader layout for program ${this.id}`\n );\n }\n }\n // for (let i = 0; i < this._bufferSlots.length; ++i) {\n // const bufferName = this._bufferSlots[i];\n // if (attributes[bufferName]) {\n // this.handle\n // }\n // }\n }\n\n /** Set the bindings */\n setBindings(bindings: Record<string, Binding>): void {\n if (!isObjectEmpty(this.props.bindings)) {\n Object.assign(this.props.bindings, bindings);\n // Set up the bindings\n this._bindGroup = getBindGroup(\n this.device.handle,\n this._bindGroupLayout,\n this.props.layout,\n this.props.bindings\n );\n }\n }\n\n setUniforms(uniforms: Record<string, any>): void {\n if (!isObjectEmpty(uniforms)) {\n throw new Error('WebGPU does not support uniforms');\n }\n }\n\n _getBuffers() {\n return this._buffers;\n }\n\n /** Return a bind group created by setBindings */\n _getBindGroup() {\n // assert(this._bindGroup);\n return this._bindGroup;\n }\n\n /** Populate the complex WebGPU GPURenderPipelineDescriptor */\n protected _getRenderPipelineDescriptor() {\n // Set up the vertex stage\n const vertex: GPUVertexState = {\n module: cast<WebGPUShader>(this.props.vs).handle,\n entryPoint: this.props.vsEntryPoint || 'main',\n buffers: getVertexBufferLayout(this.props.layout, this.props.bufferMap)\n };\n\n // Set up the fragment stage\n let fragment: GPUFragmentState | undefined;\n if (this.props.fs) {\n fragment = {\n module: cast<WebGPUShader>(this.props.fs).handle,\n entryPoint: this.props.fsEntryPoint || 'main',\n targets: [\n {\n format: getWebGPUTextureFormat(this.device.canvasContext.format)\n }\n ]\n };\n }\n\n // Create a partially populated descriptor\n let descriptor: GPURenderPipelineDescriptor = {\n vertex,\n fragment,\n primitive: {\n topology: this.props.topology\n }\n };\n\n // Set parameters on the descriptor\n applyParametersToRenderPipelineDescriptor(descriptor, this.props.parameters);\n\n return descriptor;\n }\n\n draw(options: {\n renderPass?: RenderPass;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): void {\n const webgpuRenderPass =\n cast<WebGPURenderPass>(options.renderPass) || this.device.getDefaultRenderPass();\n\n // Set pipeline\n webgpuRenderPass.handle.setPipeline(this.handle);\n\n // Set bindings (uniform buffers, textures etc)\n if (this._getBindGroup()) {\n webgpuRenderPass.handle.setBindGroup(0, this._getBindGroup());\n }\n\n // Set attributes\n this._setAttributeBuffers(webgpuRenderPass);\n\n // Draw\n if (options.indexCount) {\n webgpuRenderPass.handle.drawIndexed(\n options.indexCount,\n options.instanceCount,\n options.firstIndex,\n options.baseVertex,\n options.firstInstance\n );\n } else {\n webgpuRenderPass.handle.draw(\n options.vertexCount,\n options.instanceCount,\n options.firstIndex,\n options.firstInstance\n );\n }\n }\n\n _setAttributeBuffers(webgpuRenderPass: WebGPURenderPass) {\n if (this._indexBuffer) {\n webgpuRenderPass.handle.setIndexBuffer(this._indexBuffer.handle, this._indexBuffer.props.indexType);\n }\n\n const buffers = this._getBuffers();\n for (let i = 0; i < buffers.length; ++i) {\n const buffer = cast<WebGPUBuffer>(buffers[i]);\n if (!buffer) {\n const attribute = this.props.layout.attributes.find(\n (attribute) => attribute.location === i\n );\n throw new Error(\n `No buffer provided for attribute '${attribute?.name || ''}' in Model '${this.props.id}'`\n );\n }\n webgpuRenderPass.handle.setVertexBuffer(i, buffer.handle);\n }\n\n // TODO - HANDLE buffer maps\n /*\n for (const [bufferName, attributeMapping] of Object.entries(this.props.bufferMap)) {\n const buffer = cast<WebGPUBuffer>(this.props.attributes[bufferName]);\n if (!buffer) {\n log.warn(`Missing buffer for buffer map ${bufferName}`)();\n continue;\n }\n\n if ('location' in attributeMapping) {\n // @ts-expect-error TODO model must not depend on webgpu\n renderPass.handle.setVertexBuffer(layout.location, buffer.handle);\n } else {\n for (const [bufferName, mapping] of Object.entries(attributeMapping)) {\n // @ts-expect-error TODO model must not depend on webgpu\n renderPass.handle.setVertexBuffer(field.location, buffer.handle);\n }\n }\n }\n */\n }\n}\n"],"file":"webgpu-render-pipeline.js"}
|
|
1
|
+
{"version":3,"file":"webgpu-render-pipeline.js","names":["RenderPipeline","cast","log","isObjectEmpty","applyParametersToRenderPipelineDescriptor","getWebGPUTextureFormat","getBindGroup","getVertexBufferLayout","getBufferSlots","WebGPURenderPipeline","constructor","device","props","_defineProperty","handle","createHandle","label","id","vs","fs","_bufferSlots","shaderLayout","bufferLayout","_buffers","Array","Object","keys","length","fill","_bindGroupLayout","getBindGroupLayout","descriptor","_getRenderPipelineDescriptor","renderPipeline","createRenderPipeline","groupCollapsed","concat","JSON","stringify","groupEnd","destroy","setIndexBuffer","indexBuffer","_indexBuffer","setAttributes","attributes","name","buffer","entries","bufferIndex","Error","setConstantAttributes","setBindings","bindings","assign","_bindGroup","setUniforms","uniforms","_getBuffers","_getBindGroup","vertex","module","entryPoint","vsEntryPoint","buffers","fragment","_this$device","fsEntryPoint","targets","format","canvasContext","topology","primitive","layout","parameters","draw","options","webgpuRenderPass","renderPass","getDefaultRenderPass","setPipeline","bindGroup","setBindGroup","_setAttributeBuffers","indexCount","drawIndexed","instanceCount","firstIndex","baseVertex","firstInstance","vertexCount","indexType","i","attribute","find","location","setVertexBuffer"],"sources":["../../../src/adapter/resources/webgpu-render-pipeline.ts"],"sourcesContent":["// luma.gl MIT license\n\nimport type {Binding, RenderPass, TypedArray} from '@luma.gl/core';\nimport {Buffer, RenderPipeline, RenderPipelineProps, cast, log, isObjectEmpty} from '@luma.gl/core';\nimport {applyParametersToRenderPipelineDescriptor} from '../helpers/webgpu-parameters';\nimport {getWebGPUTextureFormat} from '../helpers/convert-texture-format';\nimport {getBindGroup} from '../helpers/get-bind-group';\nimport {getVertexBufferLayout, getBufferSlots} from '../helpers/get-vertex-buffer-layout';\n// import {convertAttributesVertexBufferToLayout} from '../helpers/get-vertex-buffer-layout';\n// import {mapAccessorToWebGPUFormat} from './helpers/accessor-to-format';\n// import type {BufferAccessors} from './webgpu-pipeline';\n\nimport type {WebGPUDevice} from '../webgpu-device';\nimport type {WebGPUBuffer} from './webgpu-buffer';\nimport type {WebGPUShader} from './webgpu-shader';\nimport type {WebGPURenderPass} from './webgpu-render-pass';\n\n// RENDER PIPELINE\n\n/** Creates a new render pipeline when parameters change */\nexport class WebGPURenderPipeline extends RenderPipeline {\n device: WebGPUDevice;\n handle: GPURenderPipeline;\n\n vs: WebGPUShader;\n fs: WebGPUShader | null = null;\n\n private _bufferSlots: Record<string, number>;\n private _buffers: Buffer[];\n private _indexBuffer: WebGPUBuffer | null = null;\n // private _firstIndex: number;\n // private _lastIndex: number;\n\n /** For internal use to create BindGroups */\n private _bindGroupLayout: GPUBindGroupLayout;\n private _bindGroup: GPUBindGroup | null = null;\n\n constructor(device: WebGPUDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = (this.props.handle as GPURenderPipeline) || this.createHandle();\n this.handle.label = this.props.id;\n\n this.vs = cast<WebGPUShader>(props.vs);\n this.fs = cast<WebGPUShader>(props.fs);\n\n this._bufferSlots = getBufferSlots(this.props.shaderLayout, this.props.bufferLayout);\n this._buffers = new Array<Buffer>(Object.keys(this._bufferSlots).length).fill(null);\n this._bindGroupLayout = this.handle.getBindGroupLayout(0);\n }\n\n protected createHandle(): GPURenderPipeline {\n const descriptor = this._getRenderPipelineDescriptor();\n const renderPipeline = this.device.handle.createRenderPipeline(descriptor);\n log.groupCollapsed(1, `new WebGPRenderPipeline(${this.id})`)();\n log.log(1, JSON.stringify(descriptor, null, 2))();\n log.groupEnd(1)();\n return renderPipeline;\n }\n\n override destroy(): void {\n // WebGPURenderPipeline has no destroy method.\n }\n\n setIndexBuffer(indexBuffer: Buffer): void {\n this._indexBuffer = cast<WebGPUBuffer>(indexBuffer);\n }\n\n setAttributes(attributes: Record<string, Buffer>): void {\n for (const [name, buffer] of Object.entries(attributes)) {\n const bufferIndex = this._bufferSlots[name];\n if (bufferIndex >= 0) {\n this._buffers[bufferIndex] = buffer;\n } else {\n throw new Error(\n `Setting attribute '${name}' not listed in shader layout for program ${this.id}`\n );\n }\n }\n // for (let i = 0; i < this._bufferSlots.length; ++i) {\n // const bufferName = this._bufferSlots[i];\n // if (attributes[bufferName]) {\n // this.handle\n // }\n // }\n }\n\n /** Constant attributes are not available in WebGPU */\n setConstantAttributes(attributes: Record<string, TypedArray>): void {\n throw new Error('not implemented');\n }\n\n /** Set the bindings */\n setBindings(bindings: Record<string, Binding>): void {\n if (!isObjectEmpty(this.props.bindings)) {\n Object.assign(this.props.bindings, bindings);\n // Set up the bindings\n this._bindGroup = getBindGroup(\n this.device.handle,\n this._bindGroupLayout,\n this.props.shaderLayout,\n this.props.bindings\n );\n }\n }\n\n setUniforms(uniforms: Record<string, any>): void {\n if (!isObjectEmpty(uniforms)) {\n throw new Error('WebGPU does not support uniforms');\n }\n }\n\n _getBuffers() {\n return this._buffers;\n }\n\n /** Return a bind group created by setBindings */\n _getBindGroup() {\n // assert(this._bindGroup);\n return this._bindGroup;\n }\n\n /** Populate the complex WebGPU GPURenderPipelineDescriptor */\n protected _getRenderPipelineDescriptor() {\n // Set up the vertex stage\n const vertex: GPUVertexState = {\n module: cast<WebGPUShader>(this.props.vs).handle,\n entryPoint: this.props.vsEntryPoint || 'main',\n buffers: getVertexBufferLayout(this.props.shaderLayout, this.props.bufferLayout)\n };\n\n // Set up the fragment stage\n let fragment: GPUFragmentState | undefined;\n if (this.props.fs) {\n fragment = {\n module: cast<WebGPUShader>(this.props.fs).handle,\n entryPoint: this.props.fsEntryPoint || 'main',\n targets: [\n {\n // TODO exclamation mark hack!\n format: getWebGPUTextureFormat(this.device?.canvasContext?.format)\n }\n ]\n };\n }\n\n // WebGPU has more restrictive topology support than WebGL\n switch (this.props.topology) {\n case 'triangle-fan-webgl':\n case 'line-loop-webgl':\n throw new Error(`WebGPU does not support primitive topology ${this.props.topology}`);\n default:\n }\n\n // Create a partially populated descriptor\n const descriptor: GPURenderPipelineDescriptor = {\n vertex,\n fragment,\n primitive: {\n topology: this.props.topology\n },\n layout: 'auto'\n };\n\n // Set parameters on the descriptor\n applyParametersToRenderPipelineDescriptor(descriptor, this.props.parameters);\n\n return descriptor;\n }\n\n draw(options: {\n renderPass?: RenderPass;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): void {\n const webgpuRenderPass: WebGPURenderPass =\n cast<WebGPURenderPass>(options.renderPass) || this.device.getDefaultRenderPass();\n\n // Set pipeline\n webgpuRenderPass.handle.setPipeline(this.handle);\n\n // Set bindings (uniform buffers, textures etc)\n const bindGroup = this._getBindGroup();\n if (bindGroup) {\n webgpuRenderPass.handle.setBindGroup(0, bindGroup);\n }\n\n // Set attributes\n this._setAttributeBuffers(webgpuRenderPass);\n\n // Draw\n if (options.indexCount) {\n webgpuRenderPass.handle.drawIndexed(\n options.indexCount,\n options.instanceCount,\n options.firstIndex,\n options.baseVertex,\n options.firstInstance\n );\n } else {\n webgpuRenderPass.handle.draw(\n options.vertexCount || 0,\n options.instanceCount,\n options.firstIndex,\n options.firstInstance\n );\n }\n }\n\n _setAttributeBuffers(webgpuRenderPass: WebGPURenderPass) {\n if (this._indexBuffer) {\n webgpuRenderPass.handle.setIndexBuffer(this._indexBuffer.handle, this._indexBuffer.props.indexType);\n }\n\n const buffers = this._getBuffers();\n for (let i = 0; i < buffers.length; ++i) {\n const buffer = cast<WebGPUBuffer>(buffers[i]);\n if (!buffer) {\n const attribute = this.props.shaderLayout.attributes.find(\n (attribute) => attribute.location === i\n );\n throw new Error(\n `No buffer provided for attribute '${attribute?.name || ''}' in Model '${this.props.id}'`\n );\n }\n webgpuRenderPass.handle.setVertexBuffer(i, buffer.handle);\n }\n\n // TODO - HANDLE buffer maps\n /*\n for (const [bufferName, attributeMapping] of Object.entries(this.props.bufferLayout)) {\n const buffer = cast<WebGPUBuffer>(this.props.attributes[bufferName]);\n if (!buffer) {\n log.warn(`Missing buffer for buffer map ${bufferName}`)();\n continue;\n }\n\n if ('location' in attributeMapping) {\n // @ts-expect-error TODO model must not depend on webgpu\n renderPass.handle.setVertexBuffer(layout.location, buffer.handle);\n } else {\n for (const [bufferName, mapping] of Object.entries(attributeMapping)) {\n // @ts-expect-error TODO model must not depend on webgpu\n renderPass.handle.setVertexBuffer(field.location, buffer.handle);\n }\n }\n }\n */\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/// <reference types="
|
|
2
|
-
import { Sampler, SamplerProps } from '@luma.gl/
|
|
3
|
-
import type WebGPUDevice from '../webgpu-device';
|
|
4
|
-
export
|
|
1
|
+
/// <reference types="dist" />
|
|
2
|
+
import { Sampler, SamplerProps } from '@luma.gl/core';
|
|
3
|
+
import type { WebGPUDevice } from '../webgpu-device';
|
|
4
|
+
export type WebGPUSamplerProps = SamplerProps & {
|
|
5
5
|
handle?: GPUSampler;
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
8
|
*
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export declare class WebGPUSampler extends Sampler {
|
|
11
11
|
readonly device: WebGPUDevice;
|
|
12
12
|
readonly handle: GPUSampler;
|
|
13
13
|
constructor(device: WebGPUDevice, props: WebGPUSamplerProps);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-sampler.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-sampler.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"webgpu-sampler.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-sampler.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAA;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,OAAO;IACxC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB;IAclD,OAAO,IAAI,IAAI;CAGzB"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
import { Sampler } from '@luma.gl/
|
|
3
|
-
export
|
|
2
|
+
import { Sampler } from '@luma.gl/core';
|
|
3
|
+
export class WebGPUSampler extends Sampler {
|
|
4
4
|
constructor(device, props) {
|
|
5
5
|
super(device, props);
|
|
6
|
-
|
|
7
6
|
_defineProperty(this, "device", void 0);
|
|
8
|
-
|
|
9
7
|
_defineProperty(this, "handle", void 0);
|
|
10
|
-
|
|
11
8
|
this.device = device;
|
|
12
|
-
|
|
9
|
+
const samplerProps = {
|
|
10
|
+
...this.props
|
|
11
|
+
};
|
|
12
|
+
if (samplerProps.type !== 'comparison-sampler') {
|
|
13
|
+
delete samplerProps.compare;
|
|
14
|
+
}
|
|
15
|
+
this.handle = this.handle || this.device.handle.createSampler(samplerProps);
|
|
13
16
|
this.handle.label = this.props.id;
|
|
14
17
|
}
|
|
15
|
-
|
|
16
18
|
destroy() {}
|
|
17
|
-
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=webgpu-sampler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"webgpu-sampler.js","names":["Sampler","WebGPUSampler","constructor","device","props","_defineProperty","samplerProps","type","compare","handle","createSampler","label","id","destroy"],"sources":["../../../src/adapter/resources/webgpu-sampler.ts"],"sourcesContent":["import {Sampler, SamplerProps} from '@luma.gl/core';\nimport type {WebGPUDevice} from '../webgpu-device';\n\nexport type WebGPUSamplerProps = SamplerProps & {\n handle?: GPUSampler;\n}\n\n/**\n *\n */\nexport class WebGPUSampler extends Sampler {\n readonly device: WebGPUDevice;\n readonly handle: GPUSampler;\n\n constructor(device: WebGPUDevice, props: WebGPUSamplerProps) {\n super(device, props);\n this.device = device;\n\n // Prepare sampler props\n const samplerProps: Partial<WebGPUSamplerProps> = {...this.props};\n if (samplerProps.type !== 'comparison-sampler') {\n delete samplerProps.compare;\n }\n\n this.handle = this.handle || this.device.handle.createSampler(samplerProps);\n this.handle.label = this.props.id;\n }\n\n override destroy(): void {\n // this.handle.destroy();\n }\n}\n"],"mappings":";AAAA,SAAQA,OAAO,QAAqB,eAAe;AAUnD,OAAO,MAAMC,aAAa,SAASD,OAAO,CAAC;EAIzCE,WAAWA,CAACC,MAAoB,EAAEC,KAAyB,EAAE;IAC3D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IACrB,IAAI,CAACF,MAAM,GAAGA,MAAM;IAGpB,MAAMG,YAAyC,GAAG;MAAC,GAAG,IAAI,CAACF;IAAK,CAAC;IACjE,IAAIE,YAAY,CAACC,IAAI,KAAK,oBAAoB,EAAE;MAC9C,OAAOD,YAAY,CAACE,OAAO;IAC7B;IAEA,IAAI,CAACC,MAAM,GAAG,IAAI,CAACA,MAAM,IAAI,IAAI,CAACN,MAAM,CAACM,MAAM,CAACC,aAAa,CAACJ,YAAY,CAAC;IAC3E,IAAI,CAACG,MAAM,CAACE,KAAK,GAAG,IAAI,CAACP,KAAK,CAACQ,EAAE;EACnC;EAESC,OAAOA,CAAA,EAAS,CAEzB;AACF"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
/// <reference types="
|
|
2
|
-
import type { ShaderProps, CompilerMessage } from '@luma.gl/
|
|
3
|
-
import { Shader } from '@luma.gl/
|
|
4
|
-
import type WebGPUDevice from '../webgpu-device';
|
|
5
|
-
export
|
|
1
|
+
/// <reference types="dist" />
|
|
2
|
+
import type { ShaderProps, CompilerMessage } from '@luma.gl/core';
|
|
3
|
+
import { Shader } from '@luma.gl/core';
|
|
4
|
+
import type { WebGPUDevice } from '../webgpu-device';
|
|
5
|
+
export type WebGPUShaderProps = ShaderProps & {
|
|
6
6
|
handle?: GPUShaderModule;
|
|
7
7
|
};
|
|
8
8
|
/**
|
|
9
9
|
* Immutable shader
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export declare class WebGPUShader extends Shader {
|
|
12
12
|
readonly device: WebGPUDevice;
|
|
13
13
|
readonly handle: GPUShaderModule;
|
|
14
14
|
constructor(device: WebGPUDevice, props: WebGPUShaderProps);
|
|
15
|
-
_checkCompilationError(errorScope: Promise<GPUError>): Promise<void>;
|
|
15
|
+
_checkCompilationError(errorScope: Promise<GPUError | null>): Promise<void>;
|
|
16
16
|
destroy(): void;
|
|
17
17
|
protected createHandle(): GPUShaderModule;
|
|
18
18
|
/** Returns compilation info for this shader */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-shader.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-shader.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"webgpu-shader.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-shader.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAChE,OAAO,EAAC,MAAM,EAAM,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,qBAAa,YAAa,SAAQ,MAAM;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;gBAErB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB;IAYpD,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxE,OAAO,IAAI,IAAI;IAIxB,SAAS,CAAC,YAAY,IAAI,eAAe;IAwBzC,+CAA+C;IACzC,eAAe,IAAI,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;CAI7D"}
|
|
@@ -1,64 +1,51 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
import { Shader, log } from '@luma.gl/
|
|
3
|
-
export
|
|
2
|
+
import { Shader, log } from '@luma.gl/core';
|
|
3
|
+
export class WebGPUShader extends Shader {
|
|
4
4
|
constructor(device, props) {
|
|
5
5
|
super(device, props);
|
|
6
|
-
|
|
7
6
|
_defineProperty(this, "device", void 0);
|
|
8
|
-
|
|
9
7
|
_defineProperty(this, "handle", void 0);
|
|
10
|
-
|
|
11
8
|
this.device = device;
|
|
12
9
|
this.device.handle.pushErrorScope('validation');
|
|
13
10
|
this.handle = this.props.handle || this.createHandle();
|
|
14
11
|
this.handle.label = this.props.id;
|
|
15
|
-
|
|
16
12
|
this._checkCompilationError(this.device.handle.popErrorScope());
|
|
17
13
|
}
|
|
18
|
-
|
|
19
14
|
async _checkCompilationError(errorScope) {
|
|
20
15
|
const error = await errorScope;
|
|
21
|
-
|
|
22
16
|
if (error) {
|
|
23
17
|
const shaderLog = await this.compilationInfo();
|
|
24
18
|
log.error("Shader compilation error: ".concat(error.message), shaderLog)();
|
|
25
19
|
throw new Error("Shader compilation error: ".concat(error.message));
|
|
26
20
|
}
|
|
27
21
|
}
|
|
28
|
-
|
|
29
22
|
destroy() {}
|
|
30
|
-
|
|
31
23
|
createHandle() {
|
|
32
24
|
const {
|
|
33
|
-
source
|
|
25
|
+
source,
|
|
26
|
+
stage
|
|
34
27
|
} = this.props;
|
|
35
28
|
let language = this.props.language;
|
|
36
|
-
|
|
37
29
|
if (!language) {
|
|
38
30
|
language = source.includes('->') ? 'wgsl' : 'glsl';
|
|
39
31
|
}
|
|
40
|
-
|
|
41
32
|
switch (language) {
|
|
42
33
|
case 'wgsl':
|
|
43
34
|
return this.device.handle.createShaderModule({
|
|
44
35
|
code: source
|
|
45
36
|
});
|
|
46
|
-
|
|
47
37
|
case 'glsl':
|
|
48
38
|
return this.device.handle.createShaderModule({
|
|
49
39
|
code: source,
|
|
50
|
-
transform: glsl => this.device.glslang.compileGLSL(glsl,
|
|
40
|
+
transform: glsl => this.device.glslang.compileGLSL(glsl, stage)
|
|
51
41
|
});
|
|
52
|
-
|
|
53
42
|
default:
|
|
54
43
|
throw new Error(language);
|
|
55
44
|
}
|
|
56
45
|
}
|
|
57
|
-
|
|
58
46
|
async compilationInfo() {
|
|
59
|
-
const compilationInfo = await this.handle.
|
|
47
|
+
const compilationInfo = await this.handle.getCompilationInfo();
|
|
60
48
|
return compilationInfo.messages;
|
|
61
49
|
}
|
|
62
|
-
|
|
63
50
|
}
|
|
64
51
|
//# sourceMappingURL=webgpu-shader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"webgpu-shader.js","names":["Shader","log","WebGPUShader","constructor","device","props","_defineProperty","handle","pushErrorScope","createHandle","label","id","_checkCompilationError","popErrorScope","errorScope","error","shaderLog","compilationInfo","concat","message","Error","destroy","source","stage","language","includes","createShaderModule","code","transform","glsl","glslang","compileGLSL","getCompilationInfo","messages"],"sources":["../../../src/adapter/resources/webgpu-shader.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport type {ShaderProps, CompilerMessage} from '@luma.gl/core';\nimport {Shader, log} from '@luma.gl/core';\nimport type {WebGPUDevice} from '../webgpu-device';\n\nexport type WebGPUShaderProps = ShaderProps & {\n handle?: GPUShaderModule;\n};\n\n/**\n * Immutable shader\n */\nexport class WebGPUShader extends Shader {\n readonly device: WebGPUDevice;\n readonly handle: GPUShaderModule;\n\n constructor(device: WebGPUDevice, props: WebGPUShaderProps) {\n super(device, props);\n this.device = device;\n\n this.device.handle.pushErrorScope('validation');\n\n this.handle = this.props.handle || this.createHandle();\n this.handle.label = this.props.id;\n\n this._checkCompilationError(this.device.handle.popErrorScope());\n }\n\n async _checkCompilationError(errorScope: Promise<GPUError | null>): Promise<void> {\n const error = await errorScope as GPUValidationError;\n if (error) {\n const shaderLog = await this.compilationInfo();\n log.error(`Shader compilation error: ${error.message}`, shaderLog)();\n // Note: Even though this error is asynchronous and thrown after the constructor completes,\n // it will result in a useful stack trace leading back to the constructor\n throw new Error(`Shader compilation error: ${error.message}`);\n }\n }\n\n override destroy(): void {\n // this.handle.destroy();\n }\n\n protected createHandle(): GPUShaderModule {\n const {source, stage} = this.props;\n\n let language = this.props.language;\n // Compile from src\n if (!language) {\n // wgsl uses C++ \"auto\" style arrow notation\n language = source.includes('->') ? 'wgsl' : 'glsl';\n }\n\n switch(language) {\n case 'wgsl':\n return this.device.handle.createShaderModule({code: source});\n case 'glsl':\n return this.device.handle.createShaderModule({\n code: source,\n // @ts-expect-error\n transform: (glsl) => this.device.glslang.compileGLSL(glsl, stage)\n });\n default:\n throw new Error(language);\n }\n }\n\n /** Returns compilation info for this shader */\n async compilationInfo(): Promise<readonly CompilerMessage[]> {\n const compilationInfo = await this.handle.getCompilationInfo();\n return compilationInfo.messages;\n }\n}\n"],"mappings":";AAGA,SAAQA,MAAM,EAAEC,GAAG,QAAO,eAAe;AAUzC,OAAO,MAAMC,YAAY,SAASF,MAAM,CAAC;EAIvCG,WAAWA,CAACC,MAAoB,EAAEC,KAAwB,EAAE;IAC1D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IACrB,IAAI,CAACF,MAAM,GAAGA,MAAM;IAEpB,IAAI,CAACA,MAAM,CAACG,MAAM,CAACC,cAAc,CAAC,YAAY,CAAC;IAE/C,IAAI,CAACD,MAAM,GAAG,IAAI,CAACF,KAAK,CAACE,MAAM,IAAI,IAAI,CAACE,YAAY,CAAC,CAAC;IACtD,IAAI,CAACF,MAAM,CAACG,KAAK,GAAG,IAAI,CAACL,KAAK,CAACM,EAAE;IAEjC,IAAI,CAACC,sBAAsB,CAAC,IAAI,CAACR,MAAM,CAACG,MAAM,CAACM,aAAa,CAAC,CAAC,CAAC;EACjE;EAEA,MAAMD,sBAAsBA,CAACE,UAAoC,EAAiB;IAChF,MAAMC,KAAK,GAAG,MAAMD,UAAgC;IACpD,IAAIC,KAAK,EAAE;MACT,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACC,eAAe,CAAC,CAAC;MAC9ChB,GAAG,CAACc,KAAK,8BAAAG,MAAA,CAA8BH,KAAK,CAACI,OAAO,GAAIH,SAAS,CAAC,CAAC,CAAC;MAGpE,MAAM,IAAII,KAAK,8BAAAF,MAAA,CAA8BH,KAAK,CAACI,OAAO,CAAE,CAAC;IAC/D;EACF;EAESE,OAAOA,CAAA,EAAS,CAEzB;EAEUZ,YAAYA,CAAA,EAAoB;IACxC,MAAM;MAACa,MAAM;MAAEC;IAAK,CAAC,GAAG,IAAI,CAAClB,KAAK;IAElC,IAAImB,QAAQ,GAAG,IAAI,CAACnB,KAAK,CAACmB,QAAQ;IAElC,IAAI,CAACA,QAAQ,EAAE;MAEbA,QAAQ,GAAGF,MAAM,CAACG,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM;IACpD;IAEA,QAAOD,QAAQ;MACb,KAAK,MAAM;QACT,OAAO,IAAI,CAACpB,MAAM,CAACG,MAAM,CAACmB,kBAAkB,CAAC;UAACC,IAAI,EAAEL;QAAM,CAAC,CAAC;MAC9D,KAAK,MAAM;QACT,OAAO,IAAI,CAAClB,MAAM,CAACG,MAAM,CAACmB,kBAAkB,CAAC;UAC3CC,IAAI,EAAEL,MAAM;UAEZM,SAAS,EAAGC,IAAI,IAAK,IAAI,CAACzB,MAAM,CAAC0B,OAAO,CAACC,WAAW,CAACF,IAAI,EAAEN,KAAK;QAClE,CAAC,CAAC;MACJ;QACE,MAAM,IAAIH,KAAK,CAACI,QAAQ,CAAC;IAC7B;EACF;EAGA,MAAMP,eAAeA,CAAA,EAAwC;IAC3D,MAAMA,eAAe,GAAG,MAAM,IAAI,CAACV,MAAM,CAACyB,kBAAkB,CAAC,CAAC;IAC9D,OAAOf,eAAe,CAACgB,QAAQ;EACjC;AACF"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
/// <reference types="
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
export default class WebGPUTexture extends Texture {
|
|
1
|
+
/// <reference types="dist" />
|
|
2
|
+
import { Texture, TextureProps, Sampler, SamplerProps } from '@luma.gl/core';
|
|
3
|
+
import type { WebGPUDevice } from '../webgpu-device';
|
|
4
|
+
import { WebGPUSampler } from './webgpu-sampler';
|
|
5
|
+
export declare class WebGPUTexture extends Texture {
|
|
7
6
|
readonly device: WebGPUDevice;
|
|
8
7
|
readonly handle: GPUTexture;
|
|
9
8
|
readonly view: GPUTextureView;
|
|
10
9
|
sampler: WebGPUSampler;
|
|
10
|
+
height: number;
|
|
11
|
+
width: number;
|
|
11
12
|
constructor(device: WebGPUDevice, props: TextureProps);
|
|
12
13
|
protected createHandle(): GPUTexture;
|
|
13
14
|
destroy(): void;
|
|
@@ -18,7 +19,10 @@ export default class WebGPUTexture extends Texture {
|
|
|
18
19
|
setSampler(sampler: Sampler | SamplerProps): this;
|
|
19
20
|
setData(options: {
|
|
20
21
|
data: any;
|
|
21
|
-
}):
|
|
22
|
+
}): {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
};
|
|
22
26
|
/** Set image */
|
|
23
27
|
setImage(options: {
|
|
24
28
|
source: ImageBitmap | HTMLCanvasElement | OffscreenCanvas;
|
|
@@ -34,6 +38,9 @@ export default class WebGPUTexture extends Texture {
|
|
|
34
38
|
aspect?: 'all' | 'stencil-only' | 'depth-only';
|
|
35
39
|
colorSpace?: 'srgb';
|
|
36
40
|
premultipliedAlpha?: boolean;
|
|
37
|
-
}):
|
|
41
|
+
}): {
|
|
42
|
+
width: number;
|
|
43
|
+
height: number;
|
|
44
|
+
};
|
|
38
45
|
}
|
|
39
46
|
//# sourceMappingURL=webgpu-texture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-texture.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-texture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webgpu-texture.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgpu-texture.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAE3E,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAW/C,qBAAa,aAAc,SAAQ,OAAO;IACxC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,OAAO,EAAE,aAAa,CAAC;IAEd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;gBASX,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY;IAkCrD,SAAS,CAAC,YAAY,IAAI,UAAU;IAyB3B,OAAO,IAAI,IAAI;IAIxB;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI;IAKjD,OAAO,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,GAAG,CAAC;KACX;;;;IAID,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE;QAChB,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;QAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,MAAM,CAAC,EAAE,KAAK,GAAG,cAAc,GAAG,YAAY,CAAC;QAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GAAG;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC;CA6HpC"}
|