структура 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

Указывает глубину ресурса, если он трехмерный, или размер массива, если он является массивом 1D или 2D-ресурсов.

MipLevels

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

Format

Задает один член DXGI_FORMAT.

SampleDesc

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

Layout

Задает один элемент D3D12_TEXTURE_LAYOUT.

Flags

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

Комментарии

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

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

Буферов

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

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

Height, DepthOrArraySize и MipLevels должны иметь значение 1.

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

SampleDesc.Count должен иметь значение 1, а Quality — 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.

Ширина, Высота и ГлубинаOrArraySize должны быть в диапазоне от 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:
    • Ширина и высота и глубинаOrArraySize должны быть меньше или равны 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 КБ. Таким образом, mpped tex2d массив любого размера массива и любого количества уровней MIP может быть 4 КБ, если ширина и высота достаточно малы для конкретного формата и MSAA.

MipLevels

MipLevels может иметь значение 0 или 1 к максимальным уровням MIP, поддерживаемым измерениями Width, Height и 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