-
Notifications
You must be signed in to change notification settings - Fork 67
Mesh Pipelines #973
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Mesh Pipelines #973
Conversation
|
[CI]: Can one of the admins verify this patch? |
|
What a wonderful Christmas gift! |
| [submodule "3rdparty/boost/superproject"] | ||
| path = 3rdparty/boost/superproject | ||
| url = ../boost.git | ||
| url = git@github.com:Devsh-Graphics-Programming/boost.git |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
as @AnastaZIuk will tell you, this needs to stay as it was, you need to for the submodules yourself as well.
Its important the submodules are relative.
| params.featuresToEnable = getRequiredDeviceFeatures().unionWith(supportedPreferredFormats); | ||
| params.featuresToEnable.meshShader = true; | ||
| params.featuresToEnable.taskShader = true; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you can't add this to all examples, override the function like the raytracing examples in the mesh shader example
| // distinct struct, new name with the same data - https://docs.vulkan.org/refpages/latest/refpages/source/VkDrawMeshTasksIndirectCommandEXT.html | ||
| struct DrawMeshTasksIndirectCommand_t | ||
| { | ||
| uint32_t num_groups_x; | ||
| uint32_t num_groups_y; | ||
| uint32_t num_groups_z; | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just use DispatchIndirectCommand_t instead
| bool drawMeshTasks(const uint32_t groupCountX, const uint32_t groupCountY = 1, const uint32_t groupCountZ = 1); | ||
| template<typename T> requires std::is_integral_v<T> | ||
| bool drawMeshTasks(const hlsl::vector<T, 3> groupCount) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
provide only one uint16_t3 overload
| const IGPUGraphicsPipeline* getBoundGraphicsPipeline() const { return m_boundGraphicsPipeline; } | ||
| const IGPUComputePipeline* getBoundComputePipeline() const { return m_boundComputePipeline; } | ||
| const IGPUMeshPipeline* getBoundMeshPipeline() const { return m_boundMeshPipeline; } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
graphics and mesh bind to same bindpoint (unlike RT which has a separate bindpoint from Compute)
you may need to return a common base class (Ssee how its done for acceleration structures)
| const IGPUGraphicsPipeline* m_boundGraphicsPipeline; | ||
| const IGPUComputePipeline* m_boundComputePipeline; | ||
| const IGPUMeshPipeline* m_boundMeshPipeline; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
graphics and mesh bind to same bindpoint (unlike RT which has a separate bindpoint from Compute)
you may need to store a common base class (Ssee how its done for acceleration structures - BLAS and TLAS the GPU types)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
graphics and mesh bind to same bindpoint (unlike RT which has a separate bindpoint from Compute)
you may need to store a common base class (Ssee how its done for acceleration structures - BLAS and TLAS the GPU types)
Can you explain this further so that I know what kind of change should be made? In what situation are we expecting dynamic dispatch to help?
| // we reference a pipeline layout and a renderpass | ||
| constexpr static inline bool HasChildren = true; | ||
| // the video type | ||
| using video_t = IGPUGraphicsPipeline; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo ? should be IGPUMeshPipeline probably ?
…sent yet in the master branch Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
…spv for extension Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
…range Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
… half each time Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
…ight now. graphics is stable tho Signed-off-by: Corey <corey.w108@gmail.com>
i PROBABLY messed up something in mesh. committing so I can keep track of changes while I test in the example Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
…ight now. graphics is stable tho Signed-off-by: Corey <corey.w108@gmail.com>
i PROBABLY messed up something in mesh. committing so I can keep track of changes while I test in the example Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
Signed-off-by: Corey <corey.w108@gmail.com>
|
Sorry, I tried to do the signoff rebase, I can undo that. The most bulky change will be the abstraction between mesh and the traditional graphics bindpoint which I'm awaiting further direction on, it should altogether still take less than an hour or so. I guess I'm pushing the mesh pipeline change so I'll put my thoughts out. the alternative would be to make a IRasterizationPipeline, like so Graphics Pipeline Libraries are on my todo list within the month, so I'm not very familiar with them. But I've found zero mentions of mesh shaders and libraries within the same text. I'm not sure how the planned pipeline library refactor will change the hypothetical IRasterizationPipeline, which makes me a bit hesitant. |
Now we have commits with two authors As for your question, make a |
Mesh Pipelines
Description of changes that aren't implicit.
Testing
https://github.com/GDBobby/Nabla-Examples-and-Tests/tree/master/MeshShader
TODO list:
I need to fix IGPUCommandBuffer::drawMeshTasksIndirect. I haven't done anything with Indirect commands yet so I'll have to figure it out as I go.