diff options
author | Jens Peters <jp7677@gmail.com> | 2021-10-19 23:43:28 +0300 |
---|---|---|
committer | Jens Peters <jp7677@gmail.com> | 2021-10-19 23:43:28 +0300 |
commit | 6e9cf9443bd9a8709d296d982031d61ca1fcc1c4 (patch) | |
tree | 338de2b255f9f67e770186e6bf4e10155409a8d0 | |
parent | 990fec203ae83a76c176bcee73a3220369a03ea4 (diff) |
nvapi: Add NvAPI_GetPhysicalGPUsFromLogicalGPU
-rw-r--r-- | src/nvapi.cpp | 19 | ||||
-rw-r--r-- | src/nvapi_interface.cpp | 1 | ||||
-rw-r--r-- | tests/nvapi_sysinfo.cpp | 15 |
3 files changed, 35 insertions, 0 deletions
diff --git a/src/nvapi.cpp b/src/nvapi.cpp index 24d4b3c..6d8104e 100644 --- a/src/nvapi.cpp +++ b/src/nvapi.cpp @@ -69,6 +69,25 @@ extern "C" { return Ok(n); } + NvAPI_Status __cdecl NvAPI_GetPhysicalGPUsFromLogicalGPU(NvLogicalGpuHandle hLogicalGPU,NvPhysicalGpuHandle hPhysicalGPU[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount) { + constexpr auto n = __func__; + + if (nvapiAdapterRegistry == nullptr) + return ApiNotInitialized(n); + + if (hLogicalGPU == nullptr) + return InvalidArgument(n); + + auto adapter = reinterpret_cast<NvapiAdapter*>(hLogicalGPU); + if (!nvapiAdapterRegistry->IsAdapter(adapter)) + return ExpectedPhysicalGpuHandle(n); + + hPhysicalGPU[0] = reinterpret_cast<NvPhysicalGpuHandle>(adapter); + *pGpuCount = 1; + + return Ok(n); + } + NvAPI_Status __cdecl NvAPI_GetPhysicalGPUsFromDisplay(NvDisplayHandle hNvDisp, NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount) { constexpr auto n = __func__; diff --git a/src/nvapi_interface.cpp b/src/nvapi_interface.cpp index cee3b83..3f93b1d 100644 --- a/src/nvapi_interface.cpp +++ b/src/nvapi_interface.cpp @@ -94,6 +94,7 @@ extern "C" { INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumPhysicalGPUs) INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetDisplayDriverVersion) INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetPhysicalGPUsFromDisplay) + INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetPhysicalGPUsFromLogicalGPU) INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumNvidiaDisplayHandle) INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumNvidiaUnAttachedDisplayHandle) INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetInterfaceVersionString) diff --git a/tests/nvapi_sysinfo.cpp b/tests/nvapi_sysinfo.cpp index 167a133..ef2b42d 100644 --- a/tests/nvapi_sysinfo.cpp +++ b/tests/nvapi_sysinfo.cpp @@ -217,6 +217,21 @@ TEST_CASE("Topology methods succeed", "[.sysinfo]") { REQUIRE(handle == nullptr); } + SECTION("GetPhysicalGPUsFromLogicalGPU succeeds") { + NvLogicalGpuHandle handles[NVAPI_MAX_LOGICAL_GPUS]; + NvU32 count; + REQUIRE(NvAPI_EnumLogicalGPUs(handles, &count) == NVAPI_OK); + + NvPhysicalGpuHandle physicalHandles[NVAPI_MAX_PHYSICAL_GPUS]; + REQUIRE(NvAPI_GetPhysicalGPUsFromLogicalGPU(handles[0], physicalHandles, &count) == NVAPI_OK); + REQUIRE(count == 1); + REQUIRE(physicalHandles[0] == reinterpret_cast<NvPhysicalGpuHandle>(handles[0])); + + REQUIRE(NvAPI_GetPhysicalGPUsFromLogicalGPU(handles[1], physicalHandles, &count) == NVAPI_OK); + REQUIRE(count == 1); + REQUIRE(physicalHandles[0] == reinterpret_cast<NvPhysicalGpuHandle>(handles[1])); + } + SECTION("GetPhysicalGPUsFromDisplay succeeds") { NvDisplayHandle displayHandle1 = nullptr; NvDisplayHandle displayHandle2 = nullptr; |