Оценка производительности видеокарты для рендеринга холста в FireMonkey

Недавно моя команда начала замечать проблемы с нашим текущим проектом C ++ builder, который странным образом работает на разных компьютерах. Мы сузили это до того факта, что мы запускаем приложение с GlobalUseGPUCanvas установлен в true, Насколько я понимаю, это означает, что firemonkey будет использовать графический процессор для рендеринга холста. Мы заметили, что машины, имеющие проблемы, были с менее мощными встроенными видеокартами. Поэтому я хочу написать некоторую логику, которая позволит GlobalUseGPUCanvas У пользователя достаточно мощная видеокарта.

Чтобы начать это, я написал следующий код, который я основал на эта статья MSDN. Это позволяет мне просматривать все видеокарты на машине и видеть, сколько у них памяти.

    IDXGIFactory * pFactory = NULL;
CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory);

IDXGIAdapter * pAdapter;
DXGI_ADAPTER_DESC * adapterDesc;

for (UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i)
{
pAdapter->GetDesc(adapterDesc);

long vidMemory = adapterDesc->DedicatedVideoMemory;

long sMemory = adapterDesc->SharedSystemMemory;
}

if( pFactory )
{
pFactory->Release();
}

Это хорошее начало, потому что я могу проверить видеокарты компьютеров, чтобы увидеть, достаточно ли у них памяти для запуска программы на видеокарте. Однако я не уверен, как справиться со сценарием, когда на компьютере может быть действительно хорошая выделенная видеокарта, но вместо этого может быть включена внутренняя графика. Например, я мог видеть мощную выделенную карту и думать, что у них достаточно памяти, но если бы по какой-то причине у них не было более мощной интегрированной графики, я мог бы ошибаться.

Можно ли как-то определить, какая из перечисленных графических карт является активным графическим устройством?

0

Решение

Я протестировал вашу программу на машине с внутренней и выделенной видеокартой. EnumAdapters возвращает только активную видеокарту.

Если активен более одного адаптера, например, потому что это система с несколькими мониторами, EnumAdaptersможет вернуть больше результатов. Тогда вы должны решить, но MSDN есть подсказка для вас:

EnumAdapters сначала возвращает адаптер с выводом, на котором
основной рабочий стол отображается.

1

Другие решения


По вопросам рекламы [email protected]