diff --git a/include/vkcv/ShaderStage.hpp b/include/vkcv/ShaderStage.hpp
index 2b6ab23ca623bb837d3e4fd3c5b22ca3b187fd43..24d3e554a6d5cbca828398181ae16565062e4e19 100644
--- a/include/vkcv/ShaderStage.hpp
+++ b/include/vkcv/ShaderStage.hpp
@@ -14,48 +14,51 @@ namespace vkcv {
 	 * @brief Enum class to specify the stage of a shader.
 	 */
 	enum class ShaderStage : VkShaderStageFlags {
-		VERTEX = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eVertex),
+		VERTEX = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eVertex),
 		TESS_CONTROL =
-			static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eTessellationControl),
+			static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::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),
+			static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eTessellationEvaluation),
+		GEOMETRY = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eGeometry),
+		FRAGMENT = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eFragment),
+		COMPUTE = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eCompute),
+		TASK = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eTaskNV),
+		MESH = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eMeshNV),
+		RAY_GEN = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eRaygenKHR),
+		RAY_ANY_HIT = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eAnyHitKHR),
+		RAY_CLOSEST_HIT = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eClosestHitKHR),
+		RAY_MISS = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eMissKHR),
 		RAY_INTERSECTION =
-			static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eIntersectionKHR),
-		RAY_CALLABLE = static_cast<VkShaderStageFlags>(vk::ShaderStageFlagBits::eCallableKHR)
+			static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eIntersectionKHR),
+		RAY_CALLABLE = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eCallableKHR)
 	};
 
-	using ShaderStages = vk::Flags<ShaderStage>;
+	using ShaderStages = VULKAN_HPP_NAMESPACE::Flags<ShaderStage>;
 
 } // namespace vkcv
 
 /**
  * @cond VULKAN_TYPES
  */
-namespace vk {
+namespace VULKAN_HPP_NAMESPACE {
 
 	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))
-		};
+		static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true;
+		static VULKAN_HPP_CONST_OR_CONSTEXPR Flags<vkcv::ShaderStage> allFlags =
+				vkcv::ShaderStage::VERTEX
+				| vkcv::ShaderStage::TESS_CONTROL
+				| vkcv::ShaderStage::TESS_EVAL
+				| vkcv::ShaderStage::GEOMETRY
+				| vkcv::ShaderStage::FRAGMENT
+				| vkcv::ShaderStage::TASK
+				| vkcv::ShaderStage::MESH
+				| vkcv::ShaderStage::RAY_GEN
+				| vkcv::ShaderStage::RAY_ANY_HIT
+				| vkcv::ShaderStage::RAY_CLOSEST_HIT
+				| vkcv::ShaderStage::RAY_MISS
+				| vkcv::ShaderStage::RAY_INTERSECTION
+				| vkcv::ShaderStage::RAY_CALLABLE;
 	};
 
 } // namespace vk
@@ -65,8 +68,8 @@ namespace vk {
 
 namespace vkcv {
 
-	constexpr vk::ShaderStageFlags getShaderStageFlags(ShaderStages shaderStages) noexcept {
-		return vk::ShaderStageFlags(static_cast<VkShaderStageFlags>(shaderStages));
+	constexpr VULKAN_HPP_NAMESPACE::ShaderStageFlags getShaderStageFlags(ShaderStages shaderStages) noexcept {
+		return VULKAN_HPP_NAMESPACE::ShaderStageFlags(static_cast<VkShaderStageFlags>(shaderStages));
 	}
 
 	constexpr ShaderStages operator|(ShaderStage stage0, ShaderStage stage1) noexcept {
diff --git a/lib/Vulkan-Headers b/lib/Vulkan-Headers
index 8ba8294c86d0e99fcb457bedbd573dd678ccc9b3..b092b2fccc812453c1d0ec0a829eb8f34f174803 160000
--- a/lib/Vulkan-Headers
+++ b/lib/Vulkan-Headers
@@ -1 +1 @@
-Subproject commit 8ba8294c86d0e99fcb457bedbd573dd678ccc9b3
+Subproject commit b092b2fccc812453c1d0ec0a829eb8f34f174803
diff --git a/lib/Vulkan-Hpp b/lib/Vulkan-Hpp
index ef609a2f77dd1756e672712f264e76b64acdba61..a577b390e8651e9b1351d7c6839a4f43303c0f34 160000
--- a/lib/Vulkan-Hpp
+++ b/lib/Vulkan-Hpp
@@ -1 +1 @@
-Subproject commit ef609a2f77dd1756e672712f264e76b64acdba61
+Subproject commit a577b390e8651e9b1351d7c6839a4f43303c0f34
diff --git a/lib/VulkanMemoryAllocator b/lib/VulkanMemoryAllocator
index c351692490513cdb0e5a2c925aaf7ea4a9b672f4..73d13a83ede142fa030d84e603a313831fcc424a 160000
--- a/lib/VulkanMemoryAllocator
+++ b/lib/VulkanMemoryAllocator
@@ -1 +1 @@
-Subproject commit c351692490513cdb0e5a2c925aaf7ea4a9b672f4
+Subproject commit 73d13a83ede142fa030d84e603a313831fcc424a
diff --git a/lib/VulkanMemoryAllocator-Hpp b/lib/VulkanMemoryAllocator-Hpp
index e00a0b1ab8bba230e8c701423540ff3828aea2d5..62b1d32e96acf36f6da619d3f818d2edc7cbbc7b 160000
--- a/lib/VulkanMemoryAllocator-Hpp
+++ b/lib/VulkanMemoryAllocator-Hpp
@@ -1 +1 @@
-Subproject commit e00a0b1ab8bba230e8c701423540ff3828aea2d5
+Subproject commit 62b1d32e96acf36f6da619d3f818d2edc7cbbc7b
diff --git a/projects/rtx_ambient_occlusion/src/RTX/RTX.cpp b/projects/rtx_ambient_occlusion/src/RTX/RTX.cpp
index bd5453abae353eed6739c41dbff084a0c909aaca..acefa3cb92c2646bafccc85bf75015f17a30313d 100644
--- a/projects/rtx_ambient_occlusion/src/RTX/RTX.cpp
+++ b/projects/rtx_ambient_occlusion/src/RTX/RTX.cpp
@@ -280,7 +280,7 @@ namespace vkcv::rtx {
             shaderStages.data(), // const vk::PipelineShaderStageCreateInfo* pStages_ = {}
             (uint32_t) shaderGroups.size(), // uint32_t groupCount_ = {}
             shaderGroups.data(), // const vk::RayTracingShaderGroupCreateInfoKHR* pGroups_ = {}
-            16, // uint32_t maxPipelineRayRecursionDepth_ = {}
+            1, // uint32_t maxPipelineRayRecursionDepth_ = {}
             &rtxPipelineLibraryCreateInfo, // const vk::PipelineLibraryCreateInfoKHR* pLibraryInfo_ = {}
             nullptr, // const vk::RayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface_ = {}
             nullptr, // const vk::PipelineDynamicStateCreateInfo* pDynamicState_ = {}