source: opengl-game/vulkan-utils.hpp@ cc4a8b5

feature/imgui-sdl points-test
Last change on this file since cc4a8b5 was d2d9286, checked in by Dmitry Portnoy <dmp1488@…>, 5 years ago

In vulkangame, implement the renderScene function to draw a frame in Vulkan and implement a test UI overlay

  • Property mode set to 100644
File size: 4.6 KB
Line 
1#ifndef _VULKAN_UTILS_H
2#define _VULKAN_UTILS_H
3
4#include <optional>
5#include <string>
6#include <vector>
7
8#include <vulkan/vulkan.h>
9
10#include <SDL2/SDL.h>
11#include <SDL2/SDL_image.h>
12#include <SDL2/SDL_vulkan.h>
13
14using namespace std;
15
16struct QueueFamilyIndices {
17 optional<uint32_t> graphicsFamily;
18 optional<uint32_t> presentFamily;
19
20 bool isComplete() {
21 return graphicsFamily.has_value() && presentFamily.has_value();
22 }
23};
24
25struct SwapChainSupportDetails {
26 VkSurfaceCapabilitiesKHR capabilities;
27 vector<VkSurfaceFormatKHR> formats;
28 vector<VkPresentModeKHR> presentModes;
29};
30
31struct VulkanImage {
32 VkImage image;
33 VkDeviceMemory imageMemory;
34 VkImageView imageView;
35};
36
37class VulkanUtils {
38 public:
39 static bool checkValidationLayerSupport(const vector<const char*> &validationLayers);
40
41 static VkResult createDebugUtilsMessengerEXT(VkInstance instance,
42 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
43 const VkAllocationCallbacks* pAllocator,
44 VkDebugUtilsMessengerEXT* pDebugMessenger);
45
46 static void destroyDebugUtilsMessengerEXT(VkInstance instance,
47 VkDebugUtilsMessengerEXT debugMessenger,
48 const VkAllocationCallbacks* pAllocator);
49
50 static QueueFamilyIndices findQueueFamilies(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface);
51 static bool checkDeviceExtensionSupport(VkPhysicalDevice physicalDevice,
52 const vector<const char*>& deviceExtensions);
53 static SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice physicalDevice,
54 VkSurfaceKHR surface);
55 static VkSurfaceFormatKHR chooseSwapSurfaceFormat(const vector<VkSurfaceFormatKHR>& availableFormats);
56 static VkPresentModeKHR chooseSwapPresentMode(const vector<VkPresentModeKHR>& availablePresentModes);
57 static VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities, int width, int height);
58 static VkImageView createImageView(VkDevice device, VkImage image, VkFormat format,
59 VkImageAspectFlags aspectFlags);
60 static VkFormat findSupportedFormat(VkPhysicalDevice physicalDevice, const vector<VkFormat>& candidates,
61 VkImageTiling tiling, VkFormatFeatureFlags features);
62 static void createBuffer(VkDevice device, VkPhysicalDevice physicalDevice, VkDeviceSize size,
63 VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer,
64 VkDeviceMemory& bufferMemory);
65 static uint32_t findMemoryType(VkPhysicalDevice physicalDevice, uint32_t typeFilter,
66 VkMemoryPropertyFlags properties);
67
68 static void createVulkanImageFromFile(VkDevice device, VkPhysicalDevice physicalDevice,
69 VkCommandPool commandPool, string filename, VulkanImage& image, VkQueue graphicsQueue);
70 static void createVulkanImageFromSDLTexture(VkDevice device, VkPhysicalDevice physicalDevice,
71 SDL_Texture* texture, VulkanImage& image);
72 static void populateVulkanImageFromSDLTexture(VkDevice device, VkPhysicalDevice physicalDevice,
73 VkCommandPool commandPool, SDL_Texture* texture, SDL_Renderer* renderer, VulkanImage& image,
74 VkQueue graphicsQueue);
75 static void createDepthImage(VkDevice device, VkPhysicalDevice physicalDevice, VkCommandPool commandPool,
76 VkFormat depthFormat, VkExtent2D extent, VulkanImage& image, VkQueue graphicsQueue);
77 static void createImage(VkDevice device, VkPhysicalDevice physicalDevice, uint32_t width, uint32_t height,
78 VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, VkMemoryPropertyFlags properties,
79 VulkanImage& image);
80
81 static void transitionImageLayout(VkDevice device, VkCommandPool commandPool, VkImage image,
82 VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout, VkQueue graphicsQueue);
83 static VkCommandBuffer beginSingleTimeCommands(VkDevice device, VkCommandPool commandPool);
84 static void endSingleTimeCommands(VkDevice device, VkCommandPool commandPool,
85 VkCommandBuffer commandBuffer, VkQueue graphicsQueue);
86 static void copyBufferToImage(VkDevice device, VkCommandPool commandPool, VkBuffer buffer, VkImage image,
87 uint32_t width, uint32_t height, VkQueue graphicsQueue);
88
89 static void copyBuffer(VkDevice device, VkCommandPool commandPool, VkBuffer srcBuffer, VkBuffer dstBuffer,
90 VkDeviceSize srcOffset, VkDeviceSize dstOffset, VkDeviceSize size, VkQueue graphicsQueue);
91
92 static bool hasStencilComponent(VkFormat format);
93
94 static void destroyVulkanImage(VkDevice& device, VulkanImage& image);
95};
96
97#endif // _VULKAN_UTILS_H
Note: See TracBrowser for help on using the repository browser.