public VkObjectResult <VkSurfaceCapabilitiesKHR> GetSurfaceCapabilitiesKHR(IVkSurfaceKHR surface) { VkSurfaceCapabilitiesKHR capabilities; var result = Direct.GetPhysicalDeviceSurfaceCapabilitiesKHR(Handle, surface.Handle, &capabilities); return(new VkObjectResult <VkSurfaceCapabilitiesKHR>(result, capabilities)); }
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)); }
private void CreateSurface() { var createInfo = new VkWin32SurfaceCreateInfoKHR { Hwnd = form.Handle, Hinstance = Process.GetCurrentProcess().Handle }; surface = instance.CreateWin32SurfaceKHR(createInfo, null).Object; }
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); }
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 }); }
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); }
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)); } }
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); }