未验证 提交 31d1746a 编写于 作者: M Michael Herzog 提交者: GitHub

WebGPUComputePipelines: Use WebGPUProgrammableStage. (#21757)

上级 6de8abaf
import WebGPUProgrammableStage from './WebGPUProgrammableStage.js';
class WebGPUComputePipelines { class WebGPUComputePipelines {
constructor( device, glslang ) { constructor( device, glslang ) {
...@@ -6,7 +8,7 @@ class WebGPUComputePipelines { ...@@ -6,7 +8,7 @@ class WebGPUComputePipelines {
this.glslang = glslang; this.glslang = glslang;
this.pipelines = new WeakMap(); this.pipelines = new WeakMap();
this.shaderModules = { this.stages = {
compute: new WeakMap() compute: new WeakMap()
}; };
...@@ -16,38 +18,31 @@ class WebGPUComputePipelines { ...@@ -16,38 +18,31 @@ class WebGPUComputePipelines {
let pipeline = this.pipelines.get( param ); let pipeline = this.pipelines.get( param );
// @TODO: Reuse compute pipeline if possible
if ( pipeline === undefined ) { if ( pipeline === undefined ) {
const device = this.device; const device = this.device;
const glslang = this.glslang;
const shader = { const shader = {
computeShader: param.shader computeShader: param.shader
}; };
// shader modules // programmable stage
const glslang = this.glslang;
let moduleCompute = this.shaderModules.compute.get( shader );
if ( moduleCompute === undefined ) { let stageCompute = this.stages.compute.get( shader );
const byteCodeCompute = glslang.compileGLSL( shader.computeShader, 'compute' ); if ( stageCompute === undefined ) {
moduleCompute = device.createShaderModule( { code: byteCodeCompute } ); stageCompute = new WebGPUProgrammableStage( device, glslang, shader.computeShader, 'compute' );
this.shaderModules.compute.set( shader, moduleCompute ); this.stages.compute.set( shader, stageCompute );
} }
//
const compute = {
module: moduleCompute,
entryPoint: 'main'
};
pipeline = device.createComputePipeline( { pipeline = device.createComputePipeline( {
compute: compute compute: stageCompute.stage
} ); } );
this.pipelines.set( param, pipeline ); this.pipelines.set( param, pipeline );
...@@ -61,7 +56,7 @@ class WebGPUComputePipelines { ...@@ -61,7 +56,7 @@ class WebGPUComputePipelines {
dispose() { dispose() {
this.pipelines = new WeakMap(); this.pipelines = new WeakMap();
this.shaderModules = { this.stages = {
compute: new WeakMap() compute: new WeakMap()
}; };
......
...@@ -61,9 +61,6 @@ class WebGPURenderPipelines { ...@@ -61,9 +61,6 @@ class WebGPURenderPipelines {
} }
stageVertex.usedTimes ++;
stageFragment.usedTimes ++;
// determine render pipeline // determine render pipeline
currentPipeline = this._acquirePipeline( stageVertex, stageFragment, object, nodeBuilder ); currentPipeline = this._acquirePipeline( stageVertex, stageFragment, object, nodeBuilder );
...@@ -83,7 +80,10 @@ class WebGPURenderPipelines { ...@@ -83,7 +80,10 @@ class WebGPURenderPipelines {
if ( materialPipelines.has( currentPipeline ) === false ) { if ( materialPipelines.has( currentPipeline ) === false ) {
materialPipelines.add( currentPipeline ); materialPipelines.add( currentPipeline );
currentPipeline.usedTimes ++; currentPipeline.usedTimes ++;
stageVertex.usedTimes ++;
stageFragment.usedTimes ++;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册