Краткий ответ: нет надежного способа получить эту информацию.
Длинный ответ:
Существует множество устаревших способов получения этой информации. Как открыть старый интерфейс DirectDraw и запросить доступную видеопамять. Однако это число может включать память AGP, объединенную память или может не включать ее. Или вы даже можете получить фиктивное значение, жестко запрограммированное в драйвере.
Я знаю, что вы уже знаете, что запрашивать этот номер - плохая идея, но позвольте мне еще раз обобщить его для других читателей:
Что вы хотите сделать с номером на первом месте? Как программист, вы очень ограниченно контролируете использование видеопамяти. Вы не выделяете и не управляете памятью каким-либо образом. Водитель делает это для вас. Информирование вашего кода о «фальшивой» доступной памяти приведет к серьезным проблемам.
Вы можете подумать, что можете использовать доступную память, чтобы решить, сколько текстур поместится в видеопамять, но это неверное предположение. Некоторые карты предъявляют очень странные требования к использованию памяти. Одна конкретная карта, о которой я знаю некоторые детали, имеет минимальный размер для любого mipmap 4 КБ.
Таким образом, если вы загрузите 8-битную текстуру 8x8 в память, вы можете ожидать, что она займет 85 байтов (8 * 8 + 4 + 4 + 2 + 2 + 1). После того, как драйвер выполнил задание на загрузку, его размер будет 12 КБ (4 * 4 КБ). Ваша оценка будет более чем в сто раз.
То же самое относится к буферам вершин и индексов, целям рендеринга, шейдерам и т. Д.
Вот почему эта информация больше не раскрывается приложениям. Это сделало много проблем в прошлом.