Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pointer">
        /// </param>
        internal static unsafe PerformanceCounterDescription MarshalFrom(SharpVk.Interop.Khronos.PerformanceCounterDescription *pointer)
        {
            PerformanceCounterDescription result = default(PerformanceCounterDescription);

            result.Flags       = pointer->Flags;
            result.Name        = Interop.HeapUtil.MarshalStringFrom(pointer->Name, Constants.MaxDescriptionSize, true);
            result.Category    = Interop.HeapUtil.MarshalStringFrom(pointer->Category, Constants.MaxDescriptionSize, true);
            result.Description = Interop.HeapUtil.MarshalStringFrom(pointer->Description, Constants.MaxDescriptionSize, true);
            return(result);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="extendedHandle">
 /// The PhysicalDevice handle to extend.
 /// </param>
 /// <param name="queueFamilyIndex">
 /// </param>
 /// <param name="counters">
 /// </param>
 /// <param name="counterDescriptions">
 /// </param>
 public static unsafe Result EnumerateQueueFamilyPerformanceQueryCounters(this SharpVk.PhysicalDevice extendedHandle, uint queueFamilyIndex, out PerformanceCounter[] counters, out PerformanceCounterDescription[] counterDescriptions)
 {
     try
     {
         Result       result = default(Result);
         uint         marshalledCounterCount = default(uint);
         CommandCache commandCache           = default(CommandCache);
         SharpVk.Interop.Khronos.PerformanceCounter *           marshalledCounters            = default(SharpVk.Interop.Khronos.PerformanceCounter *);
         SharpVk.Interop.Khronos.PerformanceCounterDescription *marshalledCounterDescriptions = default(SharpVk.Interop.Khronos.PerformanceCounterDescription *);
         commandCache = extendedHandle.commandCache;
         SharpVk.Interop.Khronos.VkPhysicalDeviceEnumerateQueueFamilyPerformanceQueryCountersDelegate commandDelegate = commandCache.Cache.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
         result = commandDelegate(extendedHandle.handle, queueFamilyIndex, &marshalledCounterCount, marshalledCounters, marshalledCounterDescriptions);
         if (SharpVkException.IsError(result))
         {
             throw SharpVkException.Create(result);
         }
         marshalledCounterDescriptions = (SharpVk.Interop.Khronos.PerformanceCounterDescription *)(Interop.HeapUtil.Allocate <SharpVk.Interop.Khronos.PerformanceCounterDescription>((uint)(marshalledCounterCount)));
         marshalledCounters            = (SharpVk.Interop.Khronos.PerformanceCounter *)(Interop.HeapUtil.Allocate <SharpVk.Interop.Khronos.PerformanceCounter>((uint)(marshalledCounterCount)));
         commandDelegate(extendedHandle.handle, queueFamilyIndex, &marshalledCounterCount, marshalledCounters, marshalledCounterDescriptions);
         if (marshalledCounters != null)
         {
             var fieldPointer = new SharpVk.Khronos.PerformanceCounter[(uint)(marshalledCounterCount)];
             for (int index = 0; index < (uint)(marshalledCounterCount); index++)
             {
                 fieldPointer[index] = SharpVk.Khronos.PerformanceCounter.MarshalFrom(&marshalledCounters[index]);
             }
             counters = fieldPointer;
         }
         else
         {
             counters = null;
         }
         if (marshalledCounterDescriptions != null)
         {
             var fieldPointer = new SharpVk.Khronos.PerformanceCounterDescription[(uint)(marshalledCounterCount)];
             for (int index = 0; index < (uint)(marshalledCounterCount); index++)
             {
                 fieldPointer[index] = SharpVk.Khronos.PerformanceCounterDescription.MarshalFrom(&marshalledCounterDescriptions[index]);
             }
             counterDescriptions = fieldPointer;
         }
         else
         {
             counterDescriptions = null;
         }
         return(result);
     }
     finally
     {
         Interop.HeapUtil.FreeAll();
     }
 }