End record the frame with vulkan render backend.
Checkpoint of end primary commandBuffers.
End recording the CommandBuffer.
Instance a VkSubmitInfo.
Submit all commands recorded in queue.
Instance a VkSubmitInfo.
Submit all commands recorded in queue.
Instance a VkPresentInfoKHR.
Present the swapchain image to windows.
Checkpoint of end primary commandBuffers.
End recording the CommandBuffer.
Instance a VkSubmitInfo.
Submit all commands recorded in queue.
Instance a VkSubmitInfo.
Submit all commands recorded in queue.
Instance a VkPresentInfoKHR.
Present the swapchain image to windows.
316 {
318
319 {
321
323 }
324
325 {
327
332 NSIGHTAFTERMATH_GPUCRASHTRACKER_SETCHECKPOINT(
m_VulkanState.m_GraphicCommandBuffer[frameInfo.m_FrameIndex],
m_VulkanState.m_VkFunc, "BeginPrimaryGraphicCommandBuffer")
333
339 }
340
341 {
343
345
348 VkPipelineStageFlags waitStages[] = { VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT };
349
353 VkSubmitInfo submitInfo{};
354 submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
355 submitInfo.waitSemaphoreCount = 1;
356 submitInfo.pWaitSemaphores = waitSemphores;
357 submitInfo.pWaitDstStageMask = waitStages;
358 submitInfo.commandBufferCount = 1;
360 submitInfo.signalSemaphoreCount = 1;
361 submitInfo.pSignalSemaphores = signalSemaphores;
362
367
369 }
370
371 {
373
375
378 VkPipelineStageFlags waitStages[] = { VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
379
383 VkSubmitInfo submitInfo{};
384 submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
385 submitInfo.waitSemaphoreCount = 1;
386 submitInfo.pWaitSemaphores = waitSemphores;
387 submitInfo.pWaitDstStageMask = waitStages;
388 submitInfo.commandBufferCount = 1;
390 submitInfo.signalSemaphoreCount = 1;
391 submitInfo.pSignalSemaphores = signalSemaphores;
392
397
399 }
400
401 {
403
405 NSIGHTPERF_GPUPROFILERCONTINUOUS_ENDFRAME
407 NSIGHTPERF_GPUPROFILERONESHOT_ENDFRAME
408 }
409
410 {
412
414
415
418 VkPresentInfoKHR presentInfo{};
419 presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
420 presentInfo.waitSemaphoreCount = 1;
422 presentInfo.swapchainCount = 1;
424 presentInfo.pImageIndices = &frameInfo.m_ImageIndex;
425 presentInfo.pResults = nullptr;
426
431 if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR ||
m_VulkanWindows->IsResized())
432 {
435 }
436 else if (result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR)
437 {
438 SPICES_CORE_ERROR("Failed to present swap chain image!")
439 }
440
442 }
443
444 {
446
448 }
449 }
#define SPICES_PROFILE_ZONEN(...)
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
static std::shared_ptr< ThreadModel > Get()
Get ThreadModel single instance.
void RecreateSwapChain()
Called OnSlateResize.
static VulkanState m_VulkanState
The VulkanState in use.
std::unique_ptr< VulkanWindows > m_VulkanWindows
VulkanWindows.
VkSwapchainKHR m_SwapChain
std::array< VkSemaphore, MaxFrameInFlight > m_ComputeQueueSemaphore
std::array< VkSemaphore, MaxFrameInFlight > m_GraphicQueueSemaphore
std::array< VkFence, MaxFrameInFlight > m_ComputeFence
std::array< VkCommandBuffer, MaxFrameInFlight > m_GraphicCommandBuffer
std::array< VkSemaphore, MaxFrameInFlight > m_GraphicImageSemaphore
std::array< VkCommandBuffer, MaxFrameInFlight > m_ComputeCommandBuffer
std::array< VkFence, MaxFrameInFlight > m_GraphicFence