private IEnumerable <uint> GetPresentQueues(SharpVk.PhysicalDevice device, VKSurface surface) { // - Gets GPU command queues var queues = device.GetQueueFamilyProperties(); for (uint i = 0; i < queues.Length; ++i) { if (device.GetSurfaceSupport(i, surface.Handle)) { yield return(i); } } }
private IEnumerable <uint> GetSuitableQueues(SharpVk.PhysicalDevice device, QueueFlags type) { // - Gets GPU command queues var queues = device.GetQueueFamilyProperties(); for (uint i = 0; i < queues.Length; ++i) { var queue = queues[i]; if (queue.QueueFlags.HasFlag(type)) { yield return(i); } } }
/// <summary> /// Initializes the physical device. /// </summary> public override void Initialize(ISurface surface) { base.Initialize(surface); // - Get the vulkan library var library = Library as VulkanLibrary; // - Makes a new drawing surface DrawingSurface = surface.CreateVKSurface(library.Handle); // - Gets all devices var devices = library.Handle.EnumeratePhysicalDevices(); // - Filter all non graphic devices var suitableDevices = FilterSuitableDevices(devices, DrawingSurface); // - Order devices by priority (performance) var orderedDevices = OrderDeviceBySuitability(suitableDevices); // - Takes the first suitable device Handle = orderedDevices.First(); }
private bool IsSuitableDevice(PhysicalDevice device) { return(device.EnumerateDeviceExtensionProperties(null).Any(extension => extension.ExtensionName == KhrSwapchain.ExtensionName) && FindQueueFamilies(device).IsComplete); }
private void PickPhysicalDevice() { var availableDevices = this.instance.EnumeratePhysicalDevices(); this.physicalDevice = availableDevices.First(IsSuitableDevice); }
internal DisplayMode(Interop.DisplayMode handle, PhysicalDevice parent, CommandCache commandCache) { this.handle = handle; this.parent = parent; this.commandCache = commandCache; }