Skip to content

Commit 5778b89

Browse files
committed
mesh shader + push initial
1 parent 8a33933 commit 5778b89

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

Diff for: Engine/gapi/spirv/meshconverter.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -860,9 +860,14 @@ void MeshConverter::injectCountingPass(const uint32_t idMainFunc) {
860860

861861
// Writeout meshlet descriptor
862862
{
863+
const uint32_t ptrWorkGroupID = code.fetchAddBound();
864+
fn.insert(spv::OpAccessChain, {_ptr_Input_uint, ptrWorkGroupID, idWorkGroupID, const1});
865+
const uint32_t workIdX = code.fetchAddBound();
866+
fn.insert(spv::OpLoad, {uint_t, workIdX, ptrWorkGroupID});
867+
863868
const uint32_t ptrHeap0 = code.fetchAddBound();
864869
fn.insert(spv::OpAccessChain, {_ptr_Uniform_uint, ptrHeap0, vEngine1, const3, meshDest});
865-
fn.insert(spv::OpStore, {ptrHeap0, const0}); // TODO: writeout self-id
870+
fn.insert(spv::OpStore, {ptrHeap0, workIdX});
866871

867872
const uint32_t dest1 = code.fetchAddBound();
868873
fn.insert(spv::OpIAdd, {uint_t, dest1, meshDest, const1});

Diff for: Engine/gapi/vulkan/vcommandbuffer.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,15 @@ void VMeshCommandBuffer::setPipeline(AbstractGraphicsApi::Pipeline& p) {
10451045
ms.bindVS(impl, px.pipelineLayout);
10461046
}
10471047

1048+
void VMeshCommandBuffer::setBytes(AbstractGraphicsApi::Pipeline& p, const void* data, size_t size) {
1049+
VCommandBuffer::setBytes(p,data,size);
1050+
1051+
VPipeline& px = reinterpret_cast<VPipeline&>(p);
1052+
if(px.meshPipeline()==VK_NULL_HANDLE)
1053+
return;
1054+
vkCmdPushConstants(impl, px.meshPipelineLayout(), VK_PIPELINE_BIND_POINT_COMPUTE, 0, uint32_t(size), data);
1055+
}
1056+
10481057
void VMeshCommandBuffer::setUniforms(AbstractGraphicsApi::Pipeline& p, AbstractGraphicsApi::Desc& u) {
10491058
VCommandBuffer::setUniforms(p,u);
10501059

Diff for: Engine/gapi/vulkan/vcommandbuffer.h

+1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ class VMeshCommandBuffer:public VCommandBuffer {
137137
using VCommandBuffer::VCommandBuffer;
138138

139139
void setPipeline(AbstractGraphicsApi::Pipeline& p) override;
140+
void setBytes (AbstractGraphicsApi::Pipeline& p, const void* data, size_t size) override;
140141
void setUniforms(AbstractGraphicsApi::Pipeline& p, AbstractGraphicsApi::Desc &u) override;
141142

142143
void dispatchMesh(size_t firstInstance, size_t instanceCount) override;

0 commit comments

Comments
 (0)