internal static void _ctor(ref D3D12MA_PoolPimpl pThis, D3D12MA_AllocatorPimpl *allocator, [NativeTypeName("const D3D12MA_POOL_DESC&")] D3D12MA_POOL_DESC *desc)
        {
            pThis.m_Allocator   = allocator;
            pThis.m_Desc        = *desc;
            pThis.m_BlockVector = null;
            pThis.m_Name        = null;

            bool  explicitBlockSize  = desc->BlockSize != 0;
            ulong preferredBlockSize = explicitBlockSize ? desc->BlockSize : D3D12MA_DEFAULT_BLOCK_SIZE;

            D3D12_HEAP_FLAGS heapFlags     = desc->HeapFlags;
            uint             maxBlockCount = desc->MaxBlockCount != 0 ? desc->MaxBlockCount : uint.MaxValue;

            pThis.m_BlockVector = D3D12MA_NEW <D3D12MA_BlockVector>(allocator->GetAllocs());
            D3D12MA_BlockVector._ctor(
                ref *pThis.m_BlockVector,
                allocator, desc->HeapType, heapFlags,
                preferredBlockSize,
                desc->MinBlockCount, maxBlockCount,
                explicitBlockSize
                );
        }
 internal static void _ctor(ref D3D12MA_Pool pThis, ref D3D12MA_Allocator allocator, [NativeTypeName("const POOL_DESC&")] D3D12MA_POOL_DESC *desc)
 {
     pThis.m_Pimpl = D3D12MA_NEW <D3D12MA_PoolPimpl>(allocator.m_Pimpl->GetAllocs());
     D3D12MA_PoolPimpl._ctor(ref *pThis.m_Pimpl, allocator.m_Pimpl, desc);
 }