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


структура D3D12_RESOURCE_DESC (d3d12.h)

Описывает ресурс, например текстуру. Эта структура широко используется.

Синтаксис

typedef struct D3D12_RESOURCE_DESC {
  D3D12_RESOURCE_DIMENSION Dimension;
  UINT64                   Alignment;
  UINT64                   Width;
  UINT                     Height;
  UINT16                   DepthOrArraySize;
  UINT16                   MipLevels;
  DXGI_FORMAT              Format;
  DXGI_SAMPLE_DESC         SampleDesc;
  D3D12_TEXTURE_LAYOUT     Layout;
  D3D12_RESOURCE_FLAGS     Flags;
} D3D12_RESOURCE_DESC;

Члены

Dimension

Один элемент D3D12_RESOURCE_DIMENSION, указывающий размеры ресурса (например, D3D12_RESOURCE_DIMENSION_TEXTURE1D), или буфер (D3D12_RESOURCE_DIMENSION_BUFFER).

Alignment

Указывает выравнивание.

Width

Указывает ширину ресурса.

Height

Указывает высоту ресурса.

DepthOrArraySize

Задает глубину ресурса, если он равен 3D, или размер массива, если он является массивом 1D или 2D-ресурсов.

MipLevels

Указывает количество уровней MIP.

Format

Указывает один элемент DXGI_FORMAT.

SampleDesc

Задает структуру DXGI_SAMPLE_DESC.

Layout

Указывает один элемент D3D12_TEXTURE_LAYOUT.

Flags

Побитовые флаги or'd, как D3D12_RESOURCE_FLAGS константы перечисления.

Замечания

Используйте эту структуру с:

Двумя общими ресурсами являются буферы и текстуры, которые используют эту структуру, но с совершенно разными использованием полей.

буферы

Буферы — это смежный регион памяти. ширина может находиться в диапазоне от 1 до поля MaxGPUVirtualAddressBitsPerResourceD3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT для зарезервированных ресурсов или поля MaxGPUVirtualAddressBitsPerProcess для выделенных ресурсов. Однако исчерпание виртуального адресного пространства GPU, бюджет расположения памяти (см. IDXGIAdapter3::QueryVideoMemoryInfo), а также системная память может возникнуть сначала.

выравнивание должно составлять 64 КБ (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) или 0, что фактически составляет 64 КБ.

Высота, DepthOrArraySize, а MipLevels должны быть 1.

Формат должен быть DXGI_FORMAT_UNKNOWN.

SampleDesc.Count должно быть 1, а качества должно быть 0.

макет должен быть D3D12_TEXTURE_LAYOUT_ROW_MAJOR, так как макеты буферной памяти понимаются приложениями и данными текстуры с основными строками обычно маршалируются через буферы.

Флаги по-прежнему должны быть точно заполнены приложениями для буферов с незначительными исключениями. Однако приложения могут использовать большую часть поддержки возможностей, не беспокоясь о влиянии эффективности на буферы. Поле флагов предназначено для управления свойствами, связанными с текстурами.

текстуры

Текстуры — это многомерное расположение текселей в непрерывной области памяти, оптимизированной для максимальной пропускной способности для отрисовки и выборки. Размеры текстур трудно прогнозировать и различаться от адаптера к адаптеру. Приложения должны использовать ID3D12Device::GetResourceAllocationInfo для точного понимания их размера.

TEXTURE1D, TEXTURE2D и TEXTURE3D не поддерживаются в каждом формате. Сведения об использовании D3D12_FORMAT_SUPPORT1_TEXTURE1D, D3D12_FORMAT_SUPPORT1_TEXTURE2D и D3D12_FORMAT_SUPPORT1_TEXTURE3D см. в D3D12_FORMAT_SUPPORT1.

ширины, высотыи depthOrArraySize должно быть от 1 до максимального измерения, поддерживаемого для определенного уровня признаков и измерения текстуры. Однако исчерпание виртуального адресного пространства GPU, бюджет расположения памяти (см. IDXGIAdapter3::QueryVideoMemoryInfo), а также системная память может возникнуть сначала. Для сжатых форматов эти измерения являются логическими. Например:

  • Для TEXTURE1D:
    • ширина должна быть меньше или равна D3D10_REQ_TEXTURE1D_U_DIMENSION на уровнях компонентов менее 11_0 и D3D11_REQ_TEXTURE1D_U_DIMENSION на уровне компонентов 11_0 или больше.
    • высота должна быть 1.
    • DepthOrArraySize интерпретируется как размер массива и должен быть меньше или равен D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION на уровнях компонентов меньше 11_0 и D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION на уровнях компонентов 11_0 или выше.
  • Для TEXTURE2D:
    • ширины и высоты должны быть меньше или равно D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION на уровнях компонентов менее 11_0 и D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION или уровня компонентов 11_0 или больше.
    • DepthOrArraySize интерпретируется как размер массива и должен быть меньше или равен D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION на уровнях компонентов меньше 11_0 и D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION на уровнях компонентов 11_0 или больше.
  • Для TEXTURE3D:
    • ширины и высоты и DepthOrArraySize должно быть меньше или равно D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION на уровнях компонентов менее 11_0 и D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION на уровне компонентов 11_0 или больше.
    • DepthOrArraySize интерпретируется как глубина.
Следующие заметки предназначены для всех размеров текстур.

выравнивание

выравнивание может быть одним из 0, 4 КБ, 64 КБ или 4 МБ.

Если для выравнивания задано значение 0, среда выполнения будет использовать 4 МБ для текстур MSAA и 64 КБ для всего остального. Приложение может выбрать меньшие выравнивания, чем эти значения по умолчанию для нескольких типов текстур, когда текстура небольшая. Текстуры с макетом UNKNOWN и MSAA могут создаваться с выравниванием 64 КБ (если они передают ограничение небольшого размера, подробно описанного ниже).

Текстуры с макетом UNKNOWN без MSAA и без флагов элементов глубины и элементов глубины могут создаваться с выравниванием 4 КБ (опять же, передавая небольшое ограничение размера).

Приложения могут создавать небольшие выровненные ресурсы, если предполагаемый размер наиболее подробного уровня MIP составляет общее ограничение выравнивания большего размера или меньше. Среда выполнения будет использовать независимый от архитектуры механизм оценки размера, который имитирует размер стандартных ресурсов swizzle и D3D12. Однако размеры плиток будут иметь меньшее ограничение выравнивания для таких вычислений. Использование текстуры элементов, не предназначенных для отрисовки и не глубины, в качестве примера среда выполнения будет предполагать почти эквивалентные фигуры плиток 4 КБ и вычислить количество плиток, необходимых для наиболее подробного уровня MIP. Если число плиток равно или меньше 16, приложение может создать выровненный ресурс размером 4 КБ. Таким образом, массив tex2d любого размера массива и любое количество уровней MIP может быть 4 КБ, если ширина и высота достаточно малы для определенного формата и MSAA.

MipLevels

MipLevels может иметь значение 0 или 1 до максимального уровня MIP, поддерживаемыхширины , высоты высоты и измерениях depthOrArraySize. Если используется значение 0, API автоматически вычисляет максимальные уровни MIP, поддерживаемые и используйте это. Но некоторые свойства ресурсов и кучи исключают уровни MIP, поэтому приложение должно указать значение как 1.

См. поле D3D12_FORMAT_SUPPORT1_MIP D3D12_FORMAT_SUPPORT1 для ограничений на формат. Ресурсы MSAA, текстуры с D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER и кучами с D3D12_HEAP_FLAG_ALLOW_DISPLAY все исключают уровни MIP.

формат

формат должен быть допустимым форматом, поддерживаемым на уровне компонентов устройства.

SampleDesc

SampleDesc.Count больше 1 и (или) ненулевых качества поддерживаются только для TEXTURE2D и если заданы D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET или D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL.

Ниже приведены неподдерживаемые функции.

  • D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
  • D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
  • D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
  • D3D12_HEAP_FLAG_ALLOW_DISPLAY
Сведения о определении допустимых значений Count и Quality см. в D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS.

Требования

Требование Ценность
заголовка d3d12.h

См. также

CD3DX12_RESOURCE_DESC

основных структур

D3D12_HEAP_FLAGS