static bool ValidateAllocateMemoryParameters(D3D12MA_ALLOCATION_DESC *pAllocDesc, D3D12_RESOURCE_ALLOCATION_INFO *pAllocInfo, D3D12MA_Allocation **ppAllocation)
 {
     return((pAllocDesc != null) &&
            (pAllocInfo != null) &&
            (ppAllocation != null) &&
            ((pAllocInfo->Alignment == 0) || (pAllocInfo->Alignment == D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) || (pAllocInfo->Alignment == D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT)) &&
            (pAllocInfo->SizeInBytes != 0) &&
            ((pAllocInfo->SizeInBytes % (64UL * 1024)) == 0));
 }
        public int AllocateMemory1([NativeTypeName("const ALLOCATION_DESC*")] D3D12MA_ALLOCATION_DESC *pAllocDesc, [NativeTypeName("const D3D12_RESOURCE_ALLOCATION_INFO*")] D3D12_RESOURCE_ALLOCATION_INFO *pAllocInfo, ID3D12ProtectedResourceSession *pProtectedSession, D3D12MA_Allocation **ppAllocation)
        {
            if (!ValidateAllocateMemoryParameters(pAllocDesc, pAllocInfo, ppAllocation))
            {
                D3D12MA_ASSERT(false); // "Invalid arguments passed to Allocator::AllocateMemory1."
                return(E_INVALIDARG);
            }

            using var debugGlobalMutexLock = D3D12MA_DEBUG_GLOBAL_MUTEX_LOCK();

            return(m_Pimpl->AllocateMemory1(pAllocDesc, pAllocInfo, pProtectedSession, ppAllocation));
        }