В настоящее время я пишу свой собственный графический фреймворк для DirectX12 (я уже написал несколько фреймворков DirectX 11 для персональных игровых движков), и я в настоящее время trying to copy the methods used in the recent Hitman game для привязки ресурсов.DirectX 12 Обновление кучи дескриптора
Я смущен о наилучшем способе обработки привязки ресурса каждого объекта для кучи SRV/CBV/UAV. Я смотрел несколько презентаций GDC, и все они, похоже, замалчивают это.
Только 1 куча SRV/CBV/UAV может быть привязана за один раз, а переключение в настоящее время кучи в середине списка команд может быть плохой для производительности на некоторых аппаратных средствах, заставляя флеш. Из-за этого, каков наилучший способ обработать обновление кучи новыми дескрипторами? Мне кажется, что каждый командный список:
- Обхватите кучу SRV/CBV/UAV для себя.
- Для каждого объекта в подмножестве объектов создайте дескрипторы в куче, указывающие на данные каждого объекта, которые были помещены в отдельную кучу загрузки.
- Впоследствии другой список команд принимает эту заполненную дескрипторную кучу и связывает ее, затем выдает вызовы draw, смешанные с
SetGraphicsRootDescriptorTable
, чтобы переместиться через текущую кучу дескриптора.
Это, как говорится, несколько источников в Интернете (including another SO post) предлагают использовать один большой SRV/CBV/Л кучу и копирование в нее с помощью CPU-видимой кучи. Я предполагаю, что они не пытаются использовать асинхронный CopyDescriptors
, а скорее CopyBufferRegion
. Я попытался использовать CopyBufferRegion
для обновления данных для каждого объекта, но для меня это кажется недостаточно-эффективным с таким количеством переходов между D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER
и D3D12_RESOURCE_STATE_COPY_DEST
. Я что-то не понимаю? Любая ясность будет оценена по достоинству.
Не забудьте взглянуть на [MiniEngine] (https://github.com/Microsoft/DirectX-Graphics-Samples/tree/master/MiniEngine) и [DirectX Tool Kit для DirectX 12] (https://github.com/Microsoft/DirectXTK12) для примера кода для подходов к решению этой проблемы. –