コード例 #1
0
        private unsafe QueueFamilyIndices FindQueueFamilies(PhysicalDevice device)
        {
            var  indices          = new QueueFamilyIndices();
            uint queueFamilyCount = 0;

            _vk.GetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, (QueueFamilyProperties *)null);

            QueueFamilyProperties *queueFamilies = stackalloc QueueFamilyProperties[(int)queueFamilyCount];

            _vk.GetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, queueFamilies);

            for (uint i = 0; i < queueFamilyCount; i++)
            {
                QueueFamilyProperties queueFamily = queueFamilies[i];
                if (queueFamily.QueueFlags.HasFlag(QueueFlags.QueueGraphicsBit))
                {
                    indices.GraphicsFamily = i;
                }

                _vkSurface.GetPhysicalDeviceSurfaceSupport(device, i, _surface, out Bool32 presentSupport);

                if (presentSupport == Vk.True)
                {
                    indices.PresentFamily = i;
                }

                if (indices.IsComplete)
                {
                    break;
                }
            }

            return(indices);
        }
コード例 #2
0
 /// <summary>
 /// Reports properties of the queues of the specified physical device.
 /// </summary>
 public QueueFamilyProperties[] GetQueueFamilyProperties()
 {
     unsafe
     {
         try
         {
             QueueFamilyProperties[] result = default(QueueFamilyProperties[]);
             uint queueFamilyPropertyCount;
             QueueFamilyProperties *marshalledQueueFamilyProperties = null;
             Interop.Commands.vkGetPhysicalDeviceQueueFamilyProperties(this.handle, &queueFamilyPropertyCount, null);
             marshalledQueueFamilyProperties = (QueueFamilyProperties *)Interop.HeapUtil.Allocate <QueueFamilyProperties>((uint)queueFamilyPropertyCount);
             Interop.Commands.vkGetPhysicalDeviceQueueFamilyProperties(this.handle, &queueFamilyPropertyCount, marshalledQueueFamilyProperties);
             result = new QueueFamilyProperties[(uint)queueFamilyPropertyCount];
             for (int index = 0; index < (uint)queueFamilyPropertyCount; index++)
             {
                 result[index] = marshalledQueueFamilyProperties[index];
             }
             return(result);
         }
         finally
         {
             Interop.HeapUtil.FreeLog();
         }
     }
 }
コード例 #3
0
 public static extern unsafe void vkGetPhysicalDeviceQueueFamilyProperties(IntPtr physicalDevice, uint *pQueueFamilyPropertyCount, QueueFamilyProperties *pQueueFamilyProperties);
コード例 #4
0
 internal static unsafe extern void vkGetPhysicalDeviceQueueFamilyProperties(PhysicalDevice physicalDevice, out UInt32 *QueueFamilyPropertyCount, QueueFamilyProperties *QueueFamilyProperties);
コード例 #5
0
 internal static unsafe extern void vkGetPhysicalDeviceQueueFamilyProperties(IntPtr physicalDevice, UInt32 *pQueueFamilyPropertyCount, QueueFamilyProperties *pQueueFamilyProperties);