Метод 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_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 |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по