MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / Submit

Method Submit

Source/Engine/GraphicsDevice/Vulkan/QueueVulkan.cpp:22–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20}
21
22void QueueVulkan::Submit(CmdBufferVulkan* cmdBuffer, uint32 signalSemaphoresCount, const VkSemaphore* signalSemaphores)
23{
24 PROFILE_CPU_NAMED("vkQueueSubmit");
25 ASSERT(cmdBuffer->HasEnded());
26 auto fence = cmdBuffer->GetFence();
27 ASSERT(!fence->IsSignaled);
28
29 const VkCommandBuffer cmdBuffers[] = { cmdBuffer->GetHandle() };
30
31 VkSubmitInfo submitInfo;
32 RenderToolsVulkan::ZeroStruct(submitInfo, VK_STRUCTURE_TYPE_SUBMIT_INFO);
33 submitInfo.commandBufferCount = 1;
34 submitInfo.pCommandBuffers = cmdBuffers;
35 submitInfo.signalSemaphoreCount = signalSemaphoresCount;
36 submitInfo.pSignalSemaphores = signalSemaphores;
37
38 Array<VkSemaphore, InlinedAllocation<8>> waitSemaphores;
39 if (cmdBuffer->_waitSemaphores.HasItems())
40 {
41 waitSemaphores.EnsureCapacity((uint32)cmdBuffer->_waitSemaphores.Count());
42 for (auto semaphore : cmdBuffer->_waitSemaphores)
43 {
44 waitSemaphores.Add(semaphore->GetHandle());
45 }
46 submitInfo.waitSemaphoreCount = (uint32)cmdBuffer->_waitSemaphores.Count();
47 submitInfo.pWaitSemaphores = waitSemaphores.Get();
48 submitInfo.pWaitDstStageMask = cmdBuffer->_waitFlags.Get();
49 }
50
51 VALIDATE_VULKAN_RESULT(vkQueueSubmit(_queue, 1, &submitInfo, fence->Handle));
52
53 // Mark semaphores as submitted
54 cmdBuffer->_state = CmdBufferVulkan::State::Submitted;
55 cmdBuffer->_waitFlags.Clear();
56 cmdBuffer->_submittedWaitSemaphores = cmdBuffer->_waitSemaphores;
57 cmdBuffer->_waitSemaphores.Clear();
58 cmdBuffer->_submittedFenceCounter = cmdBuffer->_fenceSignaledCounter;
59
60#if 0
61 // Wait for the GPU to be idle on every submit (useful for tracking GPU hangs)
62 const bool WaitForIdleOnSubmit = false;
63 if (WaitForIdleOnSubmit)
64 {
65 cmdBuffer->Wait();
66 }
67#endif
68
69 UpdateLastSubmittedCommandBuffer(cmdBuffer);
70
71 cmdBuffer->GetOwner()->RefreshFenceStatus(cmdBuffer);
72}
73
74void QueueVulkan::GetLastSubmittedInfo(CmdBufferVulkan*& cmdBuffer, uint64& fenceCounter) const
75{

Callers 1

SubmitActiveCmdBufferMethod · 0.45

Calls 12

HasEndedMethod · 0.80
GetFenceMethod · 0.80
GetHandleMethod · 0.45
HasItemsMethod · 0.45
EnsureCapacityMethod · 0.45
CountMethod · 0.45
AddMethod · 0.45
GetMethod · 0.45
ClearMethod · 0.45
WaitMethod · 0.45
RefreshFenceStatusMethod · 0.45
GetOwnerMethod · 0.45

Tested by

no test coverage detected