public SharedQueueItem(uint queueFamilyIndex, uint queueCount, VulkanLogicalDevice vulkanLogicalDevice, Extent3D minImageTransferGranularity, uint timestampValidBits) : this() { this.QueueFamilyIndex = queueFamilyIndex; this.QueueCountRemaining = new int[queueCount]; for (int i = 0; i < queueCount; i++) { QueueCountRemaining[i] = i; } this.myDevice = vulkanLogicalDevice; this.minImageTransferGranularity = minImageTransferGranularity; this.timestampValidBits = timestampValidBits; }
//TODO: eventually expand this public DeviceQueueManager(VulkanPhysicalDevice selectedPhysicalDevice, VulkanLogicalDevice vulkanLogicalDevice) { var Properties = selectedPhysicalDevice.QueueFamilyProperties; if (Properties == null) { throw new Exception("Unable to find queue family properties!"); } // myDeviceCreateQueues = new Interop.DeviceQueueCreateInfo[Properties.Length]; #if DEBUG Debug.WriteLine("Expected number of Queues to Create: " + Properties.Length); #endif for (int index = 0; index < Properties.Length; index++) { var A = Properties[index]; QueueManagerItem myValue; SharedQueueItem myNewQueueItem = new SharedQueueItem((uint)index, A.QueueCount, vulkanLogicalDevice, A.MinImageTransferGranularity, A.TimestampValidBits); foreach (Interop.QueueFlags G in Enum.GetValues(typeof(Interop.QueueFlags))) { if ((A.QueueFlags & G) == G) { //TODO: one main graphics queue restriction? { } if (!myQueueLookup.TryGetValue(G, out myValue)) { myValue = new QueueManagerItem(); myQueueLookup[G] = myValue; } myValue.AddQueue(myNewQueueItem); } } } }