public static uint FindMemoryType(VkPhysicalDeviceMemoryProperties memProperties, uint typeFilter, VkMemoryPropertyFlags properties) { for (int i = 0; i < memProperties.memoryTypeCount; i++) { if (((typeFilter & (1 << i)) != 0) && (memProperties.GetMemoryType((uint)i).propertyFlags & properties) == properties) { return((uint)i); } } throw new VeldridException("No suitable memory type."); }
public static bool TryFindMemoryType(VkPhysicalDeviceMemoryProperties memProperties, uint typeFilter, VkMemoryPropertyFlags properties, out uint typeIndex) { typeIndex = 0; for (int i = 0; i < memProperties.memoryTypeCount; i++) { if (((typeFilter & (1 << i)) != 0) && (memProperties.GetMemoryType((uint)i).propertyFlags & properties) == properties) { typeIndex = (uint)i; return(true); } } return(false); }
public static uint GetMemoryTypeIndex(uint typeBits, VkMemoryPropertyFlags properties, VkPhysicalDeviceMemoryProperties memoryProperties) { // Iterate over all memory types available for the Device used in this example for (uint i = 0; i < memoryProperties.memoryTypeCount; i++) { if ((typeBits & 1) == 1) { if ((memoryProperties.GetMemoryType(i).propertyFlags & properties) == properties) { return(i); } } typeBits >>= 1; } throw new InvalidOperationException("Could not find a suitable memory type!"); }