В Directx, если повторно использовать слот, gpu сохраняет предыдущий ресурс в своей памяти? Также можно безопасно изменить оригинальные ресурсы процессора? - PullRequest
2 голосов
/ 21 июня 2011

Я писал этот вопрос о directx и следующие вопросы были его частью, но я понял, что мне нужно их разделить.

Если что-то не находится в «слоте» (регистре) на графическом процессоре, придется ли его повторно передавать на графический процессор для повторного использования, т. Е. Если поместить текстуру A в регистр t0, то позже поместить текстуру B в регистр t0, текстура t0 больше не доступна на графическом процессоре? Или он все еще находится в памяти GPU, но мне нужно будет сделать вызов, чтобы загрузить его в регистр текстуры, чтобы получить к нему доступ? Или что-то еще целиком?

Аналогичным образом выполняйте вызовы PSSetShaders, или PSSetShaderResource, или IASetVertexBuffers и т. Д. .... блокируйте и копируйте данные в графический процессор перед возвратом, поэтому после вызова можно изменить или даже освободить ресурсы, на которых они основывались, потому что это сейчас резидент на ГПУ?

Полагаю, это больше, чем один вопрос, но я ожидаю, что у меня возникнут проблемы, если я попытаюсь задать слишком много вопросов по directx за один день (хотя я думаю, что это честно приличные вопросы, о которых документация по msdn остается довольно тихой, даже если это все вопросы новичка).

1 Ответ

2 голосов
/ 22 июня 2011

если поместить текстуру A в регистр t0, а затем поместить текстуру B в регистр t0, будет ли текстура t0 больше недоступна на графическом процессоре?

Он больше не привязан к регистру текстуры, поэтому не будет применяться к любым полигонам. Вам придется снова привязать его к регистру текстуры, чтобы использовать его.

Или он все еще находится в памяти графического процессора, но мне придется сделать вызов, чтобы загрузить его в регистр текстуры, чтобы получить его?

Как правило, они остаются в видеопамяти до тех пор, пока не будет загружено достаточно других ресурсов, необходимых для восстановления памяти. Это было более очевидно в DirectX 9, когда вам нужно было указать, в какой пул памяти помещать ресурс. Теперь все эффективно в том, что было в пуле памяти D3DPOOL_MANAGED в Direct3D 9. Когда вы установите регистр текстуры для использования текстуры, это будет быстро пока текстуры все еще находятся в видеопамяти.

В аналогичном ключе выполняйте вызовы PSSetShaders, или PSSetShaderResource, или IASetVertexBuffers и т. Д. .... блокируйте и копируйте данные в графический процессор перед возвратом, поэтому после вызова можно изменить или даже освободить ресурсы, которыми они были на основании того, что он сейчас находится на GPU?

DirectX управляет ресурсами для вас и пытается хранить их в видеопамяти как можно дольше.

...