feat(renderer/vk): create swapchain images
	
		
			
	
		
	
	
		
	
		
			Some checks reported errors
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build was killed
				
			
		
		
	
	
				
					
				
			
		
			Some checks reported errors
		
		
	
	continuous-integration/drone/push Build was killed
				
			This commit is contained in:
		
							parent
							
								
									f268724034
								
							
						
					
					
						commit
						607e6864b4
					
				
					 2 changed files with 44 additions and 7 deletions
				
			
		| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
 | 
					#include <ranges>
 | 
				
			||||||
#include <renderer/vk/context.hpp>
 | 
					#include <renderer/vk/context.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(_WIN32)
 | 
					#if defined(_WIN32)
 | 
				
			||||||
| 
						 | 
					@ -134,15 +135,23 @@ Context::~Context()
 | 
				
			||||||
		if (m_device)
 | 
							if (m_device)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			vkc(vk_device_wait_idle(m_device));
 | 
								vkc(vk_device_wait_idle(m_device));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								for (auto &view : m_swapchain_image_views)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									vk_destroy_image_view(m_device, view, nullptr);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			vk_destroy_swapchain_khr(m_device, m_swapchain, nullptr);
 | 
								vk_destroy_swapchain_khr(m_device, m_swapchain, nullptr);
 | 
				
			||||||
			vk_destroy_device(m_device, nullptr);
 | 
								vk_destroy_device(m_device, nullptr);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (m_instance)
 | 
							if (m_instance)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			vk_destroy_surface_khr(m_instance, m_surface, nullptr);
 | 
								vk_destroy_surface_khr(m_instance, m_surface, nullptr);
 | 
				
			||||||
			vk_destroy_debug_messenger(m_instance, m_debug_messenger, nullptr);
 | 
								vk_destroy_debug_messenger(m_instance, m_debug_messenger, nullptr);
 | 
				
			||||||
 | 
								// TODO(Light): fix this issue
 | 
				
			||||||
 | 
								// @ref:
 | 
				
			||||||
 | 
								// https://git.light7734.com/light7734/light/commit/f268724034a2ceb63b90dc13aedf86a1eecac62e
 | 
				
			||||||
			// vk_destroy_instance(m_instance, nullptr);
 | 
								// vk_destroy_instance(m_instance, nullptr);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -279,7 +288,7 @@ void Context::initialize_logical_device()
 | 
				
			||||||
		.pEnabledFeatures = &physical_device_features,
 | 
							.pEnabledFeatures = &physical_device_features,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ensure(
 | 
						ensuree
 | 
				
			||||||
	    !vk_create_device(m_physical_device, &device_info, nullptr, &m_device),
 | 
						    !vk_create_device(m_physical_device, &device_info, nullptr, &m_device),
 | 
				
			||||||
	    "Failed to create logical vulkan device"
 | 
						    "Failed to create logical vulkan device"
 | 
				
			||||||
	);
 | 
						);
 | 
				
			||||||
| 
						 | 
					@ -402,11 +411,37 @@ void Context::initialize_swapchain()
 | 
				
			||||||
	vkc(vk_create_swapchain_khr(m_device, &create_info, nullptr, &m_swapchain));
 | 
						vkc(vk_create_swapchain_khr(m_device, &create_info, nullptr, &m_swapchain));
 | 
				
			||||||
	vkc(vk_device_wait_idle(m_device));
 | 
						vkc(vk_device_wait_idle(m_device));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// auto image_count = uint32_t { 0u };
 | 
						auto image_count = uint32_t { 0u };
 | 
				
			||||||
	// vk_get_swapchain_images_khr(m_device, m_swapchain, &image_count, nullptr);
 | 
						vk_get_swapchain_images_khr(m_device, m_swapchain, &image_count, nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// m_swapchain_images.resize(image_count);
 | 
						m_swapchain_images.resize(image_count);
 | 
				
			||||||
	// vk_get_swapchain_images_khr(m_device, m_swapchain, &image_count, m_swapchain_images.data());
 | 
						m_swapchain_image_views.resize(image_count);
 | 
				
			||||||
 | 
						vk_get_swapchain_images_khr(m_device, m_swapchain, &image_count, m_swapchain_images.data());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (auto [image, view] : std::views::zip(m_swapchain_images, m_swapchain_image_views))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							auto create_info = VkImageViewCreateInfo {
 | 
				
			||||||
 | 
								.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
 | 
				
			||||||
 | 
								.image = image,
 | 
				
			||||||
 | 
								.viewType = VK_IMAGE_VIEW_TYPE_2D,
 | 
				
			||||||
 | 
								.format = surface_format.format,
 | 
				
			||||||
 | 
					            .components = VkComponentMapping {
 | 
				
			||||||
 | 
					                .r = VK_COMPONENT_SWIZZLE_IDENTITY,
 | 
				
			||||||
 | 
					                .g = VK_COMPONENT_SWIZZLE_IDENTITY,
 | 
				
			||||||
 | 
					                .b = VK_COMPONENT_SWIZZLE_IDENTITY,
 | 
				
			||||||
 | 
					                .a = VK_COMPONENT_SWIZZLE_IDENTITY,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            .subresourceRange = VkImageSubresourceRange {
 | 
				
			||||||
 | 
					                .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
 | 
				
			||||||
 | 
					                .baseMipLevel = 0u,
 | 
				
			||||||
 | 
					                .levelCount = 1u,
 | 
				
			||||||
 | 
					                .baseArrayLayer = 0u,
 | 
				
			||||||
 | 
					                .layerCount = 1u,
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							vkc(vk_create_image_view(m_device, &create_info, nullptr, &view));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
auto Context::get_optimal_swapchain_image_count(
 | 
					auto Context::get_optimal_swapchain_image_count(
 | 
				
			||||||
| 
						 | 
					@ -626,7 +661,7 @@ auto validation_layers_callback(
 | 
				
			||||||
) -> VkBool32
 | 
					) -> VkBool32
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	log_dbg("VALIDATION: {}", callback_data->pMessage);
 | 
						log_dbg("VALIDATION: {}", callback_data->pMessage);
 | 
				
			||||||
	return VK_FALSE; // TODO(Light): fix this mess!
 | 
						ensure(vulkan_user_data, "Validation layers's user data is not set!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	auto stats = *(Ref<app::SystemStats> *)vulkan_user_data; // NOLINT
 | 
						auto stats = *(Ref<app::SystemStats> *)vulkan_user_data; // NOLINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -206,6 +206,8 @@ private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	std::vector<VkImage> m_swapchain_images;
 | 
						std::vector<VkImage> m_swapchain_images;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						std::vector<VkImageView> m_swapchain_image_views;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Ref<app::SystemStats> m_stats;
 | 
						Ref<app::SystemStats> m_stats;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue