Как загрузить пиксельные данные нескольких изображений в одну текстуру в DX12 - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть несколько изображений в виде пиксельных массивов. Я хочу вставить их в одну большую текстуру, а затем визуализировать всю текстуру. Например, у меня есть данные об автомобильных пикселях и данные о реактивных пикселях. Я хочу скопировать пиксельные данные струи в верхней части большой текстуры и скопировать пиксельные данные автомобиля в нижней части большой текстуры. Моя идея заключается в создании большого буфера и копировании этих данных пикселей вручную. Вручную означает рассчитать смещение начального пикселя каждой строки и скопировать строки в al oop. Затем отправьте объединенные данные пикселей в графический процессор. Тем не менее, я думаю, что этот метод неэффективен, так как процессор делает l oop. Поэтому мне интересно, есть ли другой способ улучшить это. Например, любая функция D3D уже позволяет мне делать то же самое и эффективно. С другой стороны, какой самый формальный / правильный способ сделать такую ​​вещь?

1 Ответ

0 голосов
/ 28 февраля 2020

Как вы загружали свои данные текстуры до сих пор? Возможно UpdateSubresources из d3dx12.h. Вы пытались реализовать что-то похожее на эту функцию? Вы можете заглянуть в источник - он выполняет примерно следующее:

  1. Сопоставить промежуточный ресурс (созданный вами ресурс D3D12_HEAP_TYPE_UPLOAD),
  2. Последовательность memcpy() для копирования данных пикселей в Сопоставленный промежуточный ресурс
  3. Unmap
  4. Копирование графического процессора из промежуточного в конечный ресурс (созданный вами ресурс D3D12_HEAP_TYPE_DEFAULT).

Необходимо сделать нечто подобное и добавить необходимые вычисления смещения до шага 2, поэтому подизображения правильно размечены. Больше не существует «формального / правильного» способа сделать это, иногда вам приходится выполнять некоторую работу с процессором.

...