diff --git a/Source/Engine/Platform/Windows/WindowsPlatform.cpp b/Source/Engine/Platform/Windows/WindowsPlatform.cpp index 116cb3deb..e40ae1ca7 100644 --- a/Source/Engine/Platform/Windows/WindowsPlatform.cpp +++ b/Source/Engine/Platform/Windows/WindowsPlatform.cpp @@ -543,11 +543,9 @@ void WindowsPlatform::ReleaseMutex() } } -void WindowsPlatform::PreInit(void* hInstance) +PRAGMA_DISABLE_OPTIMIZATION; +void CheckInstructionSet() { - ASSERT(hInstance); - Instance = hInstance; - #if PLATFORM_ARCH_X86 || PLATFORM_ARCH_X64 // Check the minimum vector instruction set support int32 cpuInfo[4] = { -1 }; @@ -597,10 +595,19 @@ void WindowsPlatform::PreInit(void* hInstance) { // Not supported CPU CPUBrand cpu; - Error(String::Format(TEXT("Cannot start program due to lack of CPU feature {}.\n\n{}"), missingFeature, String(cpu.Buffer))); + Platform::Error(String::Format(TEXT("Cannot start program due to lack of CPU feature {}.\n\n{}"), missingFeature, String(cpu.Buffer))); exit(-1); } #endif +} +PRAGMA_ENABLE_OPTIMIZATION; + +void WindowsPlatform::PreInit(void* hInstance) +{ + ASSERT(hInstance); + Instance = hInstance; + + CheckInstructionSet(); // Disable the process from being showing "ghosted" while not responding messages during slow tasks DisableProcessWindowsGhosting(); diff --git a/Source/ThirdParty/tracy/client/TracyAlloc.cpp b/Source/ThirdParty/tracy/client/TracyAlloc.cpp index 545a6062b..923c92494 100644 --- a/Source/ThirdParty/tracy/client/TracyAlloc.cpp +++ b/Source/ThirdParty/tracy/client/TracyAlloc.cpp @@ -6,6 +6,10 @@ #include "../common/TracyYield.hpp" +#if PLATFORM_WINDOWS +extern void CheckInstructionSet(); +#endif + namespace tracy { @@ -18,6 +22,10 @@ tracy_no_inline static void InitRpmallocPlumbing() const auto done = RpInitDone.load( std::memory_order_acquire ); if( !done ) { +#if PLATFORM_WINDOWS + // Check instruction set before executing any code (Tracy init static vars before others) + CheckInstructionSet(); +#endif int expected = 0; while( !RpInitLock.compare_exchange_weak( expected, 1, std::memory_order_release, std::memory_order_relaxed ) ) { expected = 0; YieldThread(); } const auto done = RpInitDone.load( std::memory_order_acquire );