Поделиться через


Метод 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).

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

[in] pSrcData

Тип: const void*

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

SrcRowPitch

Тип: UINT

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

SrcDepthPitch

Тип: UINT

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

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

Тип: HRESULT

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

Замечания

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

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

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

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

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

Требования

Требование Ценность
целевая платформа Виндоус
заголовка d3d12.h
библиотеки D3d12.lib
DLL D3d12.dll

См. также

ID3D12Resource

субресурсов