浏览代码

[godot] Nuclear option, diffs don't apply on Windows runner...

Mario Zechner 8 月之前
父节点
当前提交
8c66239ae5

+ 0 - 7
.github/workflows/spine-godot-v4.yml

@@ -45,13 +45,6 @@ jobs:
   godot-editor-windows:
     runs-on: windows-2022
     steps:
-      - name: Configure git line endings
-        shell: bash
-        run: |
-          git config --get core.autocrlf
-          git config --global core.autocrlf false
-          echo "* text=auto" > .gitattributes
-
       - uses: actions/checkout@v3
         with:
           fetch-depth: 0

+ 76 - 0
spine-godot/build/4.3-stable/tvgLock.h

@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2024 the ThorVG project. All rights reserved.
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _TVG_LOCK_H_
+#define _TVG_LOCK_H_
+
+#ifdef THORVG_THREAD_SUPPORT
+
+#include <mutex>
+#include "tvgTaskScheduler.h"
+
+namespace tvg {
+
+    struct Key
+    {
+        std::mutex mtx;
+    };
+
+    struct ScopedLock
+    {
+        Key* key = nullptr;
+
+        ScopedLock(Key& k)
+        {
+            if (TaskScheduler::threads() > 0) {
+                k.mtx.lock();
+                key = &k;
+            }
+        }
+
+        ~ScopedLock()
+        {
+            if (TaskScheduler::threads() > 0) {
+                key->mtx.unlock();
+            }
+        }
+    };
+
+}
+
+#else //THORVG_THREAD_SUPPORT
+
+namespace tvg {
+
+    struct Key {};
+
+    struct ScopedLock
+    {
+        ScopedLock(Key& key) {}
+    };
+
+}
+
+#endif //THORVG_THREAD_SUPPORT
+
+#endif //_TVG_LOCK_H_
+

+ 112 - 0
spine-godot/build/4.3-stable/tvgTaskScheduler.h

@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2020 - 2024 the ThorVG project. All rights reserved.
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _TVG_TASK_SCHEDULER_H_
+#define _TVG_TASK_SCHEDULER_H_
+
+#include <mutex>
+#include <condition_variable>
+
+#include "tvgCommon.h"
+#include "tvgInlist.h"
+
+namespace tvg {
+
+#ifdef THORVG_THREAD_SUPPORT
+
+struct Task
+{
+private:
+    mutex                   mtx;
+    condition_variable      cv;
+    bool                    ready = true;
+    bool                    pending = false;
+
+public:
+    INLIST_ITEM(Task);
+
+    virtual ~Task() = default;
+
+    void done()
+    {
+        if (!pending) return;
+
+        unique_lock<mutex> lock(mtx);
+        while (!ready) cv.wait(lock);
+        pending = false;
+    }
+
+protected:
+    virtual void run(unsigned tid) = 0;
+
+private:
+    void operator()(unsigned tid)
+    {
+        run(tid);
+
+        lock_guard<mutex> lock(mtx);
+        ready = true;
+        cv.notify_one();
+    }
+
+    void prepare()
+    {
+        ready = false;
+        pending = true;
+    }
+
+    friend struct TaskSchedulerImpl;
+};
+
+#else  //THORVG_THREAD_SUPPORT
+
+struct Task
+{
+public:
+    INLIST_ITEM(Task);
+
+    virtual ~Task() = default;
+    void done() {}
+
+protected:
+    virtual void run(unsigned tid) = 0;
+
+private:
+    friend struct TaskSchedulerImpl;
+};
+
+#endif  //THORVG_THREAD_SUPPORT
+
+
+struct TaskScheduler
+{
+    static uint32_t threads();
+    static void init(uint32_t threads);
+    static void term();
+    static void request(Task* task);
+    static void async(bool on);
+};
+
+}  //namespace
+
+#endif //_TVG_TASK_SCHEDULER_H_
+

+ 2 - 1
spine-godot/build/setup.sh

@@ -65,7 +65,8 @@ cp -r ../spine-cpp/spine-cpp spine_godot
 # Apply patch for 4.3-stable, see https://github.com/godotengine/godot/issues/95861/#issuecomment-2486021565
 if [ "$branch" = "4.3-stable" ]; then
     pushd godot
-    git apply ../build/thorvg-4.3-stable.patch
+    cp ../build/4.3-stable/tvgLock.h thirdparty/thorvg/src/common/tvgLock.h
+	cp ../build/4.3-stable/tvgTaskScheduler.h thirdparty/thorvg/src/renderer/tvgTaskScheduler.h
     popd
 fi
 

+ 0 - 32
spine-godot/build/thorvg-4.3-stable.patch

@@ -1,32 +0,0 @@
-diff --git a/thirdparty/thorvg/src/common/tvgLock.h b/thirdparty/thorvg/src/common/tvgLock.h
-index 59f68d0..d3a4e41 100644
---- a/thirdparty/thorvg/src/common/tvgLock.h
-+++ b/thirdparty/thorvg/src/common/tvgLock.h
-@@ -25,8 +25,6 @@
- 
- #ifdef THORVG_THREAD_SUPPORT
- 
--#define _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR
--
- #include <mutex>
- #include "tvgTaskScheduler.h"
- 
-diff --git a/thirdparty/thorvg/src/renderer/tvgTaskScheduler.h b/thirdparty/thorvg/src/renderer/tvgTaskScheduler.h
-index 93f8481..b1fb461 100644
---- a/thirdparty/thorvg/src/renderer/tvgTaskScheduler.h
-+++ b/thirdparty/thorvg/src/renderer/tvgTaskScheduler.h
-@@ -23,8 +23,6 @@
- #ifndef _TVG_TASK_SCHEDULER_H_
- #define _TVG_TASK_SCHEDULER_H_
- 
--#define _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR
--
- #include <mutex>
- #include <condition_variable>
- 
-@@ -111,4 +109,4 @@ struct TaskScheduler
- }  //namespace
- 
- #endif //_TVG_TASK_SCHEDULER_H_
-- 
-+