Определить размер VRAM на окнах - PullRequest
0 голосов
/ 13 ноября 2009

Мне нужно примерно определить, сколько VRAM имеет системная видеокарта. Я знаю все причины, почему я не должен, но я знаю. Это не должно быть идеально (некоторые карты лгут и т. Д.), Но мне нужен приблизительный шаг. На Mac довольно просто с помощью основной графики и IOKit просто вежливо спросить, сколько VRAM подключено к дисплею, но я не имею понятия о Windows. Я подозреваю, что DirectX может сказать мне как-то, так как DxDiag имеет справедливое предположение ...

И снова, я знаю, что мне не нужно знать, но я знаю.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 13 ноября 2009

Краткий ответ: нет надежного способа получить эту информацию.

Длинный ответ:

Существует множество устаревших способов получения этой информации. Как открыть старый интерфейс DirectDraw и запросить доступную видеопамять. Однако это число может включать память AGP, объединенную память или может не включать ее. Или вы даже можете получить фиктивное значение, жестко запрограммированное в драйвере.

Я знаю, что вы уже знаете, что запрашивать этот номер - плохая идея, но позвольте мне еще раз обобщить его для других читателей:

Что вы хотите сделать с номером на первом месте? Как программист, вы очень ограниченно контролируете использование видеопамяти. Вы не выделяете и не управляете памятью каким-либо образом. Водитель делает это для вас. Информирование вашего кода о «фальшивой» доступной памяти приведет к серьезным проблемам.

Вы можете подумать, что можете использовать доступную память, чтобы решить, сколько текстур поместится в видеопамять, но это неверное предположение. Некоторые карты предъявляют очень странные требования к использованию памяти. Одна конкретная карта, о которой я знаю некоторые детали, имеет минимальный размер для любого mipmap 4 КБ.

Таким образом, если вы загрузите 8-битную текстуру 8x8 в память, вы можете ожидать, что она займет 85 байтов (8 * 8 + 4 + 4 + 2 + 2 + 1). После того, как драйвер выполнил задание на загрузку, его размер будет 12 КБ (4 * 4 КБ). Ваша оценка будет более чем в сто раз.

То же самое относится к буферам вершин и индексов, целям рендеринга, шейдерам и т. Д.

Вот почему эта информация больше не раскрывается приложениям. Это сделало много проблем в прошлом.

...