Метод 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

Тип: const D3D12_CLEAR_VALUE*

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

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

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

[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 VA. См . раздел 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.

Требования

Требование Значение
Целевая платформа Windows
Header d3d12.h
Библиотека D3D12.lib
DLL D3D12.dll

См. также раздел

CreatePlacedResource

CreateReservedResource

D3D12_HEAP_FLAGS

ID3D12Device