Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 3
0
        /// <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();
        }
Esempio n. 4
0
 private bool IsSuitableDevice(PhysicalDevice device)
 {
     return(device.EnumerateDeviceExtensionProperties(null).Any(extension => extension.ExtensionName == KhrSwapchain.ExtensionName) &&
            FindQueueFamilies(device).IsComplete);
 }
Esempio n. 5
0
        private void PickPhysicalDevice()
        {
            var availableDevices = this.instance.EnumeratePhysicalDevices();

            this.physicalDevice = availableDevices.First(IsSuitableDevice);
        }
Esempio n. 6
0
 internal DisplayMode(Interop.DisplayMode handle, PhysicalDevice parent, CommandCache commandCache)
 {
     this.handle       = handle;
     this.parent       = parent;
     this.commandCache = commandCache;
 }