|
|
|
@ -80,7 +80,37 @@ private: |
|
|
|
std::size_t num = 0; |
|
|
|
}; |
|
|
|
|
|
|
|
/// Vulkan exception generated from a VkResult. |
|
|
|
class Exception final : public std::exception { |
|
|
|
public: |
|
|
|
/// Construct the exception with a result. |
|
|
|
/// @pre result != VK_SUCCESS |
|
|
|
explicit Exception(VkResult result_) : result{result_} {} |
|
|
|
virtual ~Exception() = default; |
|
|
|
|
|
|
|
const char* what() const noexcept override; |
|
|
|
|
|
|
|
private: |
|
|
|
VkResult result; |
|
|
|
}; |
|
|
|
|
|
|
|
/// Converts a VkResult enum into a rodata string |
|
|
|
const char* ToString(VkResult) noexcept; |
|
|
|
|
|
|
|
/// Throws a Vulkan exception if result is not success. |
|
|
|
inline void Check(VkResult result) { |
|
|
|
if (result != VK_SUCCESS) { |
|
|
|
throw Exception(result); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// Throws a Vulkan exception if result is an error. |
|
|
|
/// @return result |
|
|
|
inline VkResult Filter(VkResult result) { |
|
|
|
if (result < 0) { |
|
|
|
throw Exception(result); |
|
|
|
} |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
} // namespace Vulkan::vk |