You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Looking at vsgcomputevertex, how could it be made fully parallell?
There is a comment in the code here:
to use a different queue family, we need to use VK_SHARING_MODE_CONCURRENT with queueFamilyIndices for VkBuffer, or implement a queue family ownership transfer with a BufferMemoryBarrier
This is however only one step. To be free from inter-frame blocking there would have to be a buffer per frame-in-flight that each compute invocation writes to, and each vertex shader reads from when it renders so that the compute shader can execute again as soon as this frame has finished while other frames are in flight. While I've done this in plain Vulkan before (using push descriptors for per-frame buffers), I'm struggling to understand how that fits into VSG.
If it's possible to express that information in the graph such that buffers are automatically instantiated per frame if marked as per-frame, and barriers inserted for transfer between compute and graphics and if not, then where would that be done in a way that still builds on the otherwise elegant graph abstraction.
// separate buffer per frame, two frames in flight
[comp0]-[graphics0]-[present0]--[graphics1]-[present1]--[graphics0]-[present0]
[comp1]----------------}--' |
[comp0]--------------------'
If taking it one step further (and perhaps a bit off-topic of the actual vsgcomputevertex example) and having post-processing fullscreen blit (for tonemapping for example, compose with UI etc) in the frame graph, then the next compute could run even earlier, once the first rendering of its vertex positions is complete, and understanding how that would fit in is even less accessible to me.
// separate buffer per frame, and separate swapchain image presentation
[comp0]-[graphics0]-[fullscreen0]-[present0]--[graphics1]-[fullscreen1]-[present1]--[graphics0]-[fullscreen0]-[present0]
[comp1]-----}---------------------------' |
[comp0]-----------------------------------------------------------'
I hope I haven't missed any examples of this, but when inspecting things in Nvidia Nsight for the various examples nothing is named so it's hard to know what's what.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Looking at vsgcomputevertex, how could it be made fully parallell?
There is a comment in the code here:
This is however only one step. To be free from inter-frame blocking there would have to be a buffer per frame-in-flight that each compute invocation writes to, and each vertex shader reads from when it renders so that the compute shader can execute again as soon as this frame has finished while other frames are in flight. While I've done this in plain Vulkan before (using push descriptors for per-frame buffers), I'm struggling to understand how that fits into VSG.
If it's possible to express that information in the graph such that buffers are automatically instantiated per frame if marked as per-frame, and barriers inserted for transfer between compute and graphics and if not, then where would that be done in a way that still builds on the otherwise elegant graph abstraction.
If taking it one step further (and perhaps a bit off-topic of the actual vsgcomputevertex example) and having post-processing fullscreen blit (for tonemapping for example, compose with UI etc) in the frame graph, then the next compute could run even earlier, once the first rendering of its vertex positions is complete, and understanding how that would fit in is even less accessible to me.
I hope I haven't missed any examples of this, but when inspecting things in Nvidia Nsight for the various examples nothing is named so it's hard to know what's what.
Beta Was this translation helpful? Give feedback.
All reactions