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

类型:D3D12_HEAP_PROPERTIES*

指向提供资源堆属性的 D3D12_HEAP_PROPERTIES 结构的指针。

[in] HeapFlags

类型:D3D12_HEAP_FLAGS

堆选项,作为 D3D12_HEAP_FLAGS 枚举常量的按位 OR 组合。

[in] pDesc

类型:const D3D12_RESOURCE_DESC*

指向描述资源的 D3D12_RESOURCE_DESC 结构的指针。

[in] InitialResourceState

类型:D3D12_RESOURCE_STATES

资源的初始状态,作为 D3D12_RESOURCE_STATES 枚举常量的按位 OR 组合。

将资源与 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_TARGETD3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL 标志的纹理时,应选择最常调用清除操作的值。 可以使用其他值调用清除操作,但这些操作不会像值与传递到资源创建的值匹配时那样高效。

使用 D3D12_RESOURCE_DIMENSION_BUFFER时,必须将 pOptimizedClearValue 设置为 nullptr

[in] riidResource

类型:REFIID

对资源接口的全局唯一标识符(GUID)的引用,以 ppvResource返回。

虽然 riidResource 通常是 ID3D12ResourceGUID,但它可能是任何接口 GUID。 如果资源对象不支持此 GUID的接口,则创建失败并 E_NOINTERFACE

[out, optional] ppvResource

类型:void**

指向内存块的可选指针,该块接收指向所创建资源对象的请求接口指针。

ppvResource 可以 nullptr启用功能测试。 当 ppvResource 时,不会创建任何对象,并且当 pDesc 有效时,将返回 S_FALSE

返回值

类型: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 参考中的 示例代码。

要求

要求 价值
目标平台 窗户
标头 d3d12.h
D3D12.lib
DLL D3D12.dll

另请参阅

CreatePlacedResource

CreateReservedResource

D3D12_HEAP_FLAGS

ID3D12Device