Skip to content

Mirror's Edge PhysX support #313

Description

@jp7677

It seems that Mirror's Edge (and also some PhysX demos), or likely the PhysX version that comes with that, needs NvAPI_CUDA_EnumComputeCapableByTopology (0x36e39e6b) for working PhysX. Unfortunately this function is not exposed by NVAPI headers.

May be similar to NvAPI_GPU_CudaEnumComputeCapableGpus (

NvAPI_Status __cdecl NvAPI_GPU_CudaEnumComputeCapableGpus(NV_COMPUTE_GPU_TOPOLOGY* pComputeTopo) {
constexpr auto n = __func__;
if (log::tracing())
log::trace(n, log::fmt::ptr(pComputeTopo));
if (!nvapiAdapterRegistry)
return ApiNotInitialized(n);
if (!pComputeTopo)
return InvalidArgument(n);
if (pComputeTopo->version != NV_COMPUTE_GPU_TOPOLOGY_VER1)
return IncompatibleStructVersion(n, pComputeTopo->version);
auto cudaCapableGpus = std::vector<NvPhysicalGpuHandle>(0);
for (auto i = 0U; i < nvapiAdapterRegistry->GetAdapterCount(); i++) {
auto adapter = nvapiAdapterRegistry->GetAdapter(i);
if (!adapter->HasNvProprietaryDriver() || adapter->GetArchitectureId() < NV_GPU_ARCHITECTURE_GM000) // Maxwell is the oldest generation we can detect
continue;
cudaCapableGpus.push_back(reinterpret_cast<NvPhysicalGpuHandle>(adapter));
}
// Those flags match NVAPI on Windows for a normal desktop machine
auto flags = NV_COMPUTE_GPU_TOPOLOGY_PHYSICS_CAPABLE | NV_COMPUTE_GPU_TOPOLOGY_PHYSICS_ENABLE | NV_COMPUTE_GPU_TOPOLOGY_PHYSICS_RECOMMENDED;
switch (pComputeTopo->version) {
case NV_COMPUTE_GPU_TOPOLOGY_VER1: {
auto pComputeTopoV1 = reinterpret_cast<NV_COMPUTE_GPU_TOPOLOGY_V1*>(pComputeTopo);
pComputeTopoV1->gpuCount = cudaCapableGpus.size();
for (auto i = 0U; i < cudaCapableGpus.size(); i++) {
pComputeTopoV1->computeGpus[i].hPhysicalGpu = cudaCapableGpus[i];
pComputeTopoV1->computeGpus[i].flags = flags;
}
break;
}
default:
return Error(n); // Unreachable, but just to be sure
}
return Ok(n);
}
).

Ref: 5455377

Related: SveSop@7b69abf

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions