public static VkPresentModeKHR[] GetSurfacePresentModes(this VkPhysicalDevice phy, VkSurfaceKHR surf) { vkGetPhysicalDeviceSurfacePresentModesKHR(phy, surf, out uint count, IntPtr.Zero); VkPresentModeKHR[] modes = new VkPresentModeKHR[count]; vkGetPhysicalDeviceSurfacePresentModesKHR(phy, surf, out count, modes.Pin()); modes.Unpin(); return(modes); }
public static VkQueueFamilyProperties[] GetQueueFamilyProperties(this VkPhysicalDevice phy) { vkGetPhysicalDeviceQueueFamilyProperties(phy, out uint queueFamilyCount, IntPtr.Zero); VkQueueFamilyProperties[] qFamProps = new VkQueueFamilyProperties[queueFamilyCount]; vkGetPhysicalDeviceQueueFamilyProperties(phy, out queueFamilyCount, qFamProps.Pin()); qFamProps.Unpin(); return(qFamProps); }
public static VkSurfaceFormatKHR [] GetSurfaceFormats(this VkPhysicalDevice phy, VkSurfaceKHR surf) { vkGetPhysicalDeviceSurfaceFormatsKHR(phy, surf, out uint count, IntPtr.Zero); VkSurfaceFormatKHR [] formats = new VkSurfaceFormatKHR [count]; vkGetPhysicalDeviceSurfaceFormatsKHR(phy, surf, out count, formats.Pin()); formats.Unpin(); return(formats); }
/// <summary> /// Reports properties of the queues of the specified physical device. /// </summary> /// <param name="physicalDevice"></param> /// <returns></returns> public static VkQueueFamilyProperties[] QueueFamilyProperties(this VkPhysicalDevice physicalDevice) { VkQueueFamilyProperties[] result; UInt32 count; vkAPI.vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, null); result = new VkQueueFamilyProperties[count]; if (count > 0) { fixed(VkQueueFamilyProperties *pointer = result) { vkAPI.vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, pointer); } } return(result); }
/// <summary> /// </summary> /// <param name="device"></param> /// <param name="surface"></param> /// <returns></returns> public static VkSurfaceFormatKHR[] Formats(this VkPhysicalDevice device, VkSurfaceKHR surface) { VkSurfaceFormatKHR[] result; UInt32 count; vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &count, null); result = new VkSurfaceFormatKHR[count]; if (count != 0) { fixed(VkSurfaceFormatKHR *pointer = result) { vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &count, pointer); } } return(result); }
/// <summary> /// Returns global layer properties. /// </summary> /// <param name="instance"></param> /// <returns></returns> public static VkPhysicalDevice[] PhysicalDevices(this VkInstance instance) { VkPhysicalDevice[] result; UInt32 count; vkAPI.vkEnumeratePhysicalDevices(instance, &count, null).Check(); result = new VkPhysicalDevice[count]; if (count > 0) { fixed(VkPhysicalDevice *pointer = result) { vkAPI.vkEnumeratePhysicalDevices(instance, &count, pointer).Check(); } } return(result); }
/// <summary> /// Returns global layer properties. /// </summary> /// <returns></returns> public static VkPresentModeKHR[] PresentModesKHR(VkPhysicalDevice device, VkSurfaceKHR surface) { VkPresentModeKHR[] result; UInt32 count; vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &count, null); result = new VkPresentModeKHR[count]; if (count > 0) { fixed(VkPresentModeKHR *pointer = result) { vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &count, pointer); } } return(result); }
public static bool TryGetPhysicalDevice(this VkInstance inst, VkPhysicalDeviceType deviceType, out VkPhysicalDevice phy) { CheckResult(vkEnumeratePhysicalDevices(inst, out uint phyCount, IntPtr.Zero)); VkPhysicalDevice[] phys = new VkPhysicalDevice[phyCount]; CheckResult(vkEnumeratePhysicalDevices(inst, out phyCount, phys.Pin())); for (int i = 0; i < phys.Length; i++) { phy = phys[i]; vkGetPhysicalDeviceProperties(phy, out VkPhysicalDeviceProperties props); if (props.deviceType == deviceType) { return(true); } } phy = default; return(false); }
public static VkExtensionProperties[] DeviceExtensionProperties(this VkPhysicalDevice device, string layerName = null) { VkExtensionProperties[] result; IntPtr pLayerName = Marshal.StringToHGlobalAnsi(layerName); UInt32 count; vkAPI.vkEnumerateDeviceExtensionProperties(device, pLayerName, &count, null).Check(); result = new VkExtensionProperties[count]; if (count > 0) { fixed(VkExtensionProperties *pointer = result) { vkAPI.vkEnumerateDeviceExtensionProperties(device, pLayerName, &count, pointer).Check(); } } Marshal.FreeHGlobal(pLayerName); return(result); }
public static VkPhysicalDeviceToolPropertiesEXT[] GetToolProperties(VkPhysicalDevice phy) { CheckResult(vkGetPhysicalDeviceToolPropertiesEXT(phy, out uint count, IntPtr.Zero)); int sizeStruct = Marshal.SizeOf <VkPhysicalDeviceToolPropertiesEXT> (); IntPtr ptrTools = Marshal.AllocHGlobal(sizeStruct * (int)count); CheckResult(vkGetPhysicalDeviceToolPropertiesEXT(phy, out count, ptrTools)); VkPhysicalDeviceToolPropertiesEXT[] result = new VkPhysicalDeviceToolPropertiesEXT[count]; IntPtr tmp = ptrTools; for (int i = 0; i < count; i++) { result[i] = Marshal.PtrToStructure <VkPhysicalDeviceToolPropertiesEXT> (tmp); tmp += sizeStruct; } Marshal.FreeHGlobal(ptrTools); return(result); }