Skip to content

Commit bdb31f6

Browse files
committed
[62] small example fix
1 parent bf8c63d commit bdb31f6

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

62_CAD/main.cpp

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ class ComputerAidedDesign final : public examples::SimpleWindowedApplication, pu
251251
constexpr static uint32_t WindowHeightRequest = 900u;
252252
constexpr static uint32_t MaxFramesInFlight = 8u;
253253
public:
254-
254+
255255
void allocateResources(uint32_t maxObjects)
256256
{
257257
drawResourcesFiller = DrawResourcesFiller(core::smart_refctd_ptr(m_utils), getGraphicsQueue());
@@ -467,9 +467,13 @@ class ComputerAidedDesign final : public examples::SimpleWindowedApplication, pu
467467
m_overflowSubmitScratchSemaphore = m_device->createSemaphore(0ull);
468468
if (!m_renderSemaphore || !m_overflowSubmitScratchSemaphore)
469469
return logFail("Failed to Create Semaphores!");
470-
471-
m_overflowSubmitsScratchSemaphoreInfo.semaphore = m_overflowSubmitScratchSemaphore.get();
472-
m_overflowSubmitsScratchSemaphoreInfo.value = 0ull;
470+
471+
// Set Queue and ScratchSemaInfo -> wait semaphores and command buffers will be modified by workLoop each frame
472+
m_intendedNextSubmit.queue = getGraphicsQueue();
473+
m_intendedNextSubmit.scratchSemaphore = {
474+
.semaphore = m_overflowSubmitScratchSemaphore.get(),
475+
.value = 0ull,
476+
};
473477

474478
// Let's just use the same queue since there's no need for async present
475479
if (!m_surface)
@@ -823,16 +827,12 @@ class ComputerAidedDesign final : public examples::SimpleWindowedApplication, pu
823827
IQueue::SSubmitInfo::SCommandBufferInfo cmdbufs[1u] = { {.cmdbuf = m_commandBuffers[resourceIx].get() } };
824828
IQueue::SSubmitInfo::SSemaphoreInfo waitSems[2u] = { acquired, prevFrameRendered };
825829

826-
SIntendedSubmitInfo intendedNextSubmit = {
827-
.queue = getGraphicsQueue(),
828-
.waitSemaphores = waitSems,
829-
.commandBuffers = cmdbufs,
830-
.scratchSemaphore = m_overflowSubmitsScratchSemaphoreInfo
831-
};
832-
833-
addObjects(intendedNextSubmit);
830+
m_intendedNextSubmit.waitSemaphores = waitSems;
831+
m_intendedNextSubmit.commandBuffers = cmdbufs;
832+
833+
addObjects(m_intendedNextSubmit);
834834

835-
endFrameRender(intendedNextSubmit);
835+
endFrameRender(m_intendedNextSubmit);
836836

837837
#ifdef BENCHMARK_TILL_FIRST_FRAME
838838
if (!stopBenchamrkFlag)
@@ -1041,7 +1041,7 @@ class ComputerAidedDesign final : public examples::SimpleWindowedApplication, pu
10411041
auto& bufferBarrier = bufferBarriers[bufferBarriersCount++];
10421042
bufferBarrier.barrier.dep.srcStageMask = PIPELINE_STAGE_FLAGS::COPY_BIT;
10431043
bufferBarrier.barrier.dep.srcAccessMask = ACCESS_FLAGS::TRANSFER_WRITE_BIT;
1044-
bufferBarrier.barrier.dep.dstStageMask = PIPELINE_STAGE_FLAGS::VERTEX_SHADER_BIT;
1044+
bufferBarrier.barrier.dep.dstStageMask = PIPELINE_STAGE_FLAGS::VERTEX_SHADER_BIT | PIPELINE_STAGE_FLAGS::FRAGMENT_SHADER_BIT;
10451045
bufferBarrier.barrier.dep.dstAccessMask = ACCESS_FLAGS::UNIFORM_READ_BIT;
10461046
bufferBarrier.range =
10471047
{
@@ -1078,12 +1078,26 @@ class ComputerAidedDesign final : public examples::SimpleWindowedApplication, pu
10781078
.buffer = drawResourcesFiller.gpuDrawBuffers.geometryBuffer,
10791079
};
10801080
}
1081+
if (drawResourcesFiller.getCurrentMainObjectsBufferSize() > 0u)
1082+
{
1083+
auto& bufferBarrier = bufferBarriers[bufferBarriersCount++];
1084+
bufferBarrier.barrier.dep.srcStageMask = PIPELINE_STAGE_FLAGS::COPY_BIT;
1085+
bufferBarrier.barrier.dep.srcAccessMask = ACCESS_FLAGS::TRANSFER_WRITE_BIT;
1086+
bufferBarrier.barrier.dep.dstStageMask = PIPELINE_STAGE_FLAGS::VERTEX_SHADER_BIT | PIPELINE_STAGE_FLAGS::FRAGMENT_SHADER_BIT;
1087+
bufferBarrier.barrier.dep.dstAccessMask = ACCESS_FLAGS::SHADER_READ_BITS;
1088+
bufferBarrier.range =
1089+
{
1090+
.offset = 0u,
1091+
.size = drawResourcesFiller.getCurrentMainObjectsBufferSize(),
1092+
.buffer = drawResourcesFiller.gpuDrawBuffers.mainObjectsBuffer,
1093+
};
1094+
}
10811095
if (drawResourcesFiller.getCurrentLineStylesBufferSize() > 0u)
10821096
{
10831097
auto& bufferBarrier = bufferBarriers[bufferBarriersCount++];
10841098
bufferBarrier.barrier.dep.srcStageMask = PIPELINE_STAGE_FLAGS::COPY_BIT;
10851099
bufferBarrier.barrier.dep.srcAccessMask = ACCESS_FLAGS::TRANSFER_WRITE_BIT;
1086-
bufferBarrier.barrier.dep.dstStageMask = PIPELINE_STAGE_FLAGS::VERTEX_SHADER_BIT;
1100+
bufferBarrier.barrier.dep.dstStageMask = PIPELINE_STAGE_FLAGS::VERTEX_SHADER_BIT | PIPELINE_STAGE_FLAGS::FRAGMENT_SHADER_BIT;
10871101
bufferBarrier.barrier.dep.dstAccessMask = ACCESS_FLAGS::SHADER_READ_BITS;
10881102
bufferBarrier.range =
10891103
{
@@ -1163,9 +1177,6 @@ class ComputerAidedDesign final : public examples::SimpleWindowedApplication, pu
11631177
m_surface->present(m_currentImageAcquire.imageIndex,{&presentWait,1});
11641178
}
11651179
}
1166-
1167-
// NOTE: one can just make `m_overflowSubmitsScratchSemaphoreInfo` a reference tied to `intendedSubmitInfo.scratchSemaphore
1168-
m_overflowSubmitsScratchSemaphoreInfo.value = intendedSubmitInfo.scratchSemaphore.value; // because we need this info consistent within frames
11691180
}
11701181

11711182
void endFrameRender(SIntendedSubmitInfo& intendedSubmitInfo)
@@ -2543,8 +2554,7 @@ class ComputerAidedDesign final : public examples::SimpleWindowedApplication, pu
25432554

25442555
// timeline semaphore used for overflows (they need to be on their own timeline to count overflows)
25452556
smart_refctd_ptr<ISemaphore> m_overflowSubmitScratchSemaphore;
2546-
// this is the semaphore info the overflows update the value for (the semaphore is set to the overflow semaphore above, and the value get's updated by SIntendedSubmitInfo)
2547-
IQueue::SSubmitInfo::SSemaphoreInfo m_overflowSubmitsScratchSemaphoreInfo;
2557+
SIntendedSubmitInfo m_intendedNextSubmit;
25482558

25492559
ISimpleManagedSurface::SAcquireResult m_currentImageAcquire = {};
25502560

0 commit comments

Comments
 (0)