Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Описывает, как ресурс делится на подресурсы и как ссылаться на один, несколько или срез подресурсов.
Примеры подресурсов
Если ресурс содержит буфер, он просто содержит один подресурс с индексом 0. Если ресурс содержит текстуру (или массив текстур), то ссылка на подресурс является более сложной.
Некоторые API обращаются ко всему ресурсу (например, методу ID3D12GraphicsCommandList::CopyResource ), другим пользователям предоставляется доступ к части ресурса (например, метод ID3D12Resource::ReadFromSubresource ). Методы, обращаюющиеся к части ресурса, обычно используют описание представления (например, структуру D3D12_TEX2D_ARRAY_SRV ) для указания подресурсов для доступа. Полный список см. в разделе API subresource .
Индексирование подресурсов
Чтобы индексировать определенный подресурс, уровни MIP индексируются сначала по мере индексации каждой записи массива.
Срез MIP
Срез mip включает один уровень MIP-карты для каждой текстуры в массиве, как показано на следующем рисунке.
Срез массива
Учитывая массив текстур, каждая текстура с mIP-картами, срез массива включает одну текстуру и все его уровни MIP, как показано на следующем рисунке.
Срез плоскости
Как правило, планарные форматы не используются для хранения данных RGBA, но в тех случаях, когда это (возможно, 24bpp RGB-данные), одна плоскость может представлять красное изображение, один зеленый и один синий образ. Хотя один плоскость не обязательно один цвет, два или более цветов могут быть объединены в одну плоскость. Более обычно планарные данные используются для вложенных примеров YCbCr и Depth-Stencil данных. Depth-Stencil — единственный формат, который полностью поддерживает MIP-карты, массивы и несколько плоскостей (часто плоскость 0 для глубины и плоскости 1 для набора элементов).
Индексирование подресурсов для массива двух Depth-Stencil изображений, каждый из которых имеет три уровня MIP, показан ниже.
Вложенный пример YCbCr поддерживает массивы и имеет плоскости, но не поддерживает MIP-карты. Изображения YCbCr имеют два плоскости, один для света (Y), что человеческий глаз наиболее чувствительный к, и один для хрома (как Cb, так и Cr, чередуется), к которому человеческий глаз менее чувствительны к. Этот формат позволяет сжимать значения хрома, чтобы сжать изображение, не влияя на свет, и является общим форматом сжатия видео по этой причине, хотя он используется для сжатия по-прежнему изображений. На рисунке ниже показан формат NV12, отметив, что хроминация сжимается до одной четверти разрешения светимости, что означает, что ширина каждого плоскости идентична, а плоскость хрома — половина высоты плоскости света. Плоскости будут индексированы в виде подресурсов точно так же, как и в приведенном выше примере Depth-Stencil.
Форматы planar существуют в Direct3D 11, но отдельные плоскости не могут быть рассмотрены отдельно, например для операций копирования или сопоставления. Это было изменено в Direct3D 12, чтобы каждый самолет получил свой собственный идентификатор подресурса. Сравните следующие два метода для вычисления идентификатора подресурса.
Direct3D 11
inline UINT D3D11CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels )
{
return MipSlice + (ArraySlice * MipLevels);
}
Direct3D 12
inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize )
{
return MipSlice + (ArraySlice * MipLevels) + (PlaneSlice * MipLevels * ArraySize);
}
Большинство оборудования предполагает, что память для плоскости N всегда выделяется сразу после плоскости N-1.
Альтернативой использованию подресурсов является то, что приложение может выделить полностью отдельный ресурс на плоскость. В этом случае приложение понимает, что данные планарны и используют несколько ресурсов для представления.
Несколько подресурсов
Представление ресурсов шейдера может выбрать любой прямоугольный регион подресурсов, используя один из описанных выше срезов и разумное использование полей в структурах представления (например, D3D12_TEX2D_ARRAY_SRV), как показано на изображении.
Представление целевого объекта отрисовки может использовать только один подресурс или срез mip и не может включать подресурсы из нескольких срезов MIP. То есть каждая текстура в представлении целевого объекта отрисовки должна иметь одинаковый размер. Представление шейдер-ресурсов может выбрать любую прямоугольную область подресурсов, как показано на изображении.
API-интерфейсы subresource
Ссылки на следующие API и работа с подресурсами:
Перечисления:
Следующие структуры содержат индексы PlaneSlice , большинство из них содержат индексы MipSlice .
- D3D12_TEX2D_RTV
- D3D12_TEX2D_ARRAY_RTV
- D3D12_TEX2D_SRV
- D3D12_TEX2D_ARRAY_SRV
- D3D12_TEX2D_UAV
- D3D12_TEX2D_ARRAY_UAV
Следующие структуры содержат индексы ArraySlice , большинство из них содержат индексы MipSlice .
- D3D12_TEX1D_ARRAY_DSV
- D3D12_TEX2D_ARRAY_DSV
- D3D12_TEX2DMS_ARRAY_DSV
- D3D12_TEX1D_ARRAY_RTV
- D3D12_TEX2D_ARRAY_RTV
- D3D12_TEX2DMS_ARRAY_RTV
- D3D12_TEX1D_ARRAY_SRV
- D3D12_TEX2D_ARRAY_SRV
- D3D12_TEX2DMS_ARRAY_SRV
- D3D12_TEX1D_ARRAY_UAV
- D3D12_TEX2D_ARRAY_UAV
Следующие структуры содержат индексы MipSlice , но не индексы ArraySlice или PlaneSlice .
Следующие структуры также ссылались на подресурсы:
- D3D12_DISCARD_REGION : структура, используемая при подготовке к отмене ресурса.
- D3D12_PLACED_SUBRESOURCE_FOOTPRINT : добавляет смещение в ресурс к базовому объему.
- D3D12_RESOURCE_TRANSITION_BARRIER : описывает переход подресурсов между различными значениями использования (ресурс шейдера, целевой объект отрисовки и т. д.).
- D3D12_SUBRESOURCE_DATA : данные подресурса включают сами данные, а также шаг строки и среза.
- D3D12_SUBRESOURCE_FOOTPRINT : след включает формат, ширину, высоту, глубину и шаг строки подресурса.
- D3D12_SUBRESOURCE_INFO : содержит смещение, шаг строки и глубину подресурса.
- D3D12_SUBRESOURCE_TILING : описывает фрагментированный том подресурс (см. разделим ресурсы с плитками тома).
- D3D12_TEXTURE_COPY_LOCATION : описывает часть текстуры для копирования.
- D3D12_TILED_RESOURCE_COORDINATE : описывает координаты плитки ресурса.
Методы:
- ID3D12Device::GetCopyableFootprints : получает сведения о ресурсе, чтобы включить копирование.
- ID3D12Device::GetResourceTiling : получает сведения о том, как плитки разбиваются на плитки.
- ID3D12GraphicsCommandList::ResolveSubresource : копирует подресурс с несколькими примерами в подресурс, отличный от нескольких примеров.
- ID3D12Resource::Map : возвращает указатель на указанные данные в ресурсе и запрещает доступ GPU к подресурсе.
- ID3D12Resource::ReadFromSubresource : копирует данные из подресурса или прямоугольную область подресурса.
- ID3D12Resource::Unmap: распакует указанный диапазон памяти и отменяет указатель на ресурс. Восстанавливает доступ GPU к подресурсу.
- ID3D12Resource::WriteToSubresource : копирует данные в подресурс или прямоугольную область подресурса.
Текстуры должны находиться в состоянии D3D12_RESOURCE_STATE_COMMON для доступа к ЦП через WriteToSubresource и ReadFromSubresource , чтобы быть законным; но буферы не делают. Доступ к ресурсу ЦП обычно выполняется с помощью карты/Unmap.
Связанные темы