Hello,
We are running into a problem when querying the gpu identifier description on NVidia laptops using Optimus (with DX9 and DX11). [Code pasted at the bottom] The reported string is always the Intel gpu.
Our graphics library is in a separate .dll - the GUI apps make no DirectX calls.
However, if we add a DirectX call in the main GUI app, the snippet below correctly reports the NVidia card.
Is this a known issue? Or is there another way we can query the DirectX gpu information from the dll (e.g. NVidia SDK)?
Thanks,
Boni
#include <stdio.h>
#include <d3d9.h>
#pragma comment (lib, "d3d9.lib")
int main()
{
IDirect3D9 *d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
if (!d3d9)
return 1;
FILE *fp = fopen("dx9-identify.log", "w");
if (!fp)
return 1;
UINT adapterCount = d3d9->GetAdapterCount();
printf("Adapter count: %d\n", adapterCount);
fprintf(fp, "Adapter count: %d\n", adapterCount);
D3DADAPTER_IDENTIFIER9 iden = {};
for (UINT i = 0; i < adapterCount; i++)
{
HRESULT hr = d3d9->GetAdapterIdentifier(i, 0, &iden);
if (SUCCEEDED(hr))
{
printf("Identifier desc: %s\n", iden.Description);
fprintf(fp, "Identifier desc: %s\n", iden.Description);
}
}
fclose(fp);
d3d9->Release();
return 0;
}