示例#1
0
        public VkObjectResult <VkSurfaceCapabilitiesKHR> GetSurfaceCapabilitiesKHR(IVkSurfaceKHR surface)
        {
            VkSurfaceCapabilitiesKHR capabilities;
            var result = Direct.GetPhysicalDeviceSurfaceCapabilitiesKHR(Handle, surface.Handle, &capabilities);

            return(new VkObjectResult <VkSurfaceCapabilitiesKHR>(result, capabilities));
        }
示例#2
0
        public VkObjectResult <bool> GetSurfaceSupportKHR(int queueFamiltyIndex, IVkSurfaceKHR surface)
        {
            var      surfaceHandle = surface?.Handle ?? VkSurfaceKHR.HandleType.Null;
            VkBool32 supported;
            var      result = Direct.GetPhysicalDeviceSurfaceSupportKHR(Handle, queueFamiltyIndex, surfaceHandle, &supported);

            return(new VkObjectResult <bool>(result, supported.Value));
        }
示例#3
0
        private void CreateSurface()
        {
            var createInfo = new VkWin32SurfaceCreateInfoKHR
            {
                Hwnd      = form.Handle,
                Hinstance = Process.GetCurrentProcess().Handle
            };

            surface = instance.CreateWin32SurfaceKHR(createInfo, null).Object;
        }
示例#4
0
        private static bool IsDeviceSuitable(IVkPhysicalDevice physicalDevice, IVkSurfaceKHR surface)
        {
            var extensionProps = physicalDevice.EnumerateDeviceExtensionProperties(null).Object;

            if (!DeviceExtensions.All(e => extensionProps.Any(p => p.ExtensionName == e)))
            {
                return(false);
            }
            var swapChainSupportDetails = QuerySwapChainSupport(physicalDevice, surface);

            return
                (swapChainSupportDetails.Formats.Any() &&
                 swapChainSupportDetails.PresentModes.Any() &&
                 FindQueueFamilies(physicalDevice, surface).HasValue);
        }
示例#5
0
 private static SwapChainSupportDetails QuerySwapChainSupport(IVkPhysicalDevice physicalDevice, IVkSurfaceKHR surface)
 {
     return(new SwapChainSupportDetails
     {
         Capabilities = physicalDevice.GetSurfaceCapabilitiesKHR(surface).Object,
         Formats = physicalDevice.GetSurfaceFormatsKHR(surface).Object,
         PresentModes = physicalDevice.GetSurfacePresentModesKHR(surface).Object
     });
 }
示例#6
0
        private static QueueFamilyIndices?FindQueueFamilies(IVkPhysicalDevice physicalDevice, IVkSurfaceKHR surface)
        {
            var graphicsFamily = physicalDevice.QueueFamilyProperties
                                 .Select((p, i) => new { p, i })
                                 .FirstOrDefault(x => x.p.QueueCount > 0 && (x.p.QueueFlags & VkQueueFlags.Graphics) != 0)
                                 ?.i;
            var presentFamily = physicalDevice.QueueFamilyProperties
                                .Select((p, i) => new { p, i })
                                .FirstOrDefault(x => x.p.QueueCount > 0 && physicalDevice.GetSurfaceSupportKHR(x.i, surface).Object)
                                ?.i;

            return(graphicsFamily.HasValue && presentFamily.HasValue ? new QueueFamilyIndices
            {
                GraphicsFamily = graphicsFamily.Value,
                PresentFamily = presentFamily.Value
            } : (QueueFamilyIndices?)null);
        }
示例#7
0
        public VkObjectResult <IReadOnlyList <VkPresentModeKHR> > GetSurfacePresentModesKHR(IVkSurfaceKHR surface)
        {
            int count;

            Direct.GetPhysicalDeviceSurfacePresentModesKHR(Handle, surface.Handle, &count, null).CheckSuccess();
            var resultArray = new VkPresentModeKHR[count];

            fixed(VkPresentModeKHR *pResults = resultArray)
            {
                var result = Direct.GetPhysicalDeviceSurfacePresentModesKHR(Handle, surface.Handle, &count, pResults);

                return(new VkObjectResult <IReadOnlyList <VkPresentModeKHR> >(result, resultArray));
            }
        }
示例#8
0
 private VkObjectResult<bool> GetPhysicalDeviceSurfaceSupportKHR(int queueFamiltyIndex, IVkSurfaceKHR surface)
 {
     var surfaceHandle = surface?.Handle ?? VkSurfaceKHR.HandleType.Null;
     VkBool32 supported;
     var result = Direct.GetPhysicalDeviceSurfaceSupportKHR(Handle, queueFamiltyIndex, surfaceHandle, &supported);
     return new VkObjectResult<bool>(result, supported.Value);
 }