renderer_vulkan/wrapper: Add exception class
This commit is contained in:
		@@ -14,6 +14,10 @@
 | 
			
		||||
 | 
			
		||||
namespace Vulkan::vk {
 | 
			
		||||
 | 
			
		||||
const char* Exception::what() const noexcept {
 | 
			
		||||
    return ToString(result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char* ToString(VkResult result) noexcept {
 | 
			
		||||
    switch (result) {
 | 
			
		||||
    case VkResult::VK_SUCCESS:
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user