From 8c66239ae59a47592a43b4da37a11423f04fb01c Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 25 Nov 2024 17:06:06 +0100 Subject: [PATCH] [godot] Nuclear option, diffs don't apply on Windows runner... --- .github/workflows/spine-godot-v4.yml | 7 -- spine-godot/build/4.3-stable/tvgLock.h | 76 ++++++++++++ .../build/4.3-stable/tvgTaskScheduler.h | 112 ++++++++++++++++++ spine-godot/build/setup.sh | 3 +- spine-godot/build/thorvg-4.3-stable.patch | 32 ----- 5 files changed, 190 insertions(+), 40 deletions(-) create mode 100644 spine-godot/build/4.3-stable/tvgLock.h create mode 100644 spine-godot/build/4.3-stable/tvgTaskScheduler.h delete mode 100644 spine-godot/build/thorvg-4.3-stable.patch diff --git a/.github/workflows/spine-godot-v4.yml b/.github/workflows/spine-godot-v4.yml index fbbca1671..ee7d212d1 100644 --- a/.github/workflows/spine-godot-v4.yml +++ b/.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 diff --git a/spine-godot/build/4.3-stable/tvgLock.h b/spine-godot/build/4.3-stable/tvgLock.h new file mode 100644 index 000000000..d3a4e41c5 --- /dev/null +++ b/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 +#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_ + diff --git a/spine-godot/build/4.3-stable/tvgTaskScheduler.h b/spine-godot/build/4.3-stable/tvgTaskScheduler.h new file mode 100644 index 000000000..b1fb461aa --- /dev/null +++ b/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 +#include + +#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 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 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_ + diff --git a/spine-godot/build/setup.sh b/spine-godot/build/setup.sh index 157f39cc5..a29f7d155 100755 --- a/spine-godot/build/setup.sh +++ b/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 diff --git a/spine-godot/build/thorvg-4.3-stable.patch b/spine-godot/build/thorvg-4.3-stable.patch deleted file mode 100644 index de693b1ca..000000000 --- a/spine-godot/build/thorvg-4.3-stable.patch +++ /dev/null @@ -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 - #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 - #include - -@@ -111,4 +109,4 @@ struct TaskScheduler - } //namespace - - #endif //_TVG_TASK_SCHEDULER_H_ -- -+