Метод ID3D12Device::GetResourceAllocationInfo(UINT,UINT,constD3D12_RESOURCE_DESC*) (d3d12.h)

Возвращает размер и выравнивание памяти, необходимой для коллекции ресурсов на этом адаптере.

Синтаксис

D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(
  [in] UINT                      visibleMask,
  [in] UINT                      numResourceDescs,
  [in] const D3D12_RESOURCE_DESC *pResourceDescs
);

Параметры

[in] visibleMask

Тип: UINT

Для операции с одним GPU задайте для этого значение нулю. Если есть несколько узлов GPU, установите биты для идентификации узлов (физические адаптеры устройства). Каждый бит маски соответствует одному узлу. См. также системы с несколькими адаптерами.

[in] numResourceDescs

Тип: UINT

Количество дескрипторов ресурсов в массиве pResourceDescs .

[in] pResourceDescs

Тип: const D3D12_RESOURCE_DESC*

Массив структур D3D12_RESOURCE_DESC , описывающих ресурсы для получения сведений.

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

Тип: D3D12_RESOURCE_ALLOCATION_INFO

Структура D3D12_RESOURCE_ALLOCATION_INFO , предоставляющая сведения о памяти видео, выделенной для указанного массива ресурсов.

Если возникает ошибка, D3D12_RESOURCE_ALLOCATION_INFO::SizeInBytes равен UINT64_MAX.

Замечания

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

Приложение не может использовать выходные данные GetResourceAllocationInfo для понимания упакованных свойств MIP текстур. Чтобы понять упакованные свойства текстур mip, приложение должно использовать GetResourceTiling.

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

Приложение может забыло использовать GetResourceAllocationInfo для буферных ресурсов (D3D12_RESOURCE_DIMENSION_BUFFER), если не используется жесткое выравнивание. Буферы, которые не тесно выровнены, имеют одинаковый размер для всех адаптеров, что является лишь наименьшим из 64 КБ, который больше или равен D3D12_RESOURCE_DESC::Width.

При передаче нескольких описаний ресурсов используется алгоритм C++ для вычисления размера структуры и выравнивания. Например, массив с тремя элементами с двумя крошечными 64 КБ-выровненными ресурсами и крошечным выровненным в 4 МБ ресурсом, сообщает о разных размерах в зависимости от порядка массива. Если выровненный ресурс размером 4 МБ находится в середине, результирующий размер составляет 12 МБ. В противном случае результирующий размер составляет 8 МБ. Возвращаемое выравнивание всегда будет равно 4 МБ, так как это супермножество всех выравниваний в массиве ресурсов.

Требования

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

См. также

ID3D12Device