Метод ID3D12Device::CreateCommittedResource (d3d12.h)

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

Синтаксис

HRESULT CreateCommittedResource(
  [in]            const D3D12_HEAP_PROPERTIES *pHeapProperties,
  [in]            D3D12_HEAP_FLAGS            HeapFlags,
  [in]            const D3D12_RESOURCE_DESC   *pDesc,
  [in]            D3D12_RESOURCE_STATES       InitialResourceState,
  [in, optional]  const D3D12_CLEAR_VALUE     *pOptimizedClearValue,
  [in]            REFIID                      riidResource,
  [out, optional] void                        **ppvResource
);

Параметры

[in] pHeapProperties

Тип: const D3D12_HEAP_PROPERTIES*

Указатель на структуру D3D12_HEAP_PROPERTIES, которая предоставляет свойства кучи ресурса.

[in] HeapFlags

Тип: D3D12_HEAP_FLAGS

Параметры кучи, как побитовое сочетание констант перечисления D3D12_HEAP_FLAGS.

[in] pDesc

Тип: const D3D12_RESOURCE_DESC*

Указатель на структуру D3D12_RESOURCE_DESC, описывающую ресурс.

[in] InitialResourceState

Тип: D3D12_RESOURCE_STATES

Начальное состояние ресурса в виде побитовой комбинации констант перечисления D3D12_RESOURCE_STATES.

При создании ресурса вместе с кучей D3D12_HEAP_TYPE_UPLOAD необходимо задать значение InitialResourceState для D3D12_RESOURCE_STATE_GENERIC_READ.

При создании ресурса вместе с кучей D3D12_HEAP_TYPE_READBACK необходимо задать для InitialResourceState значение D3D12_RESOURCE_STATE_COPY_DEST.

[in, optional] pOptimizedClearValue

Тип: константа D3D12_CLEAR_VALUE*

Указывает структуру D3D12_CLEAR_VALUE, описывающую значение по умолчанию для четкого цвета.

pOptimizedClearValue указывает значение, для которого наиболее оптимальные операции очистки. Когда созданный ресурс является текстурой с флагами D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET или D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL, следует выбрать значение, с помощью которого обычно вызывается операция очистки. Вы можете вызвать операцию очистки с другими значениями, но эти операции не будут столь эффективными, как при совпадении значения, переданного в создание ресурса.

При использовании D3D12_RESOURCE_DIMENSION_BUFFERнеобходимо задать для nullptrзначение pOptimizedClearValue.

[in] riidResource

Тип: REFIID

Ссылка на глобальный уникальный идентификатор (GUID) интерфейса ресурса, возвращаемого в ppvResource.

Хотя riidResource чаще всего является GUIDID3D12Resource, это может быть GUID любого интерфейса. Если объект ресурса не поддерживает интерфейс для этого GUID, создание завершается сбоем с E_NOINTERFACE.

[out, optional] ppvResource

Тип: void**

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

ppvResource можно nullptr, чтобы включить тестирование возможностей. Если ppvResource nullptr, объект не создается и S_FALSE возвращается, когда pDesc.

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

Тип: HRESULT

Если функция успешно выполнена, она возвращает S_OK. В противном случае возвращается кодошибки HRESULT.

Возвращаемое значение Описание
E_OUTOFMEMORY Для создания ресурса недостаточно памяти.

См. коды возврата Direct3D 12 для других возможных возвращаемых значений.

Замечания

Этот метод создает как ресурс, так и кучу, чтобы куча была достаточно большой, чтобы содержать весь ресурс, и ресурс сопоставляется с кучей. Созданная куча называется неявной кучей, так как объект кучи не может быть получен приложением. Перед выпуском окончательной ссылки на ресурс приложение должно убедиться, что GPU больше не будет читать и не записывать в этот ресурс.

Неявная куча создается для доступа к GPU перед возвратом метода в приложение. См. также резиденции.

Не удается изменить сопоставление виртуальных процессоров GPU ресурсов. См. раздел ID3D12CommandQueue::UpdateTileMappings и ресурсов с плитками томов.

Этот метод может вызываться несколькими потоками одновременно.

Примеры

В примере D3D12Bundles используется ID3D12Device::CreateCommittedResource следующим образом:

Создайте буфер вершин.

auto heapProperties = CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT);
auto resourceDesc = CD3DX12_RESOURCE_DESC::Buffer(SampleAssets::VertexDataSize);
ThrowIfFailed(m_device->CreateCommittedResource(
    &heapProperties,
    D3D12_HEAP_FLAG_NONE,
    &resourceDesc,
    D3D12_RESOURCE_STATE_COPY_DEST,
    nullptr,
    IID_PPV_ARGS(&m_vertexBuffer)));

См. пример кода всправочнике Direct3D 12.

Требования

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

См. также

CreatePlacedResource

CreateReservedResource

D3D12_HEAP_FLAGS

ID3D12Device