Войти
ПрограммированиеПодсказкиГрафикаГрафика

Как определить тип установленой видеокарты с помощью D3D

Автор:

Иногда нужно знать какая видеокарта стоит на компьютере. С помощью этого кода, например, можно определить наличие некоторых видеокарт.

bool GeForce9500GT = false; // NVIDIA GeForce 9500 GT
bool RadeonHD4800Series = false; // ATI Radeon HD 4800 Series

const int VENDOR_NVIDIA = 0x10DE;
const int VENDOR_ATI = 0x1002;

const int DEV_G96 = 0x0643;
const int DEV_RV790 = 0x9462;

D3DADAPTER_IDENTIFIER8 id;
lpObj->GetAdapterIdentifier (D3DADAPTER_DEFAULT, D3DENUM_NO_WHQL_LEVEL, &id);
if (id.VendorId == VENDOR_NVIDIA)
{
  GeForce9500GT = (id.DeviceId == DEV_G96);
}
else if (id.VendorId == VENDOR_ATI)
{
  RadeonHD4800Series = (id.DeviceId == DEV_RV790);
}

Подставив нужные вам константы можно определить наличие той или иной видеокарты.
Константы можно найти здесь http://www.pcidatabase.com/vendors.php?sort=name

#Direct3D

16 октября 2009

Комментарии [10]

#1
15:25, 9 июля 2013

Идея конечно хорошая, но на 9 директе, я сделал проще...)))

D3DADAPTER_IDENTIFIER9 id;

m_pD3Device->GetAdapterIdentifier(D3DADAPTER_DEFAULT, D3DENUM_WHQL_LEVEL, &id);
pFontT->DrawText(NULL, id.Description, -1, NULL, DT_LEFT, 0xFE0000B4);

Ненадо сравнивать константы, а просто тупо вывести название модели на экран, через - "id.Description"...)))

ЗЫ.На 11 директе такое уже не проканает...)))

;););)

#2
18:02, 9 июля 2013

$!№9@r
В description может не быть конкретного названия GPU. Может быть написано аля "Radeon Series", "Intel HD Family" или что-нибудь подобное.

#3
19:07, 9 июля 2013

$!№9@r
> ЗЫ.На 11 директе такое уже не проканает...)))
В DX11:
1. Получаем IDXGIDevice
2. Получаем IDXGIAdapter через GetAdapter интерфейса  IDXGIDevice
3. Получаем DXGI_ADAPTER_DESC через GetDesc  интерфейса  IDXGIAdapter

Согласен, что лучше юзать Id.

#4
2:50, 10 июля 2013

Я не пробовал именно с видео, но в реестре должна быть информация.
Должно быть указано что является первичным видеоадаптером
Должна быть информация о том сколько видеоадаптеров
GUID для каждого
и по GUID смотреть как они называются ...

В теорию лезть лень ....

#5
8:36, 10 июля 2013

KKH
Та же беда, что и с description. Может не оказаться полного названия модели. Я пробовал разные варианта: WinAPI + Registry, DxDiag, OpenGL + GL_VENDOR. Ни один не дает 100% гарантии получения ПОЛНОГО названия видео карты. Единственный вариант - vendorID + deviceID, а потом смотреть в базе.

#6
12:14, 10 июля 2013

А как быть в случае когда имеется две видеокарты? Например на ноутбуке одна Intel а другая AMD?

#7
13:34, 10 июля 2013

Aneroun

см. GetAdapterIdentifier - первый параметр и есть номер видео в системе

правда бываюи и вертуальные адаптеры, см NVPerfHUD

#8
14:57, 10 июля 2013

TheGrayWolf
Если бы все было так просто. GetAdapterIdentifier для всех адаптеров возвращает description "Intel(R) HD Graphics Family", а установленного AMD Radeon HD 7670M для этой функции не существует.

#9
15:26, 10 июля 2013

ИМХО, в случае переключаемой графики надо работать через нативное АПИ, что бы активировать нужную. Правда хез как это сделать. Не пробовал еще. Где-то читал (кажется на сайте НВ), что надо через нативное АПИ добавить свое приложение в профили и видео карта сама переключится. Но как-то мне этот способ не очень нравится.

#10
20:15, 13 июля 2013

DeadMeat
Да активировать не обязательно. Желательно просто получить список для сбора статистики.

ПрограммированиеПодсказкиГрафикаГрафика

Тема в архиве.