Esempio n. 1
0
 private void Initialize()
 {
     Context.PhysicalDevice.GetMemoryProperties(out var physicalDeviceMemoryProperties);
     memoryTypes = new MemoryType[physicalDeviceMemoryProperties.MemoryTypeCount];
     for (var i = 0U; i < physicalDeviceMemoryProperties.MemoryTypeCount; i++)
     {
         var vkMemoryType = &physicalDeviceMemoryProperties.MemoryTypes.Value0 + i;
         var vkMemoryHeap = &physicalDeviceMemoryProperties.MemoryHeaps.Value0 + vkMemoryType->HeapIndex;
         var blockSize    = PickBlockSize(vkMemoryHeap->Size);
         var minAlignment = GetMemoryTypeMinAlignment(vkMemoryType->PropertyFlags);
         memoryTypes[i] = new MemoryType(i, vkMemoryType->PropertyFlags, blockSize, minAlignment);
     }
     memoryPoolsLinear    = new List <MemoryBlock> [memoryTypes.Length];
     memoryPoolsNonLinear = new List <MemoryBlock> [memoryTypes.Length];
     for (var i = 0; i < memoryTypes.Length; i++)
     {
         memoryPoolsLinear[i]    = new List <MemoryBlock>();
         memoryPoolsNonLinear[i] = new List <MemoryBlock>();
     }
 }
Esempio n. 2
0
        private DeviceMemory TryAllocateDeviceMemory(MemoryType type, ulong size, SharpVulkan.Ext.MemoryDedicatedAllocateInfo *dedicatedAllocateInfo)
        {
            var allocateInfo = new SharpVulkan.MemoryAllocateInfo {
                StructureType   = SharpVulkan.StructureType.MemoryAllocateInfo,
                MemoryTypeIndex = type.Index,
                AllocationSize  = size,
                Next            = new IntPtr(dedicatedAllocateInfo)
            };
            DeviceMemory memory;

            try {
                memory = new DeviceMemory(Context.Device.AllocateMemory(ref allocateInfo), type, size);
            } catch (SharpVulkan.SharpVulkanException e) when(e.Result == SharpVulkan.Result.ErrorOutOfDeviceMemory)
            {
                return(null);
            }
            if (ShouldMapPersistenly(type))
            {
                MapDeviceMemory(memory);
            }
            return(memory);
        }
Esempio n. 3
0
 public DeviceMemory(SharpVulkan.DeviceMemory memory, MemoryType type, ulong size)
 {
     Memory = memory;
     Type   = type;
     Size   = size;
 }
Esempio n. 4
0
 private bool ShouldMapPersistenly(MemoryType type)
 {
     return(PreferPersistentMapping && (type.PropertyFlags & SharpVulkan.MemoryPropertyFlags.HostVisible) != 0);
 }