перечисление D3D12_TEXTURE_LAYOUT (d3d12.h)
Задает параметры макета текстуры.
Синтаксис
typedef enum D3D12_TEXTURE_LAYOUT {
D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3
} ;
Константы
D3D12_TEXTURE_LAYOUT_UNKNOWN Значение: 0 Указывает, что макет неизвестен и, скорее всего, зависит от адаптера. Во время создания драйвер выбирает наиболее эффективный макет на основе других свойств ресурсов, особенно размера ресурса и флагов. Предпочитать этот вариант, если не требуется определенная функциональность от другого макета текстуры. Для архитектур UMA существуют оптимизации отправки текстур с нуля; см . id3D12Resource::WriteToSubresource. |
D3D12_TEXTURE_LAYOUT_ROW_MAJOR Значение: 1 Указывает, что данные текстуры хранятся в основном порядке строк (иногда называемый "линейным порядком шага"). Этот макет текстуры находит последовательные тексели строки в памяти перед текселями следующей строки. Аналогичным образом последовательные тексели определенной глубины или среза массива являются непрерывными в памяти перед текселями следующего среза глубины или массива. Между строками и между срезами глубины или массива может существовать заполнение для выравнивания коллекций данных. Шаг — это расстояние в памяти между строками, глубиной или срезами массива; и включает в себя любое заполнение. Этот макет текстуры позволяет совместно использовать данные текстуры между несколькими адаптерами, если другие макеты недоступны. Действуют многие ограничения, так как этот макет, как правило, не является эффективным для широкого использования:
Буферы создаются с помощью D3D12_TEXTURE_LAYOUT_ROW_MAJOR, так как в них можно разместить данные текстуры основных строк без создания объекта текстуры. Обычно это используется для отправки или чтения данных текстуры, особенно для дискретных адаптеров и адаптеров NUMA. Однако D3D12_TEXTURE_LAYOUT_ROW_MAJOR также можно использовать при маршале данных текстур между GPU или адаптерами. Примеры использования с ID3D12GraphicsCommandList::CopyTextureRegion см. в следующих разделах: |
D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE Значение: 2 Указывает, что макет в плитках размером 64 КБ и упаковке хвостового фрагмента MIP соответствует драйверу. Нет стандартного шаблона swizzle. Этот макет текстуры состоит из смежных областей размером 64 КБ, которые также называются плитками, содержащими почти равностороннее количество последовательных текселей по каждому измерению. Плитки расположены в порядке основных строк. Хотя между плитками нет заполнения, обычно в последней плитке в каждом измерении есть неиспользуемые тексели. Макет текселей в плитке не определен. Каждый подресурс сразу же следует за тем местом, где заканчивается предыдущий подресурс, а порядок подресурсов следует той же последовательности, что и порядковые номера подресурсов. Тем не менее, упаковка хвоста MIP зависит от адаптера. Дополнительные сведения см. в разделах Уровень ресурсов с плиткой и ID3D12Device::GetResourceTiling. Этот макет текстуры позволяет использовать частично резидентные или разреженные сценарии текстур при использовании вместе с функцией сопоставления страниц виртуальной памяти. Этот макет текстуры необходимо использовать вместе с ID3D12Device::CreateReservedResource , чтобы включить использование ID3D12CommandQueue::UpdateTileMappings. К текстурам с этим макетом применяются некоторые ограничения:
|
D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE Значение: 3 Указывает, что текстура по умолчанию использует стандартизированный шаблон swizzle. Этот макет текстуры устроен так же, как D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE, за исключением того, что определен макет текселей в плитке. Упаковка хвоста MIP зависит от адаптера. Этот макет текстуры обеспечивает оптимизацию при маршале данных между несколькими адаптерами или между ЦП и GPU. Объем копирования можно уменьшить, если несколько компонентов понимают макет памяти текстуры. Этот макет, как правило, более эффективен для широкого использования, чем макет с основными строками, из-за вращательно инвариантного расположения соседних текселей. Этот макет обычно можно использовать только с адаптерами, поддерживающими стандартный swizzle, но существуют исключения для общих куч между адаптерами. Ограничения для этого макета связаны с тем, что следующие компоненты не поддерживаются:
|
Комментарии
Это перечисление используется структурой D3D12_RESOURCE_DESC .
Это перечисление управляет шаблоном swizzle текстур по умолчанию и включает поддержку карт для текстур по умолчанию. Вызывающие абоненты должны запрашивать D3D12_FEATURE_DATA_D3D12_OPTIONS , чтобы убедиться, что каждый вариант поддерживается.
Стандартные форматы swizzle применяются к каждому блоку размера страницы, и страницы располагаются в линейном порядке по отношению друг к другу. 16-разрядный шаблон чередования определяет преобразование из предварительно свернутого внутристраничного расположения в расположение после поворота.
Для демонстрации рассмотрим формат 2D 32bpp swizzle выше. Это представлено следующими межликетными масками, где биты слева являются наиболее значительными:
UINT xBytesMask = 1010 1010 1000 1111
UINT yMask = 0101 0101 0111 0000
Для вычисления свернутого адреса можно использовать следующий код (где поддерживается _pdep_u32 встроенная инструкция):
UINT swizzledOffset = resourceBaseOffset +
_pdep_u32(xOffset, xBytesMask) +
_pdep_u32(yOffset, yBytesMask);
Требования
Требование | Значение |
---|---|
Заголовок | d3d12.h |
См. также раздел
Оптимизация UMA: текстуры, доступные для ЦП, и стандартный swizzle