По какой-то причине мне приходится копировать текстуры в буфер, а затем снова загружать их в текстуру. Исходная текстура - это тот, что исходит от декодера, целевая текстура - та, которая будет отображаться. Самый простой способ сделать это (как я понимаю) это сделать следующее:Быстрый способ копирования и из Texture2D
- декодер текс (
ID3D11Texture2D
) - Использование температуры текстуры (
Usage = D3D11_USAGE_STAGING
) CopyResource
на временную текстуру- 'Карта'
memcpy
_s в буферUnmap
на другой стороне она идет обратный
- Используйте временную текстуру (
Usage = D3D11_USAGE_STAGING
) Map
memcpy_s
из буфераUnmap
CopyResource
чтобы рендерер текстуры
Работает отлично, однако у меня есть ощущение, что я не делаю это как можно эффективнее (в отличие от того, что я копирую данные взад и вперед) Должен ли я использовать промежуточную текстуру? Могу ли я настроить фильтры текстуры декодера/рендеринга (BindFlags?) Или перечисление D3D11_MAP карты, чтобы пропустить копирование в промежуточную текстуру?
EDIT001: Хорошо, здесь идет корпус с техническими деталями. Существует декодер, по сути, это декодер Intel Media SDK, который декодирует (каламбур) данные, предоставленные вне класса декодирования. Таким образом, он получает буфер, делает свою магию (асинхронно) и возвращает (с помощью SyncOperation, если я помню имя метода справа) поверхность, которая на самом деле находится под текстурой DX капота, управляемой распределителем Intel. Я получаю и копирую текстуру синхронно, но, я думаю, с небольшим усилием я могу сделать это асинхронно. Поверхность происходит из пула, поэтому работа с текстурой не останавливает декодер, чтобы продолжить работу. Скопированные данные хранятся в структуре, которая хранится в кольцевом буфере, откуда подается видеорезерент. Именно так, к моему пониманию (немного, я должен заметить), нет никакого вреда для параллелизма GPU.
Подождите, выполняете ли вы обработку процессора по текстуре? Если нет, вы можете просто «CopyResource» между двумя текстурами графического процессора, без необходимости временного размещения. – galop1n
nope, вся обработка, выполненная с использованием Intel Media SDK, декодирования и VPP, только окончательный результат копируется в средство визуализации (через циклический буфер). – kreuzerkrieg