No .NET 3.5 C#, existe uma maneira de detectar se o modo nvidia sli está ativo
Pergunta
Para as placas gráficas da NVIDIA, você pode ter dois funcionando como uma (SLI). Para um aplicativo .NET Desktop, preciso verificar se o SLI está ativado. Isso é possível?
Solução
Isso deve ser possível.
De acordo com os documentos da NVIDIA, você pode consultar isso via nvcpl.dll (gostei de documentação).
A chamada a ser usada é NvCplGetDataInt()
(página 67), com o argumento NVCPL_API_NUMBER_OF_SLI_GPUS
ou NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE
você deve obter as informações necessárias.
Em termos de acesso a essas informações, você precisará de P/Invoke. Se não for bom vincular estatisticamente NVCPL.DLL
Você só precisa criar a importação correta (método externo estático) e está bem. Caso contrário, você também pode escolher o LoadLibrary
e GetEntryPoint
maneira e usar o Marshal
classe para criar uma instância de um delegado (declarado com os argumentos corretos) que representa a função a ser chamada.
Editar:O snippet seguinte pode começar você (eu não tenho um cartão Nvidia, então isso é completamente não testado e por seu próprio risco;)):
public const int NVCPL_API_NUMBER_OF_GPUS =7; // Graphics card number of GPUs.
public const int NVCPL_API_NUMBER_OF_SLI_GPUS = 8; // Graphics card number of SLI GPU clusters available.
public const int NVCPL_API_SLI_MULTI_GPU_RENDERING_MODE = 9; // Get/Set SLI multi-GPU redering mode.
[DllImport("NVCPL.DLL", CallingConvention=CallingConvention.Cdecl)]
public static extern bool nvCplGetDataInt([In] int lFlag, [Out] out int plInfo);
public static void Main() {
int sliGpuCount;
if (nvCplGetDataInt(NVCPL_API_NUMBER_OF_SLI_GPUS, out sliGpuCount)) {
// we got the result
Console.WriteLine(string.Format("SLI GPU present: {0}", sliGpuCount));
} else {
// something did go wrong
Console.WriteLine("Failed to query NV data");
}
}