|
@@ -80,7 +80,37 @@ private:
|
|
|
std::size_t num = 0;
|
|
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
|
|
/// Converts a VkResult enum into a rodata string
|
|
|
const char* ToString(VkResult) noexcept;
|
|
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
|
|
} // namespace Vulkan::vk
|