Метод ID3D12Resource::WriteToSubresource (d3d12.h)

Использует ЦП для копирования данных во вложенный ресурс, что позволяет ЦП изменять содержимое большинства текстур с неопределенными макетами.

Синтаксис

HRESULT WriteToSubresource(
                 UINT            DstSubresource,
  [in, optional] const D3D12_BOX *pDstBox,
  [in]           const void      *pSrcData,
                 UINT            SrcRowPitch,
                 UINT            SrcDepthPitch
);

Параметры

DstSubresource

Тип: UINT

Указывает индекс подресурса.

[in, optional] pDstBox

Тип: const D3D12_BOX*

Указатель на поле, определяющее часть целевого подресурса для копирования данных ресурса. При значении NULL данные записываются в целевой подресурс без смещения. Размеры источника должны соответствовать назначению (см . D3D12_BOX).

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

[in] pSrcData

Тип: const void*

Указатель на исходные данные в памяти.

SrcRowPitch

Тип: UINT

Расстояние от одной строки исходных данных до следующей строки.

SrcDepthPitch

Тип: UINT

Расстояние от одного среза глубины исходных данных до следующего.

Возвращаемое значение

Тип: HRESULT

Этот метод возвращает один из кодов возврата Direct3D 12.

Комментарии

Сначала необходимо сопоставить ресурс с помощью карты. Текстуры должны находиться в состоянии D3D12_RESOURCE_STATE_COMMON , чтобы доступ к ЦП через WriteToSubresource и ReadFromSubresource был законным; но буферы — нет.

Для повышения эффективности убедитесь, что границы и выравнивание экстентов в рамке должны быть ( 64 / [байт на пиксель] ) пикселей по горизонтали. Вертикальные границы и выравнивание должны составлять 2 строки, за исключением случаев, когда используются форматы 1 байта на пиксель, в этом случае рекомендуется использовать 4 строки. Отдельные срезы глубины для каждого вызова обрабатываются эффективно. Рекомендуется, но необязательно указывать указатели и шаги, которые выровнены по 128 байтам.

При записи на вложенные уровни MIP-карты рекомендуется использовать большую ширину и высоту, чем описано выше. Это связано с тем, что небольшие уровни MIP-карты могут фактически храниться в большом блоке памяти с непрозрачным объемом смещения, что может мешать выравниванию строк кэша.

WriteToSubresource и ReadFromSubresource обеспечивают оптимизацию почти нулевого копирования для адаптеров UMA, но могут непомерно ухудшить эффективность дискретных адаптеров или адаптеров NUMA, так как данные текстуры не могут находиться в локальной видеопамять. Типичные приложения должны придерживаться дискретных методов отправки, если они не распознают архитектуру адаптера UMA. Дополнительные сведения об отправке см. в разделе CopyTextureRegion, а дополнительные сведения о UMA см. в статье D3D12_FEATURE_DATA_ARCHITECTURE.

В системах UMA эту процедуру можно использовать, чтобы свести к минимуму затраты на копирование памяти с помощью оптимизации цикла, известной как циклическое заполнение. Разбивая отправку на блоки, которые удобно помещаются в кэш ЦП, эффективная пропускная способность между ЦП и памятью main более тесно достигает теоретических максимумов.

Требования

Требование Значение
Целевая платформа Windows
Header d3d12.h
Библиотека D3d12.lib
DLL D3d12.dll

См. также раздел

ID3D12Resource

Подресурсы