Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jp7677/dxvk-nvapi.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvapi_gpu.cpp')
-rw-r--r--src/nvapi_gpu.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/nvapi_gpu.cpp b/src/nvapi_gpu.cpp
index b0b4ce6..888826f 100644
--- a/src/nvapi_gpu.cpp
+++ b/src/nvapi_gpu.cpp
@@ -6,6 +6,45 @@
extern "C" {
using namespace dxvk;
+ NvAPI_Status __cdecl NvAPI_GPU_GetGpuCoreCount(NvPhysicalGpuHandle hPhysicalGpu, NvU32* pCount) {
+ constexpr auto n = __func__;
+ static bool alreadyLoggedNoNvml = false;
+ static bool alreadyLoggedHandleInvalidated = false;
+ static bool alreadyLoggedOk = false;
+
+ if (nvapiAdapterRegistry == nullptr)
+ return ApiNotInitialized(n);
+
+ if (pCount == nullptr)
+ return InvalidArgument(n);
+
+ auto adapter = reinterpret_cast<NvapiAdapter*>(hPhysicalGpu);
+ if (!nvapiAdapterRegistry->IsAdapter(adapter))
+ return ExpectedPhysicalGpuHandle(n);
+
+ if (!adapter->HasNvml())
+ return NoImplementation(n, alreadyLoggedNoNvml);
+
+ if (!adapter->HasNvmlDevice())
+ return HandleInvalidated(str::format(n, ": NVML available but current adapter is not NVML compatible"), alreadyLoggedHandleInvalidated);
+
+ unsigned int cores;
+ auto result = adapter->GetNvmlDeviceNumGpuCores(&cores);
+ switch (result) {
+ case NVML_SUCCESS:
+ *pCount = cores;
+ return Ok(n, alreadyLoggedOk);
+ case NVML_ERROR_FUNCTION_NOT_FOUND:
+ return NoImplementation(n, alreadyLoggedNoNvml);
+ case NVML_ERROR_NOT_SUPPORTED:
+ return NotSupported(n);
+ case NVML_ERROR_GPU_IS_LOST:
+ return HandleInvalidated(n);
+ default:
+ return Error(str::format(n, ": ", adapter->GetNvmlErrorString(result)));
+ }
+ }
+
NvAPI_Status __cdecl NvAPI_GPU_GetGPUType(NvPhysicalGpuHandle hPhysicalGpu, NV_GPU_TYPE* pGpuType) {
constexpr auto n = __func__;