umbra/projs/shadow/shadow-renderer/inc/vlkx/vulkan/ValidationAndExtension.h
Curle a370f28f14
Implement a Vulkan Renderer module (#2)
* Starting work on the Vlkx renderer

* Fix renderer implementation

* Move GLM to FetchContent
2022-07-19 20:41:44 +02:00

54 lines
1.3 KiB
C++

#pragma once
#include <vulkan/vulkan.h>
#include <vector>
#include <iostream>
#include <SDL.h>
class ValidationAndExtension {
public:
ValidationAndExtension();
~ValidationAndExtension();
const std::vector<const char*> requiredValidations = {
"VK_LAYER_KHRONOS_validation"
};
VkDebugReportCallbackEXT callback;
bool checkValidationSupport();
std::vector<const char*> getRequiredExtensions(SDL_Window* window, bool validationsRequired);
void setupDebugCallback(bool validationsRequired, VkInstance vulkan);
void destroy(bool validationsRequired, VkInstance vulkan);
VkResult createDebugReportCallbackEXT(
VkInstance vulkan,
const VkDebugReportCallbackCreateInfoEXT* info,
const VkAllocationCallbacks* allocator,
VkDebugReportCallbackEXT* callback) {
auto func = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(vulkan, "vkCreateDebugReportCallbackEXT");
if (func != nullptr) {
return func(vulkan, info, allocator, callback);
} else {
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
}
void destroyDebugReportCallbackEXT(
VkInstance vulkan,
const VkDebugReportCallbackEXT callback,
const VkAllocationCallbacks* allocator) {
auto func = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(vulkan, "vkDestroyDebugReportCallbackEXT");
if (func != nullptr) {
func(vulkan, callback, allocator);
}
}
};