update several submodules and patches applied

merged some patches not yet on upstream and some submodules where updated. Also changed the compile option to "native" that it will break compatibility if it is not built from the source
This commit is contained in:
Nilton Perim Neto 2025-03-24 09:45:32 -03:00
parent d15bb7a501
commit 790cc27f61
No known key found for this signature in database
GPG key ID: C5D17DB88201CD26
13 changed files with 398 additions and 32 deletions

182
1364.patch Normal file
View file

@ -0,0 +1,182 @@
From 9b7625f03e96cccf4733b700f16c56e0b0fae42e Mon Sep 17 00:00:00 2001
From: Dario <dariosamo@gmail.com>
Date: Thu, 13 Mar 2025 19:08:35 -0300
Subject: [PATCH 1/3] Remove the need for waitIdle from Vulkan.
---
UnleashedRecomp/gpu/video.cpp | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)
diff --git a/UnleashedRecomp/gpu/video.cpp b/UnleashedRecomp/gpu/video.cpp
index e24ce4de..f9ba6820 100644
--- a/UnleashedRecomp/gpu/video.cpp
+++ b/UnleashedRecomp/gpu/video.cpp
@@ -1973,23 +1973,21 @@ void Video::WaitForGPU()
{
g_waitForGPUCount++;
- if (g_vulkan)
- {
- g_device->waitIdle();
- }
- else
+ // Wait for all queue frames to finish.
+ for (size_t i = 0; i < NUM_FRAMES; i++)
{
- for (size_t i = 0; i < NUM_FRAMES; i++)
+ if (g_commandListStates[i])
{
- if (g_commandListStates[i])
- {
- g_queue->waitForCommandFence(g_commandFences[i].get());
- g_commandListStates[i] = false;
- }
+ g_queue->waitForCommandFence(g_commandFences[i].get());
+ g_commandListStates[i] = false;
}
- g_queue->executeCommandLists(nullptr, g_commandFences[0].get());
- g_queue->waitForCommandFence(g_commandFences[0].get());
}
+
+ // Execute an empty command list and wait for it to end to guarantee that any remaining presentation has finished.
+ g_commandLists[0]->begin();
+ g_commandLists[0]->end();
+ g_queue->executeCommandLists(g_commandLists[0].get(), g_commandFences[0].get());
+ g_queue->waitForCommandFence(g_commandFences[0].get());
}
static uint32_t CreateDevice(uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5, be<uint32_t>* a6)
From cb4eaae9ff98fd6d6f73f2a2badc556ff8ea7357 Mon Sep 17 00:00:00 2001
From: Dario <dariosamo@gmail.com>
Date: Thu, 13 Mar 2025 19:11:02 -0300
Subject: [PATCH 2/3] Remove waitIdle and only accept valid pointers on
execute.
---
UnleashedRecomp/gpu/rhi/plume_d3d12.cpp | 11 ++++-------
UnleashedRecomp/gpu/rhi/plume_d3d12.h | 1 -
UnleashedRecomp/gpu/rhi/plume_render_interface.h | 3 +--
UnleashedRecomp/gpu/rhi/plume_vulkan.cpp | 4 ----
UnleashedRecomp/gpu/rhi/plume_vulkan.h | 1 -
5 files changed, 5 insertions(+), 15 deletions(-)
diff --git a/UnleashedRecomp/gpu/rhi/plume_d3d12.cpp b/UnleashedRecomp/gpu/rhi/plume_d3d12.cpp
index 395630c2..31e4dfac 100644
--- a/UnleashedRecomp/gpu/rhi/plume_d3d12.cpp
+++ b/UnleashedRecomp/gpu/rhi/plume_d3d12.cpp
@@ -2285,6 +2285,9 @@ namespace plume {
}
void D3D12CommandQueue::executeCommandLists(const RenderCommandList **commandLists, uint32_t commandListCount, RenderCommandSemaphore **waitSemaphores, uint32_t waitSemaphoreCount, RenderCommandSemaphore **signalSemaphores, uint32_t signalSemaphoreCount, RenderCommandFence *signalFence) {
+ assert(commandLists != nullptr);
+ assert(commandListCount > 0);
+
for (uint32_t i = 0; i < waitSemaphoreCount; i++) {
D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(waitSemaphores[i]);
d3d->Wait(interfaceSemaphore->d3d, interfaceSemaphore->semaphoreValue);
@@ -2297,9 +2300,7 @@ namespace plume {
executionVector.emplace_back(static_cast<ID3D12CommandList *>(interfaceCommandList->d3d));
}
- if (!executionVector.empty()) {
- d3d->ExecuteCommandLists(UINT(executionVector.size()), executionVector.data());
- }
+ d3d->ExecuteCommandLists(UINT(executionVector.size()), executionVector.data());
for (uint32_t i = 0; i < signalSemaphoreCount; i++) {
D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(signalSemaphores[i]);
@@ -3798,10 +3799,6 @@ namespace plume {
return countsSupported;
}
- void D3D12Device::waitIdle() const {
- assert(false && "Use fences to replicate wait idle behavior on D3D12.");
- }
-
void D3D12Device::release() {
if (d3d != nullptr) {
d3d->Release();
diff --git a/UnleashedRecomp/gpu/rhi/plume_d3d12.h b/UnleashedRecomp/gpu/rhi/plume_d3d12.h
index d4987fbc..83304b41 100644
--- a/UnleashedRecomp/gpu/rhi/plume_d3d12.h
+++ b/UnleashedRecomp/gpu/rhi/plume_d3d12.h
@@ -459,7 +459,6 @@ namespace plume {
const RenderDeviceCapabilities &getCapabilities() const override;
const RenderDeviceDescription &getDescription() const override;
RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override;
- void waitIdle() const override;
void release();
bool isValid() const;
};
diff --git a/UnleashedRecomp/gpu/rhi/plume_render_interface.h b/UnleashedRecomp/gpu/rhi/plume_render_interface.h
index e62db052..15f661e7 100644
--- a/UnleashedRecomp/gpu/rhi/plume_render_interface.h
+++ b/UnleashedRecomp/gpu/rhi/plume_render_interface.h
@@ -200,7 +200,7 @@ namespace plume {
// Concrete implementation shortcuts.
inline void executeCommandLists(const RenderCommandList *commandList, RenderCommandFence *signalFence = nullptr) {
- executeCommandLists(commandList != nullptr ? &commandList : nullptr, commandList != nullptr ? 1 : 0, nullptr, 0, nullptr, 0, signalFence);
+ executeCommandLists(&commandList, 1, nullptr, 0, nullptr, 0, signalFence);
}
};
@@ -242,7 +242,6 @@ namespace plume {
virtual const RenderDeviceCapabilities &getCapabilities() const = 0;
virtual const RenderDeviceDescription &getDescription() const = 0;
virtual RenderSampleCounts getSampleCountsSupported(RenderFormat format) const = 0;
- virtual void waitIdle() const = 0;
};
struct RenderInterface {
diff --git a/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp b/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp
index 477a431a..bfac73aa 100644
--- a/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp
+++ b/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp
@@ -4190,10 +4190,6 @@ namespace plume {
}
}
- void VulkanDevice::waitIdle() const {
- vkDeviceWaitIdle(vk);
- }
-
void VulkanDevice::release() {
if (allocator != VK_NULL_HANDLE) {
vmaDestroyAllocator(allocator);
diff --git a/UnleashedRecomp/gpu/rhi/plume_vulkan.h b/UnleashedRecomp/gpu/rhi/plume_vulkan.h
index e25e1869..27cda006 100644
--- a/UnleashedRecomp/gpu/rhi/plume_vulkan.h
+++ b/UnleashedRecomp/gpu/rhi/plume_vulkan.h
@@ -430,7 +430,6 @@ namespace plume {
const RenderDeviceCapabilities &getCapabilities() const override;
const RenderDeviceDescription &getDescription() const override;
RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override;
- void waitIdle() const override;
void release();
bool isValid() const;
};
From 888f11e7f4472a3e4f67fe1a9c33318a44d097c9 Mon Sep 17 00:00:00 2001
From: Dario <dariosamo@gmail.com>
Date: Thu, 13 Mar 2025 19:12:05 -0300
Subject: [PATCH 3/3] Update comment.
---
UnleashedRecomp/gpu/video.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/UnleashedRecomp/gpu/video.cpp b/UnleashedRecomp/gpu/video.cpp
index f9ba6820..f80e04fd 100644
--- a/UnleashedRecomp/gpu/video.cpp
+++ b/UnleashedRecomp/gpu/video.cpp
@@ -1973,7 +1973,7 @@ void Video::WaitForGPU()
{
g_waitForGPUCount++;
- // Wait for all queue frames to finish.
+ // Wait for all queued frames to finish.
for (size_t i = 0; i < NUM_FRAMES; i++)
{
if (g_commandListStates[i])

27
1449.patch Normal file
View file

@ -0,0 +1,27 @@
From 220eaa19ac55f0de5beeb0794aba23f5e5e2b1de Mon Sep 17 00:00:00 2001
From: AL2009man <67606569+AL2009man@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:25:09 -0400
Subject: [PATCH] Updated SDL2 Submodule to Version 2.32.x Release Build
when UnleashedRecomp was released, it was running on SDL2 2.29.2 pre-release, this ultimately become 2.30.0. To closely align with the most up-to-date version of SDL2 and SDL2 Mixer: the submodule for both of them has been updated to be based on the 2.32.X branch.
Specifically: SDL Version 2.32.2-9-g2708e08f4, and SDL2_mixer 2.8.1.
---
thirdparty/SDL | 2 +-
thirdparty/SDL_mixer | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/thirdparty/SDL b/thirdparty/SDL
index 1edaad17..2708e08f 160000
--- a/thirdparty/SDL
+++ b/thirdparty/SDL
@@ -1 +1 @@
-Subproject commit 1edaad17218d67b567c149badce9ef0fc67f65fa
+Subproject commit 2708e08f40933d57aee0ba5f3406f1f75f3d9f55
diff --git a/thirdparty/SDL_mixer b/thirdparty/SDL_mixer
index 43799269..942151a4 160000
--- a/thirdparty/SDL_mixer
+++ b/thirdparty/SDL_mixer
@@ -1 +1 @@
-Subproject commit 437992692cf9300f2b2f04be35adc7445a9055bf
+Subproject commit 942151a4e8594a79037826963a5bc1e1add7bc3b

View file

@ -20,7 +20,7 @@ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
# Target Sandy Bridge for all projects
add_compile_options(
-march=sandybridge
-march=native
)
add_subdirectory(${UNLEASHED_RECOMP_THIRDPARTY_ROOT})

View file

@ -2287,6 +2287,9 @@ namespace plume {
}
void D3D12CommandQueue::executeCommandLists(const RenderCommandList **commandLists, uint32_t commandListCount, RenderCommandSemaphore **waitSemaphores, uint32_t waitSemaphoreCount, RenderCommandSemaphore **signalSemaphores, uint32_t signalSemaphoreCount, RenderCommandFence *signalFence) {
assert(commandLists != nullptr);
assert(commandListCount > 0);
for (uint32_t i = 0; i < waitSemaphoreCount; i++) {
D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(waitSemaphores[i]);
d3d->Wait(interfaceSemaphore->d3d, interfaceSemaphore->semaphoreValue);
@ -2299,9 +2302,7 @@ namespace plume {
executionVector.emplace_back(static_cast<ID3D12CommandList *>(interfaceCommandList->d3d));
}
if (!executionVector.empty()) {
d3d->ExecuteCommandLists(UINT(executionVector.size()), executionVector.data());
}
d3d->ExecuteCommandLists(UINT(executionVector.size()), executionVector.data());
for (uint32_t i = 0; i < signalSemaphoreCount; i++) {
D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(signalSemaphores[i]);
@ -3827,10 +3828,6 @@ namespace plume {
return countsSupported;
}
void D3D12Device::waitIdle() const {
assert(false && "Use fences to replicate wait idle behavior on D3D12.");
}
void D3D12Device::release() {
if (d3d != nullptr) {
d3d->Release();

View file

@ -461,7 +461,6 @@ namespace plume {
const RenderDeviceCapabilities &getCapabilities() const override;
const RenderDeviceDescription &getDescription() const override;
RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override;
void waitIdle() const override;
void release();
bool isValid() const;
};

View file

@ -200,7 +200,7 @@ namespace plume {
// Concrete implementation shortcuts.
inline void executeCommandLists(const RenderCommandList *commandList, RenderCommandFence *signalFence = nullptr) {
executeCommandLists(commandList != nullptr ? &commandList : nullptr, commandList != nullptr ? 1 : 0, nullptr, 0, nullptr, 0, signalFence);
executeCommandLists(&commandList, 1, nullptr, 0, nullptr, 0, signalFence);
}
};
@ -242,7 +242,6 @@ namespace plume {
virtual const RenderDeviceCapabilities &getCapabilities() const = 0;
virtual const RenderDeviceDescription &getDescription() const = 0;
virtual RenderSampleCounts getSampleCountsSupported(RenderFormat format) const = 0;
virtual void waitIdle() const = 0;
};
struct RenderInterface {

View file

@ -4207,10 +4207,6 @@ namespace plume {
}
}
void VulkanDevice::waitIdle() const {
vkDeviceWaitIdle(vk);
}
void VulkanDevice::release() {
if (allocator != VK_NULL_HANDLE) {
vmaDestroyAllocator(allocator);

View file

@ -430,7 +430,6 @@ namespace plume {
const RenderDeviceCapabilities &getCapabilities() const override;
const RenderDeviceDescription &getDescription() const override;
RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override;
void waitIdle() const override;
void release();
bool isValid() const;
};

View file

@ -1978,23 +1978,21 @@ void Video::WaitForGPU()
{
g_waitForGPUCount++;
if (g_vulkan)
// Wait for all queued frames to finish.
for (size_t i = 0; i < NUM_FRAMES; i++)
{
g_device->waitIdle();
}
else
{
for (size_t i = 0; i < NUM_FRAMES; i++)
if (g_commandListStates[i])
{
if (g_commandListStates[i])
{
g_queue->waitForCommandFence(g_commandFences[i].get());
g_commandListStates[i] = false;
}
g_queue->waitForCommandFence(g_commandFences[i].get());
g_commandListStates[i] = false;
}
g_queue->executeCommandLists(nullptr, g_commandFences[0].get());
g_queue->waitForCommandFence(g_commandFences[0].get());
}
// Execute an empty command list and wait for it to end to guarantee that any remaining presentation has finished.
g_commandLists[0]->begin();
g_commandLists[0]->end();
g_queue->executeCommandLists(g_commandLists[0].get(), g_commandFences[0].get());
g_queue->waitForCommandFence(g_commandFences[0].get());
}
static uint32_t CreateDevice(uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5, be<uint32_t>* a6)

169
nilton.patch Normal file
View file

@ -0,0 +1,169 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9032d76..94e1769 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,7 +20,7 @@ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
# Target Sandy Bridge for all projects
add_compile_options(
- -march=sandybridge
+ -march=native
)
add_subdirectory(${UNLEASHED_RECOMP_THIRDPARTY_ROOT})
diff --git a/UnleashedRecomp/gpu/rhi/plume_d3d12.cpp b/UnleashedRecomp/gpu/rhi/plume_d3d12.cpp
index 073ea68..8100108 100644
--- a/UnleashedRecomp/gpu/rhi/plume_d3d12.cpp
+++ b/UnleashedRecomp/gpu/rhi/plume_d3d12.cpp
@@ -2287,6 +2287,9 @@ namespace plume {
}
void D3D12CommandQueue::executeCommandLists(const RenderCommandList **commandLists, uint32_t commandListCount, RenderCommandSemaphore **waitSemaphores, uint32_t waitSemaphoreCount, RenderCommandSemaphore **signalSemaphores, uint32_t signalSemaphoreCount, RenderCommandFence *signalFence) {
+ assert(commandLists != nullptr);
+ assert(commandListCount > 0);
+
for (uint32_t i = 0; i < waitSemaphoreCount; i++) {
D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(waitSemaphores[i]);
d3d->Wait(interfaceSemaphore->d3d, interfaceSemaphore->semaphoreValue);
@@ -2299,9 +2302,7 @@ namespace plume {
executionVector.emplace_back(static_cast<ID3D12CommandList *>(interfaceCommandList->d3d));
}
- if (!executionVector.empty()) {
- d3d->ExecuteCommandLists(UINT(executionVector.size()), executionVector.data());
- }
+ d3d->ExecuteCommandLists(UINT(executionVector.size()), executionVector.data());
for (uint32_t i = 0; i < signalSemaphoreCount; i++) {
D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(signalSemaphores[i]);
@@ -3827,10 +3828,6 @@ namespace plume {
return countsSupported;
}
- void D3D12Device::waitIdle() const {
- assert(false && "Use fences to replicate wait idle behavior on D3D12.");
- }
-
void D3D12Device::release() {
if (d3d != nullptr) {
d3d->Release();
diff --git a/UnleashedRecomp/gpu/rhi/plume_d3d12.h b/UnleashedRecomp/gpu/rhi/plume_d3d12.h
index 34461c0..13a8586 100644
--- a/UnleashedRecomp/gpu/rhi/plume_d3d12.h
+++ b/UnleashedRecomp/gpu/rhi/plume_d3d12.h
@@ -461,7 +461,6 @@ namespace plume {
const RenderDeviceCapabilities &getCapabilities() const override;
const RenderDeviceDescription &getDescription() const override;
RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override;
- void waitIdle() const override;
void release();
bool isValid() const;
};
diff --git a/UnleashedRecomp/gpu/rhi/plume_render_interface.h b/UnleashedRecomp/gpu/rhi/plume_render_interface.h
index e62db05..15f661e 100644
--- a/UnleashedRecomp/gpu/rhi/plume_render_interface.h
+++ b/UnleashedRecomp/gpu/rhi/plume_render_interface.h
@@ -200,7 +200,7 @@ namespace plume {
// Concrete implementation shortcuts.
inline void executeCommandLists(const RenderCommandList *commandList, RenderCommandFence *signalFence = nullptr) {
- executeCommandLists(commandList != nullptr ? &commandList : nullptr, commandList != nullptr ? 1 : 0, nullptr, 0, nullptr, 0, signalFence);
+ executeCommandLists(&commandList, 1, nullptr, 0, nullptr, 0, signalFence);
}
};
@@ -242,7 +242,6 @@ namespace plume {
virtual const RenderDeviceCapabilities &getCapabilities() const = 0;
virtual const RenderDeviceDescription &getDescription() const = 0;
virtual RenderSampleCounts getSampleCountsSupported(RenderFormat format) const = 0;
- virtual void waitIdle() const = 0;
};
struct RenderInterface {
diff --git a/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp b/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp
index 94f91fa..1fb74c6 100644
--- a/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp
+++ b/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp
@@ -4207,10 +4207,6 @@ namespace plume {
}
}
- void VulkanDevice::waitIdle() const {
- vkDeviceWaitIdle(vk);
- }
-
void VulkanDevice::release() {
if (allocator != VK_NULL_HANDLE) {
vmaDestroyAllocator(allocator);
diff --git a/UnleashedRecomp/gpu/rhi/plume_vulkan.h b/UnleashedRecomp/gpu/rhi/plume_vulkan.h
index e25e186..27cda00 100644
--- a/UnleashedRecomp/gpu/rhi/plume_vulkan.h
+++ b/UnleashedRecomp/gpu/rhi/plume_vulkan.h
@@ -430,7 +430,6 @@ namespace plume {
const RenderDeviceCapabilities &getCapabilities() const override;
const RenderDeviceDescription &getDescription() const override;
RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override;
- void waitIdle() const override;
void release();
bool isValid() const;
};
diff --git a/UnleashedRecomp/gpu/video.cpp b/UnleashedRecomp/gpu/video.cpp
index 19c7fb6..1930c00 100644
--- a/UnleashedRecomp/gpu/video.cpp
+++ b/UnleashedRecomp/gpu/video.cpp
@@ -1978,23 +1978,21 @@ void Video::WaitForGPU()
{
g_waitForGPUCount++;
- if (g_vulkan)
- {
- g_device->waitIdle();
- }
- else
+ // Wait for all queued frames to finish.
+ for (size_t i = 0; i < NUM_FRAMES; i++)
{
- for (size_t i = 0; i < NUM_FRAMES; i++)
+ if (g_commandListStates[i])
{
- if (g_commandListStates[i])
- {
- g_queue->waitForCommandFence(g_commandFences[i].get());
- g_commandListStates[i] = false;
- }
+ g_queue->waitForCommandFence(g_commandFences[i].get());
+ g_commandListStates[i] = false;
}
- g_queue->executeCommandLists(nullptr, g_commandFences[0].get());
- g_queue->waitForCommandFence(g_commandFences[0].get());
}
+
+ // Execute an empty command list and wait for it to end to guarantee that any remaining presentation has finished.
+ g_commandLists[0]->begin();
+ g_commandLists[0]->end();
+ g_queue->executeCommandLists(g_commandLists[0].get(), g_commandFences[0].get());
+ g_queue->waitForCommandFence(g_commandFences[0].get());
}
static uint32_t CreateDevice(uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5, be<uint32_t>* a6)
diff --git a/thirdparty/Vulkan-Headers b/thirdparty/Vulkan-Headers
index 14345da..78c3597 160000
--- a/thirdparty/Vulkan-Headers
+++ b/thirdparty/Vulkan-Headers
@@ -1 +1 @@
-Subproject commit 14345dab231912ee9601136e96ca67a6e1f632e7
+Subproject commit 78c359741d855213e8685278eb81bb62599f8e56
diff --git a/thirdparty/VulkanMemoryAllocator b/thirdparty/VulkanMemoryAllocator
index 1c35ba9..29b35ea 160000
--- a/thirdparty/VulkanMemoryAllocator
+++ b/thirdparty/VulkanMemoryAllocator
@@ -1 +1 @@
-Subproject commit 1c35ba99ce775f8342d87a83a3f0f696f99c2a39
+Subproject commit 29b35ea4232688c0f42cdff0c10848290760a417
diff --git a/thirdparty/vcpkg b/thirdparty/vcpkg
index b322364..b1d8051 160000
--- a/thirdparty/vcpkg
+++ b/thirdparty/vcpkg
@@ -1 +1 @@
-Subproject commit b322364f06308bdd24823f9d8f03fe0cc86fd46f
+Subproject commit b1d8051c9259b82fda906e0e8249e7d848efdbaa

@ -1 +1 @@
Subproject commit 14345dab231912ee9601136e96ca67a6e1f632e7
Subproject commit 78c359741d855213e8685278eb81bb62599f8e56

@ -1 +1 @@
Subproject commit 1c35ba99ce775f8342d87a83a3f0f696f99c2a39
Subproject commit 29b35ea4232688c0f42cdff0c10848290760a417

2
thirdparty/vcpkg vendored

@ -1 +1 @@
Subproject commit b322364f06308bdd24823f9d8f03fe0cc86fd46f
Subproject commit b1d8051c9259b82fda906e0e8249e7d848efdbaa