1313namespace nbl ::asset
1414{
1515
16- struct SICPUBufferCreationParams
17- {
18- size_t size;
19- void * data = nullptr ;
20- size_t alignment = _NBL_SIMD_ALIGNMENT;
21- std::pmr::memory_resource* memoryResource = nullptr ;
22- };
23-
2416// ! One of CPU class-object representing an Asset
25- // ! TODO: remove, alloc can fail, should be a static create method instead!
2617/* *
2718 One of Assets used for storage of large arrays, so that storage can be decoupled
2819 from other objects such as meshbuffers, images, animations and shader source/bytecode.
@@ -32,11 +23,25 @@ struct SICPUBufferCreationParams
3223class ICPUBuffer final : public asset::IBuffer, public IPreHashed
3324{
3425 public:
26+ struct SCreationParams : asset::IBuffer::SCreationParams
27+ {
28+ size_t size;
29+ void * data = nullptr ;
30+ size_t alignment = _NBL_SIMD_ALIGNMENT;
31+ std::pmr::memory_resource* memoryResource = nullptr ;
32+
33+ SCreationParams& operator =(const asset::IBuffer::SCreationParams& rhs)
34+ {
35+ static_cast <asset::IBuffer::SCreationParams&>(*this ) = rhs;
36+ return *this ;
37+ }
38+ };
39+
3540 ICPUBuffer (size_t size, void * data, std::pmr::memory_resource* memoryResource, size_t alignment, bool adopt_memory) :
3641 asset::IBuffer ({ size, EUF_TRANSFER_DST_BIT }), m_data(data), m_mem_resource(memoryResource), m_alignment(alignment), m_adopt_memory(adopt_memory) {}
3742
3843 // ! allocates uninitialized memory, copies `data` into allocation if `!data` not nullptr
39- core::smart_refctd_ptr<ICPUBuffer> static create (const SICPUBufferCreationParams & params) {
44+ core::smart_refctd_ptr<ICPUBuffer> static create (const SCreationParams & params) {
4045 std::pmr::memory_resource* memoryResource = params.memoryResource ;
4146 if (!params.memoryResource )
4247 memoryResource = std::pmr::get_default_resource ();
@@ -52,7 +57,7 @@ class ICPUBuffer final : public asset::IBuffer, public IPreHashed
5257 }
5358
5459 // ! does not allocate memory, adopts the `data` pointer, no copies done
55- core::smart_refctd_ptr<ICPUBuffer> static create (const SICPUBufferCreationParams & params, core::adopt_memory_t ) {
60+ core::smart_refctd_ptr<ICPUBuffer> static create (const SCreationParams & params, core::adopt_memory_t ) {
5661 std::pmr::memory_resource* memoryResource;
5762 if (!params.memoryResource )
5863 memoryResource = std::pmr::get_default_resource ();
@@ -61,7 +66,7 @@ class ICPUBuffer final : public asset::IBuffer, public IPreHashed
6166
6267 core::smart_refctd_ptr<IAsset> clone (uint32_t = ~0u ) const override final
6368 {
64- auto cp = create ({ m_creationParams.size , m_data });
69+ auto cp = create ({ . size = m_creationParams.size , . data = m_data, . alignment = m_alignment });
6570 memcpy (cp->getPointer (), m_data, m_creationParams.size );
6671 cp->setContentHash (getContentHash ());
6772 return cp;
0 commit comments