35 template<
typename TRHI>
38 return static_cast<TRHI*
>(GDynamicRHI);
168 virtual bool Init()
override;
211 return m_VulkanInstance;
271 VkFormat
FindSupportedFormat(
const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features)
const;
295 uint32_t
FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
342 inline GLFWwindow* GetSurfaceWindow()
const {
return m_WindowHandle; }
343 inline VkSurfaceKHR GetSurface()
const {
return m_Surface; }
392 void ComputeNumberOfSwapchainImagesSupported();
404 bool CheckDeviceExtensionSupport(VkPhysicalDevice device);
414 bool IsDeviceSuitable(VkPhysicalDevice device);
424 void PrintAvailablePhysicalDevices(
const std::vector<VkPhysicalDevice>& physicalDevices);
443 VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,
444 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
445 const VkAllocationCallbacks* pAllocator,
446 VkDebugUtilsMessengerEXT* pDebugMessenger);
458 void DestroyDebugUtilsMessengerEXT(VkInstance instance,
459 VkDebugUtilsMessengerEXT debugMessenger,
460 const VkAllocationCallbacks* pAllocator);
472 void PrintAvailableExtensions();
487 std::vector<const char*> GetRequiredExtensions(VkInstanceCreateFlags& flagsToBeSet);
498 bool CheckValidationLayerSupport();
512 void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
526 static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
527 VkDebugUtilsMessageTypeFlagsEXT messageType,
528 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
533 static std::vector<const char*> deviceExtensions;
534 static const std::vector<const char*> validationLayers;
537 uint32_t m_APIVersion;
538 VkInstance m_VulkanInstance;
539 FVulkanDevice* m_Device;
540 static bool bEnableValidationLayers;
541 VkDebugUtilsMessengerEXT m_DebugMessenger;
542 GLFWwindow* m_WindowHandle;
543 VkSurfaceKHR m_Surface;
544 VkPhysicalDeviceFeatures m_SupportedDeviceFeatures;
545 VkPhysicalDevice m_PhysicalDevice = VK_NULL_HANDLE;
546 SwapChainSupportDetails m_GPUSwapChainSupport;
547 uint32_t m_SwapChainImageCount;
549 std::set<VulkanUniformBuffer*> m_VulkanUBO;
#define FORCEINLINE
Typical inlining macro for clarity.
Definition Core.h:170
Declaration of the FVulkanDevice class for managing Vulkan device resources.
FORCEINLINE TRHI * GetDynamicRHI()
Template function to get the dynamic RHI instance casted to the specified type.
Definition VulkanDynamicRHI.h:36
Manages Vulkan device resources and operations.
Definition VulkanDevice.h:33
void RegisterUniformBufferObject(VulkanUniformBuffer *ubo)
Register a uniformbuffer object to curate an array or uniformbuffers.
Definition VulkanRHI.cpp:558
void CreateSurface()
Platform agnostic creation of surface to present rendered images to. Typically they are backed by the...
Definition VulkanRHI.cpp:137
const SwapChainSupportDetails & GetGpuSwapChainSupportDetails() const
Getter for m_GPUSwapChainSupport struct which gets initialized in FVulkanDynamicRHI::IsDeviceSuitable...
Definition VulkanDynamicRHI.h:255
void UploadUniformBufferObjects(size_t frameIndex)
Uploads data to the registered VulkanUniformBuffers for the specified frame index.
Definition VulkanRHI.cpp:563
void SetupDebugMessenger()
Sets up the debug messenger for Vulkan instance.
Definition VulkanRHI.cpp:121
const VkPhysicalDeviceFeatures & GetGpuDeviceFeatures() const
Getter for m_SupportedDeviceFeatures which contains boolean values for supported features like availa...
Definition VulkanDynamicRHI.h:248
SwapChainSupportDetails QuerySwapChainSupport(VkPhysicalDevice device)
Uses Two-Pass Query to gather surface formats (physical device and surface paired color space or pixe...
Definition VulkanRHI.cpp:273
uint32_t SwapChainImageCount() const
Getter for the number of supported swapchain images.
Definition VulkanDynamicRHI.h:262
VkFormat FindDepthFormat() const
Finds an appropriate depth format for depth resources.
Definition VulkanRHI.cpp:202
FVulkanDevice * GetDevice() const
Getter for FVulkanDevice object created in FVulkanDynamicRHI::SelectDevice().
Definition VulkanDynamicRHI.h:219
virtual bool Init() override
For initializing VulkanDynamic RHI.
Definition VulkanRHI.cpp:27
void SelectDevice()
Picks an Engine appropriate GPU and creates FVulkanDevice.
Definition VulkanRHI.cpp:211
void CreateInstance()
Creates a Vulkan instance.
Definition VulkanRHI.cpp:61
VkInstance GetInstance() const
Getter for Vulkan instance.
Definition VulkanDynamicRHI.h:209
static FVulkanDynamicRHI & Get()
Getter for the FVulkanDynamicRHI instance.
Definition VulkanDynamicRHI.h:138
QueueFamilyIndices FindQueueFamilies(VkPhysicalDevice device)
Queries the graphics card for available queue families and compares against the availability of graph...
Definition VulkanRHI.cpp:352
virtual void Shutdown() override
Shuts down the RHI.
Definition VulkanRHI.cpp:42
bool GetValidationLayersSetting() const
Getter for the boolean bEnableValidationLayers.
Definition VulkanDynamicRHI.h:240
virtual void Present() override
Presents the rendered frame to the display.
Definition VulkanDynamicRHI.h:194
VkFormat FindSupportedFormat(const std::vector< VkFormat > &candidates, VkImageTiling tiling, VkFormatFeatureFlags features) const
Finds a supported format from the list of candidate formats based on the desired tiling and features....
Definition VulkanRHI.cpp:182
void InitInstance()
Calls FVulkanDevice::InitGPU() to create Vulkan logical device from selected GPU, and created appropr...
Definition VulkanRHI.cpp:37
uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties)
Finds appropriate memory type with demanded properties. Basically a loop is run from counter i = 0 to...
Definition VulkanRHI.cpp:165
FVulkanDynamicRHI()
Initialization constructor.
Definition VulkanRHI.cpp:17
Definition VulkanRHI.h:18
A structure for graphics and present queuefamilies.
Definition VulkanDynamicRHI.h:55
bool IsComplete()
Routine for querying if appropriate queue families (graphicsFamily and presentFamily) are available.
Definition VulkanDynamicRHI.h:82
std::optional< uint32_t > graphicsFamily
The queues in this queue family support graphics operations.
Definition VulkanDynamicRHI.h:62
std::optional< uint32_t > presentFamily
The queues in this queue family support image presentation.
Definition VulkanDynamicRHI.h:74
Structure with data required for appropriate creation and working of swapchain.
Definition VulkanDynamicRHI.h:99
VkSurfaceCapabilitiesKHR capabilities
Basic surface capabilities (min/max number of images in swap chain, min/max width and height of image...
Definition VulkanDynamicRHI.h:106
std::vector< VkPresentModeKHR > presentModes
Available presentation modes.
Definition VulkanDynamicRHI.h:120
std::vector< VkSurfaceFormatKHR > formats
Surface formats (pixel format, color space).
Definition VulkanDynamicRHI.h:113