forked from ShuriZma/suyu
1
0
Fork 0

renderer_vulkan/wrapper: Add exception class

This commit is contained in:
ReinUsesLisp 2020-03-27 02:50:27 -03:00
parent f5cee0e885
commit 3f0b7673f0
2 changed files with 34 additions and 0 deletions

View File

@ -14,6 +14,10 @@
namespace Vulkan::vk { namespace Vulkan::vk {
const char* Exception::what() const noexcept {
return ToString(result);
}
const char* ToString(VkResult result) noexcept { const char* ToString(VkResult result) noexcept {
switch (result) { switch (result) {
case VkResult::VK_SUCCESS: case VkResult::VK_SUCCESS:

View File

@ -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