public IMgLogicalDevice CreateDevice(IMgPhysicalDevice gpu, IMgSurfaceKHR presentationSurface, MgQueueAllocation requestCount, MgQueueFlagBits requestedQueueType, string[] enabledExtensions) { // Find a queue that supports graphics operations MgQueueFamilyProperties[] queueProps; gpu.GetPhysicalDeviceQueueFamilyProperties(out queueProps); Debug.Assert(queueProps != null); Debug.Assert(queueProps.Length >= 1); uint queueFamilyIndex = 0; queueFamilyIndex = presentationSurface != null ? FindAppropriateQueueFamilyForSurface(gpu, presentationSurface, queueProps, requestedQueueType) : FindAppropriateQueueFamily(queueProps, requestedQueueType); uint noOfQueues = (requestCount == MgQueueAllocation.One) ? 1 : queueProps [queueFamilyIndex].QueueCount; var queuePriorities = new float[noOfQueues]; for (uint i = 0; i < noOfQueues; ++i) { queuePriorities [i] = 0f; } var queueCreateInfo = new MgDeviceQueueCreateInfo { QueueFamilyIndex = queueFamilyIndex, QueueCount = noOfQueues, QueuePriorities = queuePriorities, }; return(CreateDevice(gpu, queueCreateInfo, enabledExtensions)); }
public IMgLogicalDevice CreateDevice(IMgPhysicalDevice gpu, MgDeviceQueueCreateInfo queueCreateInfo, string[] enabledExtensions) { if (gpu == null) { throw new ArgumentNullException(nameof(gpu)); } if (queueCreateInfo == null) { throw new ArgumentNullException(nameof(queueCreateInfo)); } var deviceCreateInfo = new MgDeviceCreateInfo { EnabledExtensionNames = enabledExtensions, QueueCreateInfos = new[] { queueCreateInfo }, }; IMgDevice device; var errorCode = gpu.CreateDevice(deviceCreateInfo, null, out device); Debug.Assert(errorCode == Result.SUCCESS, errorCode + " != Result.SUCCESS"); // Get the graphics queue var availableQueues = new IMgQueueInfo[queueCreateInfo.QueueCount]; for (uint i = 0; i < queueCreateInfo.QueueCount; ++i) { IMgQueue queue; device.GetDeviceQueue(queueCreateInfo.QueueFamilyIndex, i, out queue); availableQueues [i] = new MgQueueInfo(i, gpu, device, queueCreateInfo.QueueFamilyIndex, queue); } return(new MgLogicalDevice(gpu, device, availableQueues)); }