2#include <UnCompute/Base/Logger.h>
13 constexpr auto RequiredInstanceExtensions = std::array{ VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
14 VK_EXT_DEBUG_UTILS_EXTENSION_NAME,
15 VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME };
17 constexpr auto DescriptorTypeMaxValue = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT + 1;
20 inline bool Succeeded(VkResult result)
22 return result == VK_SUCCESS;
26 inline bool Failed(VkResult result)
28 return result != VK_SUCCESS;
31 inline const char* VulkanResultToString(VkResult result)
36 case VK_SUCCESS:
return "VkResult::VK_SUCCESS";
37 case VK_NOT_READY:
return "VkResult::VK_NOT_READY";
38 case VK_TIMEOUT:
return "VkResult::VK_TIMEOUT";
39 case VK_EVENT_SET:
return "VkResult::VK_EVENT_SET";
40 case VK_EVENT_RESET:
return "VkResult::VK_EVENT_RESET";
41 case VK_INCOMPLETE:
return "VkResult::VK_INCOMPLETE";
42 case VK_ERROR_OUT_OF_HOST_MEMORY:
return "VkResult::VK_ERROR_OUT_OF_HOST_MEMORY";
43 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
return "VkResult::VK_ERROR_OUT_OF_DEVICE_MEMORY";
44 case VK_ERROR_INITIALIZATION_FAILED:
return "VkResult::VK_ERROR_INITIALIZATION_FAILED";
45 case VK_ERROR_DEVICE_LOST:
return "VkResult::VK_ERROR_DEVICE_LOST";
46 case VK_ERROR_MEMORY_MAP_FAILED:
return "VkResult::VK_ERROR_MEMORY_MAP_FAILED";
47 case VK_ERROR_LAYER_NOT_PRESENT:
return "VkResult::VK_ERROR_LAYER_NOT_PRESENT";
48 case VK_ERROR_EXTENSION_NOT_PRESENT:
return "VkResult::VK_ERROR_EXTENSION_NOT_PRESENT";
49 case VK_ERROR_FEATURE_NOT_PRESENT:
return "VkResult::VK_ERROR_FEATURE_NOT_PRESENT";
50 case VK_ERROR_INCOMPATIBLE_DRIVER:
return "VkResult::VK_ERROR_INCOMPATIBLE_DRIVER";
51 case VK_ERROR_TOO_MANY_OBJECTS:
return "VkResult::VK_ERROR_TOO_MANY_OBJECTS";
52 case VK_ERROR_FORMAT_NOT_SUPPORTED:
return "VkResult::VK_ERROR_FORMAT_NOT_SUPPORTED";
53 case VK_ERROR_FRAGMENTED_POOL:
return "VkResult::VK_ERROR_FRAGMENTED_POOL";
54 case VK_ERROR_UNKNOWN:
return "VkResult::VK_ERROR_UNKNOWN";
55 case VK_ERROR_OUT_OF_POOL_MEMORY:
return "VkResult::VK_ERROR_OUT_OF_POOL_MEMORY";
56 case VK_ERROR_INVALID_EXTERNAL_HANDLE:
return "VkResult::VK_ERROR_INVALID_EXTERNAL_HANDLE";
57 case VK_ERROR_FRAGMENTATION:
return "VkResult::VK_ERROR_FRAGMENTATION";
58 case VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS:
return "VkResult::VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS";
59 case VK_ERROR_VALIDATION_FAILED_EXT:
return "VkResult::VK_ERROR_VALIDATION_FAILED_EXT";
62 UN_Assert(
false,
"VkResult was unknown");
63 return "VkResult::<UNKNOWN>";
67 inline ResultCode VulkanConvert(VkResult result)
72 return ResultCode::Success;
74 return ResultCode::Timeout;
75 case VK_ERROR_OUT_OF_HOST_MEMORY:
76 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
77 case VK_ERROR_OUT_OF_POOL_MEMORY:
78 return ResultCode::OutOfMemory;
80 return ResultCode::Fail;
86struct fmt::formatter<VkResult> : fmt::formatter<std::string_view>
88 template<
typename FormatContext>
89 auto format(
const VkResult& result, FormatContext& ctx)
const ->
decltype(ctx.out())
91 return fmt::format_to(ctx.out(),
"{}", UN::VulkanResultToString(result));