Вы можете использовать старый интерфейс DirectDraw для запроса общей и доступной памяти.
Полученные таким образом числа ненадежны, хотя .
Свободная память может измениться в любой момент, и доступная память часто учитывает AGP-память (которая строго не является видеопамятью). Вы можете использовать числа, чтобы сделать правильное предположение о стандартном разрешении текстур и уровне детализации вашего приложения / игры, но это все.
Вы можете задаться вопросом, почему нет способа получить лучшие цифры, ведь отследить использование ресурсов сложно.
С точки зрения приложения это правильно. Вы можете подумать, что видеопамять просто содержит поверхности, текстуры, индексные и вершинные буферы и некоторые шейдерные программы, но это не так на стороне низкого уровня.
Есть также много других ресурсов. Все они создаются и управляются драйвером Direct3D, чтобы сделать рендеринг максимально быстрым. Среди прочих есть иерархические структуры ускорения z-буфера, предварительно скомпилированные списки команд (например, данные, необходимые для визуализации чего-либо в формате, понятном для GPU). Драйвер также может заранее ставить в очередь команды рендеринга для нескольких кадров, чтобы выровнять частоту кадров и увеличить параллельность между графическим процессором и процессором.
Водитель также много работает для вас. Эвристика используется для обнаружения вызовов отрисовки со статической геометрией и постоянными настройками рендеринга. Драйвер может решить оптимизировать геометрию в этих случаях для лучшего использования кэша. Все это происходит параллельно и под контролем водителя. Все это требует места, поэтому свободная память может измениться в любое время.
Однако драйвер также выполняет кеширование ваших ресурсов, так что вам не нужно знать об использовании ресурсов с самого начала.
Если вам нужно больше места, чем доступно, это не проблема. Драйвер переместит данные между системной памятью, AGP-памятью и видео-памятью. На практике вам никогда не придется беспокоиться о том, что вам не хватает видеопамяти. Конечно, когда вам понадобится больше видеопамяти, чем доступно, производительность пострадает, но это жизнь: -)