19 surfaceExtent({ windowDimensions.width, windowDimensions.height } );
41 vkDestroySemaphore(device,
_frames[i]._presentSemaphore,
nullptr);
42 vkDestroySemaphore(device,
_frames[i]._renderSemaphore,
nullptr);
43 vkDestroyFence(device,
_frames[i]._renderFence._handle,
nullptr);
62 swapchainBuilder.set_old_swapchain(
_swapChain );
68 auto vkbSwapchain = swapchainBuilder.set_desired_format( { VK_FORMAT_A2R10G10B10_UNORM_PACK32, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR } )
69 .set_desired_format( { VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR } )
70 .set_desired_format( { VK_FORMAT_B8G8R8A8_SRGB, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR } )
71 .add_fallback_format( { VK_FORMAT_R8G8B8A8_SRGB, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR } )
72 .set_desired_present_mode( vSync ? VK_PRESENT_MODE_FIFO_KHR : VK_PRESENT_MODE_IMMEDIATE_KHR )
73 .add_fallback_present_mode( VK_PRESENT_MODE_FIFO_KHR )
74 .set_desired_extent( surfaceExtent().width, surfaceExtent().height )
90 if (
_swapChain.image_format == VK_FORMAT_UNDEFINED )
97 const VkFenceCreateInfo fenceCreateInfo =
vk::fenceCreateInfo( VK_FENCE_CREATE_SIGNALED_BIT );
103 VK_CHECK( vkCreateSemaphore( device, &semaphoreCreateInfo,
nullptr, &
_frames[i]._presentSemaphore ) );
104 VK_CHECK( vkCreateSemaphore( device, &semaphoreCreateInfo,
nullptr, &
_frames[i]._renderSemaphore ) );
105 VK_CHECK( vkCreateFence( device, &fenceCreateInfo,
nullptr, &
_frames[i]._renderFence._handle ) );
106 VK_CHECK( vkAllocateCommandBuffers( device, &cmdAllocInfo, &
_frames[i]._commandBuffer ) );
107 _frames[i]._renderFence._tag = i;
111 surfaceExtent( VkExtent2D{ windowDimensions.width, windowDimensions.height } );
133 VkResult ret = VK_ERROR_UNKNOWN;
139 if ( ret == VK_SUCCESS )
160 constexpr VkPipelineStageFlags waitStages[] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
163 submit.pWaitDstStageMask = waitStages;
164 submit.waitSemaphoreCount = 1;
166 submit.signalSemaphoreCount = 1;
168 submit.commandBufferCount = 1;
177 VkPresentInfoKHR presentInfo = {};
178 presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
179 presentInfo.pSwapchains = &
_swapChain.swapchain;
180 presentInfo.swapchainCount = 1;
182 presentInfo.waitSemaphoreCount = 1;
#define PROFILE_SCOPE_AUTO(CATEGORY)
#define PROFILE_VK_PRESENT(SWAP_CHAIN)
#define PROFILE_SCOPE(NAME, CATEGORY)
vec2< U16 > getDrawableSize() const noexcept
static U64 FrameCount() noexcept
const vkb::PhysicalDevice & getPhysicalDevice() const noexcept
U32 getPresentQueueIndex() const noexcept
void submitToQueue(QueueType queue, const VkSubmitInfo &submitInfo, VkFence &fence) const
VKQueue getQueue(QueueType type) const noexcept
const vkb::Device & getDevice() const noexcept
VkResult queuePresent(QueueType queue, const VkPresentInfoKHR &presentInfo) const
VkDevice getVKDevice() const noexcept
vkb::Swapchain _swapChain
VkImageView getCurrentImageView() const noexcept
VkImage getCurrentImage() const noexcept
ErrorCode create(bool vSync, bool adaptiveSync, VkSurfaceKHR targetSurface)
VKSwapChain(VK_API &context, const VKDevice &device, const DisplayWindow &window)
std::vector< VkImage > _swapchainImages
std::array< FrameData, Config::MAX_FRAMES_IN_FLIGHT > _frames
const DisplayWindow & _window
FrameData & getFrameData() noexcept
vkb::Swapchain & getSwapChain() noexcept
std::vector< VkImageView > _swapchainImageViews
constexpr U8 MAX_FRAMES_IN_FLIGHT
Maximum number of active frames until we start waiting on a fence/sync.
constexpr Optick::Category::Type Graphics
VkCommandBufferAllocateInfo commandBufferAllocateInfo(VkCommandPool commandPool, VkCommandBufferLevel level, uint32_t bufferCount)
VkSubmitInfo submitInfo()
VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags=0)
VkSemaphoreCreateInfo semaphoreCreateInfo()
VkCommandBufferBeginInfo commandBufferBeginInfo(VkCommandBufferUsageFlags flags=0)
Handle console commands that start with a forward slash.
static NO_INLINE void errorfn(const char *format, T &&... args)
VkCommandBuffer _commandBuffer
VkSemaphore _presentSemaphore
VkSemaphore _renderSemaphore