diff --git a/src/graphics/vulkan/vk_engine.cpp b/src/graphics/vulkan/vk_engine.cpp index 99b94292..804b617f 100644 --- a/src/graphics/vulkan/vk_engine.cpp +++ b/src/graphics/vulkan/vk_engine.cpp @@ -49,6 +49,25 @@ constexpr bool bUseValidationLayers = false; constexpr bool bUseValidationLayers = true; #endif +void VulkanEngine::Instance::init() { + vkb::InstanceBuilder builder; + auto inst_ret = builder.set_app_name("TODO: PUT APP NAME HERE") + .set_engine_name("rainsystem") + .request_validation_layers(bUseValidationLayers) + .set_debug_callback(debugCallback) + .require_api_version(1, 3, 0) + .build(); + if (!inst_ret) { + LOGE("Failed to create Vulkan instance. Error: {}", + inst_ret.error().message()); + } + instance = inst_ret.value(); +} + +VulkanEngine::Instance::~Instance() { + vkb::destroy_instance(instance); +} + VKAPI_ATTR VkBool32 VKAPI_CALL VulkanEngine::debugCallback( VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, diff --git a/src/include/graphics/vulkan/vk_engine.h b/src/include/graphics/vulkan/vk_engine.h index 40db0c65..4e2db9b5 100644 --- a/src/include/graphics/vulkan/vk_engine.h +++ b/src/include/graphics/vulkan/vk_engine.h @@ -64,6 +64,34 @@ struct DrawContext { class VulkanEngine { public: + struct Instance { + vkb::Instance instance; + void init(); + ~Instance(); + }; + Instance _instance; + + struct Device { + vkb::Device device; + void init(const vkb::PhysicalDevice& physical_device) { + const vkb::DeviceBuilder device_builder{physical_device}; + auto dev_ret = device_builder.build(); + if (!dev_ret) { + LOGE("Failed to create logical device. Error: {}", + dev_ret.error().message()); + } + device = dev_ret.value(); + } + ~Device() {vkb::destroy_device(device);} + }; + Device _device; + VkDevice getRawDevice() const { return _device.device; } + struct Allocator { + VmaAllocator _allocator{nullptr}; + void init(VmaAllocatorCreateInfo info) {vmaCreateAllocator(&info, &_allocator);} // move info inside + ~Allocator() {vmaDestroyAllocator(_allocator);} + }; + Allocator _a; // todo: rename Pipelines pipelines;