/// <summary> /// Gets the memory heaps and types for the device. /// </summary> /// <param name="device">The device to get the memory info for.</param> /// <param name="types">The memory types for the device.</param> /// <param name="heaps">The memory heaps for the device.</param> public static void GetMemoryInfo(VkPhysicalDevice device, out VkMemoryType[] types, out VkMemoryHeap[] heaps) { if (!device) { throw new ArgumentNullException(nameof(device), "Cannot pass null device or device handle"); } VkPhysicalDeviceMemoryProperties.New(out var props); device.GetPhysicalDeviceMemoryProperties(&props); VkMemoryType *typePtr = &(props.MemoryTypes_0); VkMemoryHeap *heapPtr = &(props.MemoryHeaps_0); types = new VkMemoryType[props.MemoryTypeCount]; heaps = new VkMemoryHeap[props.MemoryHeapCount]; for (uint i = 0; i < props.MemoryTypeCount; ++i) { types[i] = typePtr[i]; } for (uint i = 0; i < props.MemoryHeapCount; ++i) { heaps[i] = heapPtr[i]; } }
internal MemoryHeap(uint heapIndex, VkMemoryHeap desc) { HeapIndex = heapIndex; Size = desc.Size; Flags = (VkMemoryHeapFlag)desc.Flags; }