Program Listing for File VulkanDevice.hpp
↰ Return to documentation for file (Src/GraphicsEngineVulkan/vulkan_base/VulkanDevice.hpp
)
#pragma once
#include <vulkan/vulkan.h>
#include <vector>
#include "renderer/QueueFamilyIndices.hpp"
#include "renderer/SwapChainDetails.hpp"
#include "vulkan_base/VulkanInstance.hpp"
namespace Kataglyphis {
class VulkanDevice
{
public:
VulkanDevice(VulkanInstance *instance, VkSurfaceKHR *surface);
VkPhysicalDeviceProperties getPhysicalDeviceProperties() { return device_properties; };
VkPhysicalDevice getPhysicalDevice() const { return physical_device; };
VkDevice getLogicalDevice() const { return logical_device; };
Kataglyphis::VulkanRendererInternals::QueueFamilyIndices getQueueFamilies();
VkQueue getGraphicsQueue() const { return graphics_queue; };
VkQueue getComputeQueue() const { return compute_queue; };
VkQueue getPresentationQueue() const { return presentation_queue; };
Kataglyphis::VulkanRendererInternals::SwapChainDetails getSwapchainDetails();
bool supportsHardwareAcceleratedRRT() { return deviceSupportsHardwareAcceleratedRRT; };
void cleanUp();
~VulkanDevice();
private:
VkPhysicalDevice physical_device;
VkPhysicalDeviceProperties device_properties;
VkDevice logical_device;
VulkanInstance *instance;
VkSurfaceKHR *surface;
// available queues
VkQueue graphics_queue;
VkQueue presentation_queue;
VkQueue compute_queue;
bool deviceSupportsHardwareAcceleratedRRT = true;
void get_physical_device();
void create_logical_device();
Kataglyphis::VulkanRendererInternals::QueueFamilyIndices getQueueFamilies(VkPhysicalDevice physical_device);
Kataglyphis::VulkanRendererInternals::SwapChainDetails getSwapchainDetails(VkPhysicalDevice device);
bool check_device_suitable(VkPhysicalDevice device);
bool check_device_extension_support(VkPhysicalDevice device);
const std::vector<const char *> device_extensions = {
VK_KHR_SWAPCHAIN_EXTENSION_NAME
};
// DEVICE EXTENSIONS FOR RAYTRACING
const std::vector<const char *> device_extensions_for_raytracing = {
// raytracing related extensions
VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME,
VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME,
// required from VK_KHR_acceleration_structure
VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME,
VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME,
// required for pipeline
VK_KHR_SPIRV_1_4_EXTENSION_NAME,
// required by VK_KHR_spirv_1_4
VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME,
// required for pipeline library
VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME,
// lets start ray queries
VK_KHR_RAY_QUERY_EXTENSION_NAME
};
};
}// namespace Kataglyphis