UNPKG

4.63 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/webgpu/WebGPUBuffer.ts"],"names":["isSafari","WebGPUConstants","WebGPUBuffer","engine","options","buffer","data","usage","type","createBuffer","Array","Float32Array","BufferUsage","Vertex","CopyDst","destroy","offset","setSubData","view","flags","padding","byteLength","verticesBufferDescriptor","size","device","destBuffer","destOffset","srcArrayBuffer","queue","getQueue","defaultQueue","writeBuffer"],"mappings":";;AAAA,SAKEA,QALF,QAMO,qBANP;AAOA,OAAO,KAAKC,eAAZ,MAAiC,8BAAjC;;IAGqBC,Y;AAGnB,wBACUC,MADV,EAEUC,OAFV,EAGE;AAAA;;AAAA,SAFQD,MAER,GAFQA,MAER;AAAA,SADQC,OACR,GADQA,OACR;AAAA,SALMC,MAKN;AAAA,mBAC8BD,OAD9B;AAAA,QACQE,IADR,YACQA,IADR;AAAA,QACcC,KADd,YACcA,KADd;AAAA,QACqBC,IADrB,YACqBA,IADrB;AAEA,SAAKH,MAAL,GAAc,KAAKI,YAAL,CACZH,IAAI,YAAYI,KAAhB,GAAwB,IAAIC,YAAJ,CAAiBL,IAAjB,CAAxB,GAAiDA,IADrC,EAEZ;AACAC,IAAAA,KAAK,IACHN,eAAe,CAACW,WAAhB,CAA4BC,MAA5B,GACEZ,eAAe,CAACW,WAAhB,CAA4BE,OALpB,CAAd;AAOD;;;;0BAEY;AACX,aAAO,KAAKT,MAAZ;AACD;;;8BAEgB;AACf,WAAKA,MAAL,CAAYU,OAAZ;AACD;;;kCAEsE;AAAA,UAAtDT,IAAsD,QAAtDA,IAAsD;AAAA,UAAhDU,MAAgD,QAAhDA,MAAgD;AACrE,WAAKC,UAAL,CACE,KAAKZ,MADP,EAEEW,MAFF,EAGEV,IAAI,YAAYI,KAAhB,GAAwB,IAAIC,YAAJ,CAAiBL,IAAjB,CAAxB,GAAiDA,IAHnD;AAKD;;;iCAGCY,I,EACAC,K,EACW;AACX;AACA,UAAMC,OAAO,GAAGF,IAAI,CAACG,UAAL,GAAkB,CAAlC;AACA,UAAMC,wBAAwB,GAAG;AAC/B;AACAC,QAAAA,IAAI,EAAEL,IAAI,CAACG,UAAL,GAAkBD,OAFO;AAG/Bb,QAAAA,KAAK,EAAEY;AAHwB,OAAjC;AAKA,UAAMd,MAAM,GAAG,KAAKF,MAAL,CAAYqB,MAAZ,CAAmBf,YAAnB,CAAgCa,wBAAhC,CAAf;AAEA,WAAKL,UAAL,CAAgBZ,MAAhB,EAAwB,CAAxB,EAA2Ba,IAA3B;AAEA,aAAOb,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;;+BAEIoB,U,EACAC,U,EACAC,c,EACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA,UAAMC,KAAe,GAAG5B,QAAQ,GAC5B;AACA,WAAKG,MAAL,CAAYqB,MAAZ,CAAmBK,QAAnB,EAF4B,GAG5B,KAAK1B,MAAL,CAAYqB,MAAZ,CAAmBM,YAHvB,CAXA,CAeA;;AACAF,MAAAA,KAAK,CAACG,WAAN,CAAkBN,UAAlB,EAA8BC,UAA9B,EAA0CC,cAA1C;AACD;;;;;;SA9EkBzB,Y","sourcesContent":["import {\n BufferData,\n gl,\n IBuffer,\n IBufferInitializationOptions,\n isSafari,\n} from '@antv/g-webgpu-core';\nimport * as WebGPUConstants from '@webgpu/types/dist/constants';\nimport { WebGPUEngine } from '.';\n\nexport default class WebGPUBuffer implements IBuffer {\n private buffer: GPUBuffer;\n\n constructor(\n private engine: WebGPUEngine,\n private options: IBufferInitializationOptions,\n ) {\n const { data, usage, type } = options;\n this.buffer = this.createBuffer(\n data instanceof Array ? new Float32Array(data) : data,\n // TODO: WebGL 和 WebGPU buffer usage 映射关系\n usage ||\n WebGPUConstants.BufferUsage.Vertex |\n WebGPUConstants.BufferUsage.CopyDst,\n );\n }\n\n public get() {\n return this.buffer;\n }\n\n public destroy() {\n this.buffer.destroy();\n }\n\n public subData({ data, offset }: { data: BufferData; offset: number }) {\n this.setSubData(\n this.buffer,\n offset,\n data instanceof Array ? new Float32Array(data) : data,\n );\n }\n\n private createBuffer(\n view: Exclude<BufferData, number[]>,\n flags: GPUBufferUsageFlags,\n ): GPUBuffer {\n // @ts-ignore\n const padding = view.byteLength % 4;\n const verticesBufferDescriptor = {\n // @ts-ignore\n size: view.byteLength + padding,\n usage: flags,\n };\n const buffer = this.engine.device.createBuffer(verticesBufferDescriptor);\n\n this.setSubData(buffer, 0, view);\n\n return buffer;\n }\n\n /**\n * 不同于 Babylon.js 的版本,使用最新的 GPUQueue.writeBuffer 方法\n * @see https://gpuweb.github.io/gpuweb/#dom-gpuqueue-writebuffer\n * 已废弃创建一个临时的 mapped buffer 用于拷贝数据 @see https://gpuweb.github.io/gpuweb/#GPUDevice-createBufferMapped\n * @see https://github.com/gpuweb/gpuweb/blob/master/design/BufferOperations.md#updating-data-to-an-existing-buffer-like-webgls-buffersubdata\n */\n private setSubData(\n destBuffer: GPUBuffer,\n destOffset: number,\n srcArrayBuffer: Exclude<BufferData, number[]>,\n ) {\n // deprecated API setSubData\n // destBuffer.setSubData(0, srcArrayBuffer);\n\n // deprecated API createBufferMapped\n // use createBuffer & getMappedRange instead\n // const [srcBuffer, arrayBuffer] = this.engine.device.createBufferMapped({\n // size: byteCount,\n // usage: WebGPUConstants.BufferUsage.CopySrc,\n // });\n\n const queue: GPUQueue = isSafari\n ? // @ts-ignore\n this.engine.device.getQueue()\n : this.engine.device.defaultQueue;\n // @ts-ignore\n queue.writeBuffer(destBuffer, destOffset, srcArrayBuffer);\n }\n}\n"],"file":"WebGPUBuffer.js"}
\No newline at end of file