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);
                    }
                }
            }
        }