Skip to content

Commit bd3ebf2

Browse files
Clean up a lot of code and add the index buffer descriptor to the V2 mesh packers
1 parent 2519b83 commit bd3ebf2

File tree

3 files changed

+284
-379
lines changed

3 files changed

+284
-379
lines changed

include/nbl/asset/utils/CCPUMeshPackerV2.h

Lines changed: 43 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -14,72 +14,53 @@ namespace asset
1414
{
1515

1616
template <typename MDIStructType = DrawElementsIndirectCommand_t>
17-
class CCPUMeshPackerV2 final : public IMeshPackerV2<ICPUBuffer, ICPUMeshBuffer, MDIStructType>
17+
class CCPUMeshPackerV2 final : public IMeshPackerV2<ICPUBuffer,ICPUDescriptorSet,ICPUMeshBuffer,MDIStructType>
1818
{
19-
using base_t = IMeshPackerV2<ICPUBuffer, ICPUMeshBuffer, MDIStructType>;
20-
using Triangle = typename base_t::Triangle;
21-
using TriangleBatches = typename base_t::TriangleBatches;
22-
using IdxBufferParams = typename base_t::base_t::IdxBufferParams;
23-
24-
template<typename> friend class CGPUMeshPackerV2; //TODO: this will allow CGPUMeshPackerV2 with every template parameter to be a friend of this class, fix it
25-
26-
public:
27-
using AllocationParams = IMeshPackerBase::AllocationParamsCommon;
28-
using PackerDataStore = typename base_t::PackerDataStore;
29-
using ReservedAllocationMeshBuffers = typename base_t::ReservedAllocationMeshBuffers;
30-
using AttribAllocParams = typename base_t::AttribAllocParams;
31-
using CombinedDataOffsetTable = typename base_t::CombinedDataOffsetTable;
32-
33-
public:
34-
CCPUMeshPackerV2(const AllocationParams& allocParams, uint16_t minTriangleCountPerMDIData = 256u, uint16_t maxTriangleCountPerMDIData = 1024u)
35-
:IMeshPackerV2<ICPUBuffer, ICPUMeshBuffer, MDIStructType>(allocParams, minTriangleCountPerMDIData, maxTriangleCountPerMDIData)
36-
{}
37-
38-
void instantiateDataStorage();
39-
40-
//! shrinks byte size of all output buffers, so they are large enough to fit currently allocated contents. Call this function before `instantiateDataStorage`
41-
void shrinkOutputBuffersSize()
42-
{
43-
m_allocParams.MDIDataBuffSupportedCnt = m_MDIDataAlctr.safe_shrink_size(0u,1u);
44-
m_allocParams.indexBuffSupportedCnt = m_idxBuffAlctr.safe_shrink_size(0u,1u);
45-
m_allocParams.vertexBuffSupportedByteSize = m_vtxBuffAlctr.safe_shrink_size(0u,1u);
46-
// TODO: SHRINK ACTUAL ALLOCATORS AND THEIR RESERVED SPACES! (CREATE NEW ALLOCATORS WITH NEW RESERVED SPACES, THEN DELETE OLD RESERVED, THEN SWAP ALLOCATOR AND RESERVED MEMBERS)
47-
}
48-
49-
/**
50-
\return number of mdi structs created for mesh buffer range described by mbBegin .. mbEnd, 0 if commit failed or mbBegin == mbEnd
51-
*/
52-
template <typename MeshBufferIterator>
53-
uint32_t commit(IMeshPackerBase::PackedMeshBufferData* pmbdOut, CombinedDataOffsetTable* cdotOut, ReservedAllocationMeshBuffers* rambIn, const MeshBufferIterator mbBegin, const MeshBufferIterator mbEnd);
54-
55-
inline PackerDataStore getPackerDataStore() { return m_packerDataStore; };
56-
57-
uint32_t getDSlayoutBindingsForUTB(ICPUDescriptorSetLayout::SBinding* outBindings, uint32_t fsamplersBinding = 0u, uint32_t isamplersBinding = 1u, uint32_t usamplersBinding = 2u)
58-
{
59-
return getDSlayoutBindingsForUTB_internal<ICPUDescriptorSetLayout>(outBindings, fsamplersBinding, isamplersBinding, usamplersBinding);
60-
}
61-
62-
// cannot be called before 'instantiateDataStorage'
63-
std::pair<uint32_t, uint32_t> getDescriptorSetWritesForUTB(ICPUDescriptorSet::SWriteDescriptorSet* outWrites, ICPUDescriptorSet::SDescriptorInfo* outInfo, ICPUDescriptorSet* dstSet, uint32_t fBuffersBinding = 0u, uint32_t iBuffersBinding = 1u, uint32_t uBuffersBinding = 2u) const
64-
{
65-
auto createBufferView = [&](E_FORMAT format)
19+
using base_t = IMeshPackerV2<ICPUBuffer,ICPUDescriptorSet,ICPUMeshBuffer,MDIStructType>;
20+
using Triangle = typename base_t::Triangle;
21+
using TriangleBatches = typename base_t::TriangleBatches;
22+
using IdxBufferParams = typename base_t::base_t::IdxBufferParams;
23+
24+
public:
25+
using AllocationParams = IMeshPackerBase::AllocationParamsCommon;
26+
using PackerDataStore = typename base_t::PackerDataStore;
27+
using ReservedAllocationMeshBuffers = typename base_t::ReservedAllocationMeshBuffers;
28+
using AttribAllocParams = typename base_t::AttribAllocParams;
29+
using CombinedDataOffsetTable = typename base_t::CombinedDataOffsetTable;
30+
31+
public:
32+
CCPUMeshPackerV2(const AllocationParams& allocParams, uint16_t minTriangleCountPerMDIData = 256u, uint16_t maxTriangleCountPerMDIData = 1024u)
33+
:IMeshPackerV2<ICPUBuffer, ICPUMeshBuffer, MDIStructType>(allocParams, minTriangleCountPerMDIData, maxTriangleCountPerMDIData)
34+
{}
35+
36+
void instantiateDataStorage();
37+
38+
//! shrinks byte size of all output buffers, so they are large enough to fit currently allocated contents. Call this function before `instantiateDataStorage`
39+
void shrinkOutputBuffersSize()
6640
{
67-
return core::make_smart_refctd_ptr<ICPUBufferView>(core::smart_refctd_ptr(m_packerDataStore.vertexBuffer), format);
68-
};
69-
70-
return getDescriptorSetWritesForUTB_internal<ICPUDescriptorSet, ICPUBufferView>(outWrites, outInfo, dstSet, createBufferView, fBuffersBinding, iBuffersBinding, uBuffersBinding);
71-
}
72-
73-
uint32_t getDSlayoutBindingsForSSBO(ICPUDescriptorSetLayout::SBinding* outBindings, uint32_t uintBufferBinding = 0u, uint32_t uvec2BufferBinding = 1u, uint32_t uvec3BufferBinding = 2u, uint32_t uvec4BufferBinding = 3u) const
74-
{
75-
return getDSlayoutBindingsForUTB_internal<ICPUDescriptorSetLayout>(outBindings, uintBufferBinding, uvec2BufferBinding, uvec3BufferBinding, uvec4BufferBinding);
76-
}
41+
m_allocParams.MDIDataBuffSupportedCnt = m_MDIDataAlctr.safe_shrink_size(0u,1u);
42+
m_allocParams.indexBuffSupportedCnt = m_idxBuffAlctr.safe_shrink_size(0u,1u);
43+
m_allocParams.vertexBuffSupportedByteSize = m_vtxBuffAlctr.safe_shrink_size(0u,1u);
44+
// TODO: SHRINK ACTUAL ALLOCATORS AND THEIR RESERVED SPACES! (CREATE NEW ALLOCATORS WITH NEW RESERVED SPACES, THEN DELETE OLD RESERVED, THEN SWAP ALLOCATOR AND RESERVED MEMBERS)
45+
}
7746

78-
uint32_t getDescriptorSetWritesForSSBO(ICPUDescriptorSet::SWriteDescriptorSet* outWrites, ICPUDescriptorSet::SDescriptorInfo* outInfo, ICPUDescriptorSet* dstSet, uint32_t uintBufferBinding = 0u, uint32_t uvec2BufferBinding = 1u, uint32_t uvec3BufferBinding = 2u, uint32_t uvec4BufferBinding = 3u) const
79-
{
80-
return getDescriptorSetWritesForUTB_internal<ICPUDescriptorSet>(outWrites, outInfo, dstSet, m_packerDataStore.vertexBuffer, uintBufferBinding, uvec2BufferBinding, uvec3BufferBinding, uvec4BufferBinding);
81-
}
47+
/**
48+
\return number of mdi structs created for mesh buffer range described by mbBegin .. mbEnd, 0 if commit failed or mbBegin == mbEnd
49+
*/
50+
template <typename MeshBufferIterator>
51+
uint32_t commit(IMeshPackerBase::PackedMeshBufferData* pmbdOut, CombinedDataOffsetTable* cdotOut, ReservedAllocationMeshBuffers* rambIn, const MeshBufferIterator mbBegin, const MeshBufferIterator mbEnd);
8252

53+
inline std::pair<uint32_t,uint32_t> getDescriptorSetWritesForUTB(
54+
ICPUDescriptorSet::SWriteDescriptorSet* outWrites, ICPUDescriptorSet::SDescriptorInfo* outInfo, ICPUDescriptorSet* dstSet,
55+
const typename base_t::DSLayoutParamsUTB& params = {}
56+
) const
57+
{
58+
auto createBufferView = [&](E_FORMAT format) -> core::smart_refctd_ptr<IDescriptor>
59+
{
60+
return core::make_smart_refctd_ptr<ICPUBufferView>(core::smart_refctd_ptr(m_packerDataStore.vertexBuffer),format);
61+
};
62+
return base_t::getDescriptorSetWritesForUTB(outWrites,outInfo,dstSet,createBufferView,params);
63+
}
8364
};
8465

8566
template <typename MDIStructType>

0 commit comments

Comments
 (0)