diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f3c000ff260e019cf821927f15dd3f595b58c0b..1af81b592cd9ffe858a85afcfeb32de3907271ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,8 +42,8 @@ if (vkcv_build_debug) endif() endif() -if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "10.0.0")) - set(vkcv_flags ${vkcv_flags} " -std=c++2a -std=gnu++2a") +if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11.0.0")) + list(APPEND vkcv_definitions __NO_SEMAPHORES__) endif() # configure everything to use the required dependencies diff --git a/include/vkcv/Event.hpp b/include/vkcv/Event.hpp index edb8131a3afc8d6f65750731f67d94450fadb016..0a5cc1f0d93b6eebea6a54cd8d48632ea4c0be31 100644 --- a/include/vkcv/Event.hpp +++ b/include/vkcv/Event.hpp @@ -3,8 +3,12 @@ #include <functional> #ifndef __MINGW32__ +#ifdef __NO_SEMAPHORES__ +#include <mutex> +#else #include <semaphore> #endif +#endif #include <vector> @@ -34,7 +38,11 @@ namespace vkcv { uint32_t m_id_counter; #ifndef __MINGW32__ +#ifdef __NO_SEMAPHORES__ + std::mutex m_mutex; +#else std::binary_semaphore m_semaphore; +#endif #endif public: @@ -84,7 +92,11 @@ namespace vkcv { */ void lock() { #ifndef __MINGW32__ +#ifdef __NO_SEMAPHORES__ + m_mutex.lock(); +#else m_semaphore.acquire(); +#endif #endif } @@ -93,15 +105,27 @@ namespace vkcv { */ void unlock() { #ifndef __MINGW32__ +#ifdef __NO_SEMAPHORES__ + m_mutex.unlock(); +#else m_semaphore.release(); +#endif #endif } explicit event(bool locked = false) #ifndef __MINGW32__ +#ifndef __NO_SEMAPHORES__ : m_semaphore(locked? 1 : 0) #endif - {} +#endif + { +#ifndef __MINGW32__ +#ifdef __NO_SEMAPHORES__ + if (locked) m_mutex.lock(); +#endif +#endif + } event(const event &other) = delete;