diff --git a/examples/files.json b/examples/files.json
index 90942731909e0f..73def8a8159447 100644
--- a/examples/files.json
+++ b/examples/files.json
@@ -343,6 +343,7 @@
"webgpu_display_stereo",
"webgpu_equirectangular",
"webgpu_fog_height",
+ "webgpu_furnace_test",
"webgpu_hdr",
"webgpu_instance_mesh",
"webgpu_instance_path",
diff --git a/examples/screenshots/webgpu_furnace_test.jpg b/examples/screenshots/webgpu_furnace_test.jpg
new file mode 100644
index 00000000000000..0fd4bd19d59759
Binary files /dev/null and b/examples/screenshots/webgpu_furnace_test.jpg differ
diff --git a/examples/webgpu_furnace_test.html b/examples/webgpu_furnace_test.html
new file mode 100644
index 00000000000000..438e01dbe0bd17
--- /dev/null
+++ b/examples/webgpu_furnace_test.html
@@ -0,0 +1,166 @@
+
+
+
+ three.js webgpu - white furnace test
+
+
+
+
+
+
+
+
+
+
+
three.jsWhite Furnace Energy Conservation Test
+
+
+
+
Roughness increases left to right
+
Metalness increases top to bottom
+
+
+
+
+
+
+
+
diff --git a/src/nodes/tsl/TSLCore.js b/src/nodes/tsl/TSLCore.js
index 8494efedbd3acb..08d62ec0d56614 100644
--- a/src/nodes/tsl/TSLCore.js
+++ b/src/nodes/tsl/TSLCore.js
@@ -506,13 +506,15 @@ class ShaderCallNodeInternal extends Node {
if ( shaderNode.layout ) {
- let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( builder.constructor );
+ const backend = builder.renderer.backend;
+
+ let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( backend );
if ( functionNodesCacheMap === undefined ) {
functionNodesCacheMap = new WeakMap();
- nodeBuilderFunctionsCacheMap.set( builder.constructor, functionNodesCacheMap );
+ nodeBuilderFunctionsCacheMap.set( backend, functionNodesCacheMap );
}