示例#1
0
        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.");
        }
示例#2
0
        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);
        }
示例#3
0
        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!");
        }