@@ -14,72 +14,53 @@ namespace asset
14
14
{
15
15
16
16
template <typename MDIStructType = DrawElementsIndirectCommand_t>
17
- class CCPUMeshPackerV2 final : public IMeshPackerV2<ICPUBuffer, ICPUMeshBuffer, MDIStructType>
17
+ class CCPUMeshPackerV2 final : public IMeshPackerV2<ICPUBuffer,ICPUDescriptorSet, ICPUMeshBuffer,MDIStructType>
18
18
{
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 ()
66
40
{
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
+ }
77
46
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);
82
52
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
+ }
83
64
};
84
65
85
66
template <typename MDIStructType>
0 commit comments