D3D11_USAGE_STAGING, какой тип памяти GPU / CPU используется? - PullRequest
0 голосов
/ 17 мая 2018

Я прочитал страницу D3D11 Usage и пришел из фона CUDA. Мне интересно, в какой памяти будет храниться текстура, помеченная как D3D11_USAGE_STAGING.

Полагаю, в CUDA это будет закреплено запертой страницей в памяти нулевой копии. Я измерил время передачи от ID3D11Texture2D с D3D11_USAGE_STAGING до хост-буфера, выделенного с malloc, и это заняло почти 7 миллисекунд (довольно много для потоковой передачи / игр), и я подумал, что это будет время, требуемое для глобального GPU память в этой области памяти.

Верны ли мои предположения? Что D3D11_USAGE_STAGING использует в качестве памяти графического процессора?

1 Ответ

0 голосов
/ 17 мая 2018

Основное использование D3D11_USAGE_STAGING - это способ загрузки данных в другие ресурсы пула D3D11_USAGE_DEFAULT. Другое распространенное использование - для «чтения» цели рендеринга в доступную для CPU память. Вы можете использовать CopySubResourceRegion для перемещения данных между ресурсами DEFAULT и STAGING (дискретное оборудование часто использует Прямой доступ к памяти для управления перемещением данных между системной памятью и VRAM).

Это обобщение, поскольку оно зависит от архитектуры и выбора драйверов, но вкратце: *

  • D3D11_USAGE_STAGING означает поместить его в системную память, а графический процессор не может получить к нему доступ.

  • D3D11_USAGE_DEFAULT положить его в VRAM, процессор не может получить к нему доступ. Чтобы поместить в него данные, необходимо скопировать данные из ресурса STAGING. Вы можете думать о UpdateSubresource как об удобной функции, которая создает ресурс STAGING, копирует в него данные, копирует из STAGING в DEFAULT, а затем выпускает копию STAGING.

    • В DirectX 11.2 или более поздней версии имеется дополнительная функция, которая может быть реализована драйвером, если он решит разрешить доступ к ЦП даже для D3D11_USAGE_DEFAULT содержимого пула. Это зависит от того, как у них настроена система памяти (т. Е. В Unified Memory Architecture , ОЗУ системы и VRAM - это одно и то же).
  • D3D11_USAGE_IMMUTABLE в основном совпадает с D3D11_USAGE_DEFAULT, но вы говорите, что собираетесь его инициализировать только один раз при вызове создания.

  • D3D11_USAGE_DYNAMIC означает, что он помещается в общую системную память, и CPU, и GPU оба должны иметь к нему доступ. Обычно это означает, что GPU снижает производительность по сравнению с DEFAULT, поэтому вы хотите использовать его экономно. Это действительно для вещей, которые вы генерируете каждый кадр на CPU и затем должны рендерить (например, системы рельефа или процедурная геометрия).

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

См. Несколько устаревшую статью MSDN: Рекомендации по управлению ресурсами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...