From 7f14138e1baa2c40fb30d90ebcd45ad17b12e0a3 Mon Sep 17 00:00:00 2001 From: Chuyan Zhang Date: Mon, 9 Sep 2024 00:30:29 -0700 Subject: Fixing swapchain --- src/vulkan_helper.h | 76 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 11 deletions(-) (limited to 'src/vulkan_helper.h') diff --git a/src/vulkan_helper.h b/src/vulkan_helper.h index b6f270a..ebdd691 100644 --- a/src/vulkan_helper.h +++ b/src/vulkan_helper.h @@ -1,19 +1,20 @@ #include #include +#include #include #include #include #include -#define CHECK_VULKAN(result) \ - do { \ - VkResult res = result; \ - if (res != VK_SUCCESS) { \ - /* TODO: throw error instead of returning */ \ - std::cerr << "Vulkan error: " << res << std::endl; \ - abort(); \ - } \ +#define CHECK_VULKAN(result) \ + do { \ + VkResult res = result; \ + if (res != VK_SUCCESS) { \ + /* TODO: throw error instead of returning */ \ + std::cerr << "Vulkan error: " << string_VkResult(res) << std::endl; \ + abort(); \ + } \ } while (0) namespace iris { @@ -25,8 +26,11 @@ struct Buffer_t { VkBufferUsageFlags flags; VkDeviceSize size; + void *mapped_data = nullptr; ~Buffer_t(); + void* map(); + void unmap(); }; typedef std::shared_ptr Buffer; @@ -36,6 +40,7 @@ struct Texture2D_t { VmaAllocator allocator; VmaAllocation allocation; VkImageView image_view; + VkImageLayout layout; VkImageUsageFlags flags; VkExtent2D extent; @@ -45,6 +50,22 @@ struct Texture2D_t { typedef std::shared_ptr Texture2D; +// This is a really brute-force implementation, +// every command pool contains only 1 command buffer +struct CommandBuffer { + VkDevice device; + VkCommandPool pool; + VkCommandBuffer buffer; + VkFence fence; + VkQueue queue; + + CommandBuffer(VkDevice device, uint32_t queue_family_index, VkQueue queue); + ~CommandBuffer(); + + void begin(VkCommandBufferUsageFlags flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); + void submit_sync(); +}; + struct Device { VkInstance instance; VkPhysicalDevice physical_device; @@ -52,22 +73,55 @@ struct Device { uint32_t main_queue_family_index; VkQueue graphics_queue; VmaAllocator allocator; +#ifdef USE_VULKAN_VALIDATION_LAYERS + VkDebugReportCallbackEXT debugReportCallback; +#endif + Device() = delete; Device( std::vector layers, std::vector instance_extensions); - ~Device(); + void destroy(); + + Buffer_t create_buffer_raw( + VkDeviceSize size, + VkBufferUsageFlags usage, + VmaAllocationCreateInfo create_info = { + .usage = VMA_MEMORY_USAGE_AUTO, + }); + + Texture2D_t create_texture_raw( + VkExtent2D extent, + VkFormat format, + VkImageUsageFlags usage, + VmaAllocationCreateInfo create_info = { + .usage = VMA_MEMORY_USAGE_AUTO, + }); Buffer create_buffer( VkDeviceSize size, VkBufferUsageFlags usage, - VmaMemoryUsage memory_usage = VMA_MEMORY_USAGE_AUTO); + VmaAllocationCreateInfo create_info = { + .usage = VMA_MEMORY_USAGE_AUTO, + }); Texture2D create_texture( VkExtent2D extent, VkFormat format, VkImageUsageFlags usage, - VmaMemoryUsage memory_usage = VMA_MEMORY_USAGE_AUTO); + VmaAllocationCreateInfo create_info = { + .usage = VMA_MEMORY_USAGE_AUTO, + }); + + Texture2D create_texture_from_image( + const char* filename, + VkFormat format, + VkImageUsageFlags usage, + VmaAllocationCreateInfo create_info = { + .usage = VMA_MEMORY_USAGE_AUTO, + }); + + CommandBuffer create_command_buffer(); }; } // namespace iris \ No newline at end of file -- cgit v1.2.3-70-g09d2