Fork of falahati/NvAPIWrapper with safe modernization work focused on newer NVIDIA drivers/GPUs and better fallback behavior on older systems.
- Repository:
https://github.com/varun875/NvAPIWrapper-V - Package ID:
Varun.NvAPIWrapper.Net - Current package version in this repo:
9.0.2 - Library target framework:
net6.0 - Library language version: C#
9.0
Modern IDs and delegates were wired for:
NvAPI_GPU_GetGspFeaturesNvAPI_GPU_NVLINK_GetCapsNvAPI_SYS_GetDisplayDriverInfoNvAPI_SYS_GetPhysicalGPUsNvAPI_SYS_GetLogicalGPUsNvAPI_RegisterRiseCallbackNvAPI_RequestRiseNvAPI_UninstallRise
New Try* wrappers were added so unsupported drivers/GPUs do not throw in common telemetry paths:
GPUApi.TryGetGSPInfoGPUApi.TryGetNVLinkCapsGPUApi.TryGetPhysicalGPUHandleDataGPUApi.TryGetLogicalGPUHandleDataGPUApi.TryClientPowerTopologyGetStatusGPUApi.TryClientPowerPoliciesGetStatusGPUApi.TryClientPowerPoliciesGetInfoGPUApi.TryGetPerformancePoliciesStatusGPUApi.TryGetPerformanceDecreaseInfoGPUApi.TryGetCurrentPerformanceStateGeneralApi.TryGetDisplayDriverInfoNVIDIA.TryGetDisplayDriverInfo
PhysicalGPU.GetPhysicalGPUs()andLogicalGPU.GetLogicalGPUs()now try modern metadata enumeration first, then fall back to legacy enumeration.- Added
PhysicalGPU.GSPFirmwareVersion - Added
PhysicalGPU.NVLinkCapabilities - Added
PhysicalGPU.IsNVLinkSupported - Added power telemetry snapshot support:
PhysicalGPU.TryGetPowerTelemetrySnapshot(out GPUPowerTelemetrySnapshot?)PhysicalGPU.TryGetEstimatedBoardPowerUsageInWatts(...)PhysicalGPU.TryGetEstimatedGPUPowerUsageInWatts(...)
- Added safe thermal/usage helpers:
GPUThermalInformation.TryGetCurrentThermalLevel(...)GPUThermalInformation.TryGetThermalSensors(...)GPUUsageInformation.TryGetUtilizationDomainsStatus(...)GPUUsageInformation.TryGetDynamicPerformanceStatesEnabled(...)GPUPowerTopologyInformation.TryGetPowerTopologyEntries(...)GPUPowerTopologyInformation.TryGetPowerUsageInPercent(...)GPUPowerTopologyInformation.TryGetEstimatedPowerUsageInWatts(...)
- Memory:
GDDR6,GDDR6X,GDDR7,HBM2,HBM2e,HBM3,HBM3e,LPDDR5,DDR5 - PCIe:
PCIe4,PCIe5(plus display formatting updates) - System:
Workstation,DataCenter,Hyperscale,Edge - Public clock domains:
BaseClock,VideoEncode,Tensor,Display - Voltage domains:
PCIeCore,SOCCore,Memory
- Uses modern package metadata:
<license type="file"><icon><readme>
- Package includes:
LICENSEREADME.mdIcon.png
using NvAPIWrapper;
using NvAPIWrapper.GPU;
NVIDIA.Initialize();
foreach (var gpu in PhysicalGPU.GetPhysicalGPUs())
{
Console.WriteLine(gpu.FullName);
// Modern capability data with safe fallback behavior
Console.WriteLine($"GSP FW: {gpu.GSPFirmwareVersion ?? "N/A"}");
Console.WriteLine($"NVLink supported: {gpu.IsNVLinkSupported}");
// Power telemetry snapshot (when available)
if (gpu.TryGetPowerTelemetrySnapshot(out var snapshot) && snapshot != null)
{
Console.WriteLine($"GPU power %: {snapshot.GPUPowerUsageInPercent}");
Console.WriteLine($"Board power %: {snapshot.BoardPowerUsageInPercent}");
}
}
NVIDIA.Unload();NVAPI commonly reports power telemetry as percentages. The new watt helpers estimate watts by multiplying:
powerPercent * providedPowerLimitWatts / 100
So these values are estimates and depend on the limit you provide (for example board TGP/TDP).
dotnet build NvAPIWrapper\NvAPIWrapper.csproj -c Release -p:SignAssembly=false
dotnet pack NvAPIWrapper\NvAPIWrapper.csproj -c Release -p:SignAssembly=falseArtifacts are generated in Release\.
NvAPIWrapper.Display- Display and display-control APIsNvAPIWrapper.GPU- GPU APIs and high-level telemetry helpersNvAPIWrapper.Mosaic- Mosaic/Surround APIsNvAPIWrapper.DRS- Driver profile APIsNvAPIWrapper.Stereo- Stereo APIsNvAPIWrapper.Native- Low-level NVAPI delegates/structuresNvAPIWrapper.NVIDIA- General system entry points
This fork prioritizes:
- Additive changes
- Capability checks before feature usage
- Legacy fallback paths to avoid regressions on older drivers/GPUs
Copyright (C) 2017-2026 Soroush Falahati and contributors
This project is licensed under LGPL v3. See LICENSE.