Skip to content

Commit eb8c334

Browse files
WebGPURenderer: Improved Shaders Names For Debug (#30209)
1 parent 574e954 commit eb8c334

File tree

5 files changed

+39
-6
lines changed

5 files changed

+39
-6
lines changed

src/nodes/gpgpu/ComputeNode.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ class ComputeNode extends Node {
7373
*/
7474
this.version = 1;
7575

76+
/**
77+
* The name or label of the uniform.
78+
*
79+
* @type {String}
80+
* @default ''
81+
*/
82+
this.name = '';
83+
7684
/**
7785
* The `updateBeforeType` is set to `NodeUpdateType.OBJECT` since {@link ComputeNode#updateBefore}
7886
* is executed once per object by default.
@@ -102,6 +110,20 @@ class ComputeNode extends Node {
102110

103111
}
104112

113+
/**
114+
* Sets the {@link ComputeNode#name} property.
115+
*
116+
* @param {String} name - The name of the uniform.
117+
* @return {ComputeNode} A reference to this node.
118+
*/
119+
label( name ) {
120+
121+
this.name = name;
122+
123+
return this;
124+
125+
}
126+
105127
/**
106128
* TODO
107129
*/

src/renderers/common/Pipelines.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class Pipelines extends DataMap {
5252

5353
if ( previousPipeline && previousPipeline.computeProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.computeProgram );
5454

55-
stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );
55+
stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', computeNode.name, nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );
5656
this.programs.compute.set( nodeBuilderState.computeShader, stageCompute );
5757

5858
backend.createProgram( stageCompute );
@@ -111,6 +111,8 @@ class Pipelines extends DataMap {
111111

112112
const nodeBuilderState = renderObject.getNodeBuilderState();
113113

114+
const name = renderObject.material ? renderObject.material.name : '';
115+
114116
// programmable stages
115117

116118
let stageVertex = this.programs.vertex.get( nodeBuilderState.vertexShader );
@@ -119,7 +121,7 @@ class Pipelines extends DataMap {
119121

120122
if ( previousPipeline && previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );
121123

122-
stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex' );
124+
stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex', name );
123125
this.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );
124126

125127
backend.createProgram( stageVertex );
@@ -132,7 +134,7 @@ class Pipelines extends DataMap {
132134

133135
if ( previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );
134136

135-
stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment' );
137+
stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment', name );
136138
this.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );
137139

138140
backend.createProgram( stageFragment );

src/renderers/common/ProgrammableStage.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ class ProgrammableStage {
1414
*
1515
* @param {String} code - The shader code.
1616
* @param {('vertex'|'fragment'|'compute')} stage - The type of stage.
17+
* @param {String} name - The name of the shader.
1718
* @param {Array<Object>?} [transforms=null] - The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
1819
* @param {Array<Object>?} [attributes=null] - The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
1920
*/
20-
constructor( code, stage, transforms = null, attributes = null ) {
21+
constructor( code, stage, name, transforms = null, attributes = null ) {
2122

2223
/**
2324
* The id of the programmable stage.
@@ -40,6 +41,14 @@ class ProgrammableStage {
4041
*/
4142
this.stage = stage;
4243

44+
/**
45+
* The name of the stage.
46+
* This is used for debugging purposes.
47+
*
48+
* @type {String}
49+
*/
50+
this.name = name;
51+
4352
/**
4453
* The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
4554
*

src/renderers/common/Renderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ class Renderer {
414414
* @type {QuadMesh}
415415
*/
416416
this._quad = new QuadMesh( new NodeMaterial() );
417-
this._quad.material.type = 'Renderer_output';
417+
this._quad.material.name = 'Renderer_output';
418418

419419
/**
420420
* A reference to the current render context.

src/renderers/webgpu/WebGPUBackend.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1288,7 +1288,7 @@ class WebGPUBackend extends Backend {
12881288
const programGPU = this.get( program );
12891289

12901290
programGPU.module = {
1291-
module: this.device.createShaderModule( { code: program.code, label: program.stage } ),
1291+
module: this.device.createShaderModule( { code: program.code, label: program.stage + ( program.name !== '' ? `_${ program.name }` : '' ) } ),
12921292
entryPoint: 'main'
12931293
};
12941294

0 commit comments

Comments
 (0)