diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f1fdceba0fc10620bdf12abc340be22c2e27252..d65f3735bb90f7510a14fae4132de1f67085a50b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,8 +33,13 @@ if (CMAKE_BUILD_TYPE) set(vkcv_build_${_vkcv_build_type} 1) endif() +if (EXISTS "/usr/bin/mold") + set(CMAKE_LINKER "/usr/bin/mold") +endif() + message(STATUS "Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]") message(STATUS "Compiler: [ " ${CMAKE_CXX_COMPILER_ID} " " ${CMAKE_CXX_COMPILER_VERSION} " ]") +message(STATUS "Linker: [ " ${CMAKE_LINKER} " ]") if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0")) message(FATAL_ERROR "Upgrade your compiler! GCC 9.0+ is required!") diff --git a/include/vkcv/ShaderStage.hpp b/include/vkcv/ShaderStage.hpp index 0baaaf5b57fcc510159b8620e3119e4749467093..73cd6f5f37cc96cce384952080e32904915eee7b 100644 --- a/include/vkcv/ShaderStage.hpp +++ b/include/vkcv/ShaderStage.hpp @@ -3,26 +3,56 @@ #include <vulkan/vulkan.hpp> namespace vkcv { - + enum class ShaderStage : VkShaderStageFlags { - VERTEX = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eVertex), - TESS_CONTROL = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eTessellationControl), - TESS_EVAL = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eTessellationEvaluation), - GEOMETRY = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eGeometry), - FRAGMENT = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eFragment), - COMPUTE = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eCompute), - TASK = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eTaskNV), - MESH = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eMeshNV), - RAY_GEN = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eRaygenKHR), // RTX - RAY_ANY_HIT = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eAnyHitKHR), // RTX - RAY_CLOSEST_HIT = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eClosestHitKHR), // RTX - RAY_MISS = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eMissKHR), // RTX - RAY_INTERSECTION = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eIntersectionKHR), // RTX - RAY_CALLABLE = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eCallableKHR) // RTX + VERTEX = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eVertex), + TESS_CONTROL = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eTessellationControl), + TESS_EVAL = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eTessellationEvaluation), + GEOMETRY = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eGeometry), + FRAGMENT = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eFragment), + COMPUTE = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eCompute), + TASK = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eTaskNV), + MESH = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eMeshNV), + RAY_GEN = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eRaygenKHR), + RAY_ANY_HIT = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eAnyHitKHR), + RAY_CLOSEST_HIT = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eClosestHitKHR), + RAY_MISS = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eMissKHR), + RAY_INTERSECTION = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eIntersectionKHR), + RAY_CALLABLE = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eCallableKHR) }; using ShaderStages = vk::Flags<ShaderStage>; +} + +namespace vk { + + template<> + struct [[maybe_unused]] FlagTraits<vkcv::ShaderStage> { + enum : VkFlags { + allFlags [[maybe_unused]] = ( + VkFlags( vkcv::ShaderStage::VERTEX ) | + VkFlags( vkcv::ShaderStage::TESS_CONTROL ) | + VkFlags( vkcv::ShaderStage::TESS_EVAL ) | + VkFlags( vkcv::ShaderStage::GEOMETRY ) | + VkFlags( vkcv::ShaderStage::FRAGMENT ) | + VkFlags( vkcv::ShaderStage::COMPUTE ) | + VkFlags( vkcv::ShaderStage::TASK ) | + VkFlags( vkcv::ShaderStage::MESH ) | + VkFlags( vkcv::ShaderStage::RAY_GEN ) | + VkFlags( vkcv::ShaderStage::RAY_ANY_HIT ) | + VkFlags( vkcv::ShaderStage::RAY_CLOSEST_HIT ) | + VkFlags( vkcv::ShaderStage::RAY_MISS ) | + VkFlags( vkcv::ShaderStage::RAY_INTERSECTION ) | + VkFlags( vkcv::ShaderStage::RAY_CALLABLE ) + ) + }; + }; + +} + +namespace vkcv { + constexpr vk::ShaderStageFlags getShaderStageFlags(ShaderStages shaderStages) noexcept { return vk::ShaderStageFlags(static_cast<VkShaderStageFlags>(shaderStages)); } diff --git a/lib/SPIRV-Cross b/lib/SPIRV-Cross index ff61890722a91e97c44940494be5b6eed0d5ff5b..6a67891418a3f08be63f92726e049dc788e46f5b 160000 --- a/lib/SPIRV-Cross +++ b/lib/SPIRV-Cross @@ -1 +1 @@ -Subproject commit ff61890722a91e97c44940494be5b6eed0d5ff5b +Subproject commit 6a67891418a3f08be63f92726e049dc788e46f5b diff --git a/lib/VulkanMemoryAllocator-Hpp b/lib/VulkanMemoryAllocator-Hpp index 3a61240a5354ce56c222969a69825aabb6ba0a21..c6c3c665b6a29ae546bdec60606a3ef0757ea108 160000 --- a/lib/VulkanMemoryAllocator-Hpp +++ b/lib/VulkanMemoryAllocator-Hpp @@ -1 +1 @@ -Subproject commit 3a61240a5354ce56c222969a69825aabb6ba0a21 +Subproject commit c6c3c665b6a29ae546bdec60606a3ef0757ea108 diff --git a/lib/glfw b/lib/glfw index 0e9ec7788b4985a0df698080258e4091d18dcc3b..4cb36872a5fe448c205d0b46f0e8c8b57530cfe0 160000 --- a/lib/glfw +++ b/lib/glfw @@ -1 +1 @@ -Subproject commit 0e9ec7788b4985a0df698080258e4091d18dcc3b +Subproject commit 4cb36872a5fe448c205d0b46f0e8c8b57530cfe0 diff --git a/modules/asset_loader/lib/fx-gltf b/modules/asset_loader/lib/fx-gltf index f4f18f2017a049a23748c9c9aad42ba2de20bfd5..7766c237ea81c0bb3759e78e5c0f22854843eef8 160000 --- a/modules/asset_loader/lib/fx-gltf +++ b/modules/asset_loader/lib/fx-gltf @@ -1 +1 @@ -Subproject commit f4f18f2017a049a23748c9c9aad42ba2de20bfd5 +Subproject commit 7766c237ea81c0bb3759e78e5c0f22854843eef8 diff --git a/modules/asset_loader/lib/json b/modules/asset_loader/lib/json index 0972f7ff0e651f09a306dba791cc42024b8642c1..4f8fba14066156b73f1189a2b8bd568bde5284c5 160000 --- a/modules/asset_loader/lib/json +++ b/modules/asset_loader/lib/json @@ -1 +1 @@ -Subproject commit 0972f7ff0e651f09a306dba791cc42024b8642c1 +Subproject commit 4f8fba14066156b73f1189a2b8bd568bde5284c5 diff --git a/modules/asset_loader/lib/stb b/modules/asset_loader/lib/stb index c9064e317699d2e495f36ba4f9ac037e88ee371a..af1a5bc352164740c1cc1354942b1c6b72eacb8a 160000 --- a/modules/asset_loader/lib/stb +++ b/modules/asset_loader/lib/stb @@ -1 +1 @@ -Subproject commit c9064e317699d2e495f36ba4f9ac037e88ee371a +Subproject commit af1a5bc352164740c1cc1354942b1c6b72eacb8a diff --git a/modules/camera/lib/glm b/modules/camera/lib/glm index 66062497b104ca7c297321bd0e970869b1e6ece5..6ad79aae3eb5bf809c30bf1168171e9e55857e45 160000 --- a/modules/camera/lib/glm +++ b/modules/camera/lib/glm @@ -1 +1 @@ -Subproject commit 66062497b104ca7c297321bd0e970869b1e6ece5 +Subproject commit 6ad79aae3eb5bf809c30bf1168171e9e55857e45 diff --git a/modules/gui/lib/imgui b/modules/gui/lib/imgui index d5828cd988db525f27128edeadb1a689cd2d7461..eda7792b151d138e15df951578253b821ceed5a3 160000 --- a/modules/gui/lib/imgui +++ b/modules/gui/lib/imgui @@ -1 +1 @@ -Subproject commit d5828cd988db525f27128edeadb1a689cd2d7461 +Subproject commit eda7792b151d138e15df951578253b821ceed5a3 diff --git a/modules/shader_compiler/lib/glslang b/modules/shader_compiler/lib/glslang index fe15158676657bf965e41c32e15ae5db7ea2ab6a..48fd6c82b3fefb38e59dd799d8b12fddddf8e63c 160000 --- a/modules/shader_compiler/lib/glslang +++ b/modules/shader_compiler/lib/glslang @@ -1 +1 @@ -Subproject commit fe15158676657bf965e41c32e15ae5db7ea2ab6a +Subproject commit 48fd6c82b3fefb38e59dd799d8b12fddddf8e63c diff --git a/modules/upscaling/lib/FidelityFX-FSR b/modules/upscaling/lib/FidelityFX-FSR index bcffc8171efb80e265991301a49670ed755088dd..a21ffb8f6c13233ba336352bdff293894c706575 160000 --- a/modules/upscaling/lib/FidelityFX-FSR +++ b/modules/upscaling/lib/FidelityFX-FSR @@ -1 +1 @@ -Subproject commit bcffc8171efb80e265991301a49670ed755088dd +Subproject commit a21ffb8f6c13233ba336352bdff293894c706575