public unsafe void Dispose() { if (debugReportCallback != VkDebugUtilsMessengerEXT.Null) { vkDestroyDebugUtilsMessengerEXT(NativeInstance, debugReportCallback, null); debugReportCallback = VkDebugUtilsMessengerEXT.Null; } vkDestroyInstance(NativeInstance, null); }
public static void vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, VkAllocationCallbacks *pAllocator) => vkDestroyDebugUtilsMessengerEXT_ptr(instance, messenger, pAllocator);
protected override void FirstWindowCreated() { VK = new VK(this); // Debug Callback if (HasValidationLayers) { DebugMessenger = CreateDebugMessenger((messageSeverity, messageTypes, pCallbackData, pUserData) => { var message = VK.STRING(pCallbackData->pMessage); if (messageSeverity.HasFlag(VkDebugUtilsMessageSeverityFlagsEXT.Error)) { Log.Error(Name, message); } else if (messageSeverity.HasFlag(VkDebugUtilsMessageSeverityFlagsEXT.Warning)) { Log.Warning(Name, message); } else { Log.Message(Name, message); } return(VkConst.FALSE); }); } // Pick a Physical Device PhysicalDevice = PickPhysicalDevice(); // get the API version { VkPhysicalDeviceProperties properties; VK.GetPhysicalDeviceProperties(PhysicalDevice, &properties); ApiVersion = VK.UNMAKE_VERSION(properties.apiVersion); int length = 0; while (length < VkConst.MAX_PHYSICAL_DEVICE_NAME_SIZE && properties.deviceName[length] != 0) { length++; } DeviceName = Encoding.UTF8.GetString(properties.deviceName, length); } // Create the Device { TryGetQueueFamilyIndex(PhysicalDevice, VkQueueFlags.GraphicsBit, out uint graphicsFamilyIndex); // Graphics Family Queue var priority = 1.0f; var queueCreateInfo = new VkDeviceQueueCreateInfo { sType = VkStructureType.DeviceQueueCreateInfo, queueFamilyIndex = graphicsFamilyIndex, queueCount = 1, pQueuePriorities = &priority }; // Device Features var deviceFeatures = new VkPhysicalDeviceFeatures(); var createInfo = new VkDeviceCreateInfo { sType = VkStructureType.DeviceCreateInfo, pQueueCreateInfos = &queueCreateInfo, queueCreateInfoCount = 1, pEnabledFeatures = &deviceFeatures, }; // Device Extensions using var deviceExtensionNames = new NativeStringArray(deviceExtensions); createInfo.enabledExtensionCount = deviceExtensionNames.Length; createInfo.ppEnabledExtensionNames = deviceExtensionNames; var result = VK.CreateDevice(PhysicalDevice, &createInfo, null, out Device); if (result != VkResult.Success) { throw new Exception($"Failed to create Vulkan Logical Device, {result}"); } // Get the Graphics Queue VK.GetDeviceQueue(Device, graphicsFamilyIndex, 0, out GraphicsQueue); } }