public static void _ctor(ref D3D12MA_NormalBlock pThis, D3D12MA_Allocator *allocator, ref D3D12MA_BlockVector blockVector, [NativeTypeName("const D3D12_HEAP_PROPERTIES&")] D3D12_HEAP_PROPERTIES *heapProps, D3D12_HEAP_FLAGS heapFlags, [NativeTypeName("UINT64")] ulong size, [NativeTypeName("UINT")] uint id)
        {
            pThis.Base        = new D3D12MA_MemoryBlock(allocator, heapProps, heapFlags, size, id);
            pThis.Base.lpVtbl = Vtbl;

            pThis.m_pMetadata   = null;
            pThis.m_BlockVector = (D3D12MA_BlockVector *)Unsafe.AsPointer(ref blockVector);
        }
        public static void Dispose(ref D3D12MA_NormalBlock pThis)
        {
            if (pThis.m_pMetadata != null)
            {
                // THIS IS THE MOST IMPORTANT ASSERT IN THE ENTIRE LIBRARY!
                // Hitting it means you have some memory leak - unreleased Allocation objects.
                D3D12MA_ASSERT((D3D12MA_DEBUG_LEVEL > 0) && pThis.m_pMetadata->IsEmpty()); // "Some allocations were not freed before destruction of this memory block!"

                D3D12MA_DELETE(pThis.Base.m_Allocator->GetAllocs(), pThis.m_pMetadata);
            }

            D3D12MA_MemoryBlock.Dispose(ref pThis.Base);
        }