using System.Collections.Generic; using System.Linq; using NvAPIWrapper.Native; using NvAPIWrapper.Native.GPU; namespace NvAPIWrapper.GPU { /// /// Holds information about the GPU utilization domains /// public class GPUUsageInformation { internal GPUUsageInformation(PhysicalGPU physicalGPU) { PhysicalGPU = physicalGPU; } /// /// Gets the Bus interface (BUS) utilization /// public GPUUsageDomainStatus BusInterface { get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.BusInterface); } /// /// Gets the frame buffer (FB) utilization /// public GPUUsageDomainStatus FrameBuffer { get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.FrameBuffer); } /// /// Gets the graphic engine (GPU) utilization /// public GPUUsageDomainStatus GPU { get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.GPU); } /// /// Gets a boolean value indicating if the dynamic performance states is enabled /// public bool IsDynamicPerformanceStatesEnabled { get => GPUApi.GetDynamicPerformanceStatesInfoEx(PhysicalGPU.Handle).IsDynamicPerformanceStatesEnabled; } /// /// Gets the physical GPU that this instance describes /// public PhysicalGPU PhysicalGPU { get; } /// /// Gets all valid utilization domains and information /// public IEnumerable UtilizationDomainsStatus { get { try { var dynamicPerformanceStates = GPUApi.GetDynamicPerformanceStatesInfoEx(PhysicalGPU.Handle); if (dynamicPerformanceStates.IsDynamicPerformanceStatesEnabled) { return dynamicPerformanceStates.Domains .Select(pair => new GPUUsageDomainStatus(pair.Key, pair.Value)); } } catch { // ignored } return GPUApi.GetUsages(PhysicalGPU.Handle).Domains .Select(pair => new GPUUsageDomainStatus(pair.Key, pair.Value)); } } /// /// Gets the Video engine (VID) utilization /// public GPUUsageDomainStatus VideoEngine { get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.VideoEngine); } /// /// Enables dynamic performance states /// public void EnableDynamicPerformanceStates() { GPUApi.EnableDynamicPStates(PhysicalGPU.Handle); } } }