mirror of
https://github.com/PancakeTAS/lsfg-vk.git
synced 2025-10-30 07:01:10 +00:00
46 lines
1.4 KiB
C++
46 lines
1.4 KiB
C++
#include "instance.hpp"
|
|
#include "utils/exceptions.hpp"
|
|
|
|
#include <vector>
|
|
|
|
using namespace Vulkan;
|
|
|
|
const std::vector<const char*> requiredExtensions = {
|
|
|
|
};
|
|
|
|
const std::vector<const char*> requiredLayers = {
|
|
"VK_LAYER_KHRONOS_validation"
|
|
};
|
|
|
|
Instance::Instance() {
|
|
// create Vulkan instance
|
|
const VkApplicationInfo appInfo{
|
|
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
|
|
.pApplicationName = "lsfg-vk-base",
|
|
.applicationVersion = VK_MAKE_VERSION(0, 0, 1),
|
|
.pEngineName = "lsfg-vk-base",
|
|
.engineVersion = VK_MAKE_VERSION(0, 0, 1),
|
|
.apiVersion = VK_API_VERSION_1_4
|
|
};
|
|
const VkInstanceCreateInfo createInfo{
|
|
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
|
|
.pApplicationInfo = &appInfo,
|
|
.enabledLayerCount = static_cast<uint32_t>(requiredLayers.size()),
|
|
.ppEnabledLayerNames = requiredLayers.data(),
|
|
.enabledExtensionCount = static_cast<uint32_t>(requiredExtensions.size()),
|
|
.ppEnabledExtensionNames = requiredExtensions.data()
|
|
};
|
|
VkInstance instanceHandle{};
|
|
auto res = vkCreateInstance(&createInfo, nullptr, &instanceHandle);
|
|
if (res != VK_SUCCESS)
|
|
throw ls::vulkan_error(res, "Failed to create Vulkan instance");
|
|
|
|
// store in shared ptr
|
|
this->instance = std::shared_ptr<VkInstance>(
|
|
new VkInstance(instanceHandle),
|
|
[](VkInstance* instance) {
|
|
vkDestroyInstance(*instance, nullptr);
|
|
}
|
|
);
|
|
}
|