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:
authorJens Peters <jp7677@gmail.com>2021-10-19 23:43:28 +0300
committerJens Peters <jp7677@gmail.com>2021-10-19 23:43:28 +0300
commit6e9cf9443bd9a8709d296d982031d61ca1fcc1c4 (patch)
tree338de2b255f9f67e770186e6bf4e10155409a8d0
parent990fec203ae83a76c176bcee73a3220369a03ea4 (diff)
nvapi: Add NvAPI_GetPhysicalGPUsFromLogicalGPU
-rw-r--r--src/nvapi.cpp19
-rw-r--r--src/nvapi_interface.cpp1
-rw-r--r--tests/nvapi_sysinfo.cpp15
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;