From 98b8f01fbaed604fae0d67a86c6220e43f339c80 Mon Sep 17 00:00:00 2001
From: Jaswant Panchumarti <jaswant.panchumarti@kitware.com>
Date: Fri, 8 Mar 2024 16:09:21 -0500
Subject: [PATCH] WebGPU: Fix undefined member for emscripten < 3.1.54

---
 Rendering/WebGPU/vtkWebGPUActor.cxx        |  9 +++++++--
 Rendering/WebGPU/vtkWebGPURenderWindow.cxx | 14 ++++++++++++--
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/Rendering/WebGPU/vtkWebGPUActor.cxx b/Rendering/WebGPU/vtkWebGPUActor.cxx
index 63aa4d5ede1..f609a91e697 100644
--- a/Rendering/WebGPU/vtkWebGPUActor.cxx
+++ b/Rendering/WebGPU/vtkWebGPUActor.cxx
@@ -15,6 +15,10 @@
 
 #include <algorithm>
 
+#if defined(__EMSCRIPTEN__)
+#include "emscripten/version.h"
+#endif
+
 VTK_ABI_NAMESPACE_BEGIN
 
 //------------------------------------------------------------------------------
@@ -79,8 +83,9 @@ wgpu::RenderBundle vtkWebGPUActor::RenderToBundle(vtkRenderer* ren, vtkMapper* m
     const int sampleCount = wgpuRenWin->GetMultiSamples() ? wgpuRenWin->GetMultiSamples() : 1;
 
     wgpu::RenderBundleEncoderDescriptor bundleEncDesc;
-#if __EMSCRIPTEN__
-    // FIXME: Update this after emscripten webgpu updates to colorFormatCount
+#if defined(__EMSCRIPTEN__) &&                                                                     \
+  ((__EMSCRIPTEN_major__ < 3) || ((__EMSCRIPTEN_major__ <= 3) && (__EMSCRIPTEN_minor__ < 1)) ||    \
+    ((__EMSCRIPTEN_major__ <= 3) && (__EMSCRIPTEN_minor__ <= 1) && (__EMSCRIPTEN_tiny__ < 54)))
     bundleEncDesc.colorFormatsCount = 1;
 #else
     bundleEncDesc.colorFormatCount = 1;
diff --git a/Rendering/WebGPU/vtkWebGPURenderWindow.cxx b/Rendering/WebGPU/vtkWebGPURenderWindow.cxx
index 63a1d36fb6e..648a38564a4 100644
--- a/Rendering/WebGPU/vtkWebGPURenderWindow.cxx
+++ b/Rendering/WebGPU/vtkWebGPURenderWindow.cxx
@@ -19,6 +19,10 @@
 #include <exception>
 #include <sstream>
 
+#if defined(__EMSCRIPTEN__)
+#include "emscripten/version.h"
+#endif
+
 VTK_ABI_NAMESPACE_BEGIN
 
 namespace
@@ -1198,8 +1202,14 @@ void vtkWebGPURenderWindow::WaitForCompletion()
 {
   bool done = false;
   this->Device.GetQueue().OnSubmittedWorkDone(
-    0u, [](WGPUQueueWorkDoneStatus, void* userdata) { *static_cast<bool*>(userdata) = true; },
-    &done);
+#if defined(__EMSCRIPTEN__) &&                                                                     \
+  ((__EMSCRIPTEN_major__ < 3) || ((__EMSCRIPTEN_major__ <= 3) && (__EMSCRIPTEN_minor__ < 1)) ||    \
+    ((__EMSCRIPTEN_major__ <= 3) && (__EMSCRIPTEN_minor__ <= 1) && (__EMSCRIPTEN_tiny__ < 54)))
+    // https://github.com/emscripten-core/emscripten/commit/6daa18bc5ab19730421d2d63b69ddf41f11f1e85
+    // removed unused signalValue argument from 3.1.54 onwards.
+    0u,
+#endif
+    [](WGPUQueueWorkDoneStatus, void* userdata) { *static_cast<bool*>(userdata) = true; }, &done);
   while (!done)
   {
     vtkWGPUContext::WaitABit();
-- 
GitLab