Когда безопасно освободить память, которую я передаю DirectX? - PullRequest
0 голосов
/ 02 февраля 2019

Многие функции в DirectX API принимают массивы в качестве указателя и длины (например, RSSetViewports).Я не вижу никакой документации о том, как долго должен выжить указатель - только до тех пор, пока функция не вернется или мне нужно когда-нибудь сохранить этот массив живым?

В более общем смысле, существует ли соглашение о жизни API DirectX,и это где-то задокументировано?

1 Ответ

0 голосов
/ 02 февраля 2019

В DirectX 11 указатели на структуры необходимы только в вызове.Данные ресурса копируются в COM-объекты DirectX, а счетчики ссылок управляют временем жизни объекта.Память выделяется драйвером или средой выполнения и представляет собой смесь видеопамяти GPU, памяти апертуры PCIe и системной памяти в зависимости от типа ресурса.Существует некоторая дополнительная сложность в том, как отображается память в пространстве вашей виртуальной памяти, но в целом вы не беспокоитесь об этом, кроме того, что поддерживаете COM-объекты живыми.

XAudio2 требует, чтобы вы поддерживали звуковые буферы до тех пор, пока они не исчезнут.используется дольше, когда более старый API DirectSound копировал аудиоданные, которые были менее эффективными для всей модели микширования на базе процессора, используемой XAudio2.

Для DirectX 12 это зависит от типа памяти, о которой вы говорите, поскольку большевремя жизни памяти управляется приложением в явном виде, и вам нужно самостоятельно управлять синхронизацией GPU / CPU.

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