Example #1
0
        //VkMemoryPropertyFlagBits.VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
        private uint GetMemoryTypeIndex(VkPhysicalDeviceMemoryProperties memoryProperties, VkMemoryRequirements memoryReq, VkMemoryPropertyFlagBits flags)
        {
            uint          result       = 0;
            bool          heapIndexSet = false;
            VkMemoryType *memoryTypes  = (VkMemoryType *)memoryProperties.memoryTypes;

            for (uint i = 0; i < memoryProperties.memoryTypeCount; i++)
            {
                if (((memoryReq.memoryTypeBits >> (int)i) & 1) == 1 &&
                    (memoryTypes[i].propertyFlags & flags) == flags)
                {
                    result       = i;
                    heapIndexSet = true;
                    break;
                }
            }

            if (!heapIndexSet)
            {
                result = memoryTypes[0].heapIndex;
            }

            return(result);
        }
Example #2
0
        /// <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];
            }
        }