private Device CreateLogicalDevice(out Queue GraphicsQueue, out Queue PresentQueue) { var queueInfos = stackalloc DeviceQueueCreateInfo[2]; uint infoCount = 1; float queuePriority = 1f; queueInfos[0] = new DeviceQueueCreateInfo(queueFamilyIndex: (uint)this.QueueIndices.GraphicsFamily, queueCount: 1, pQueuePriorities: &queuePriority); if (this.QueueIndices.GraphicsFamily != this.QueueIndices.PresentFamily) { infoCount = 2; queueInfos[1] = new DeviceQueueCreateInfo(queueFamilyIndex: (uint)this.QueueIndices.PresentFamily, queueCount: 1, pQueuePriorities: &queuePriority); } PhysicalDeviceFeatures features = default; using var extensionNames = SilkMarshal.StringArrayToMemory(RequiredDeviceExtensions); PhysicalDeviceSeparateDepthStencilLayoutsFeatures depthStencilFeature = new PhysicalDeviceSeparateDepthStencilLayoutsFeatures { SType = StructureType.PhysicalDeviceSeparateDepthStencilLayoutsFeatures, SeparateDepthStencilLayouts = true }; DeviceCreateInfo createInfo = new DeviceCreateInfo { SType = StructureType.DeviceCreateInfo, //PNext = &depthStencilFeature, QueueCreateInfoCount = infoCount, PQueueCreateInfos = queueInfos, EnabledExtensionCount = (uint)RequiredDeviceExtensions.Length, PpEnabledExtensionNames = (byte **)extensionNames, PEnabledFeatures = &features }; Device device; var res = VkApi.CreateDevice(this.PhysicalDevice, &createInfo, null, &device); if (res != Result.Success) { throw new VMASharp.VulkanResultException("Logical Device Creation Failed!", res); } Queue queue = default; VkApi.GetDeviceQueue(device, (uint)this.QueueIndices.GraphicsFamily, 0, &queue); GraphicsQueue = queue; if (this.QueueIndices.GraphicsFamily != this.QueueIndices.PresentFamily) { queue = default; VkApi.GetDeviceQueue(device, (uint)this.QueueIndices.PresentFamily, 0, &queue); } PresentQueue = queue; return(device); }