ID3D12Device1 接口是 DirectX 12 中的扩展接口,它扩展了 ID3D12Device 接口,提供了一些额外的功能和性能优化。以下是 ID3D12Device1 接口的简要定义:
DECLARE_INTERFACE_(ID3D12Device1, ID3D12Device)
{
    // 获取资源分配器(Resource Allocator)
    STDMETHOD(CreateCommittedResource1)(THIS_ const D3D12_HEAP_PROPERTIES *pHeapProperties,
                                        D3D12_HEAP_FLAGS HeapFlags,
                                        const D3D12_RESOURCE_DESC *pDesc,
                                        D3D12_RESOURCE_STATES InitialResourceState,
                                        const D3D12_CLEAR_VALUE *pOptimizedClearValue,
                                        ID3D12ProtectedResourceSession *pProtectedSession,
                                        REFIID riidResource,
                                        _COM_Outptr_opt_  void** ppvResource) PURE;

    // 创建命令队列
    STDMETHOD(CreateCommandQueue1)(THIS_ const D3D12_COMMAND_QUEUE_DESC *pDesc,
                                   REFIID riid,
                                   _COM_Outptr_opt_  void** ppCommandQueue) PURE;

    // 创建命令列表
    STDMETHOD(CreateCommandList1)(THIS_ UINT nodeMask,
                                   D3D12_COMMAND_LIST_TYPE type,
                                   ID3D12CommandAllocator *pCommandAllocator,
                                   ID3D12PipelineState *pInitialState,
                                   REFIID riid,
                                   _COM_Outptr_opt_  void** ppCommandList) PURE;

    // ...
};

这个接口继承自 ID3D12Device 接口,与之相比,新增了一些带有 "1" 后缀的方法,例如 CreateCommittedResource1、CreateCommandQueue1 和 CreateCommandList1。这些方法在功能上与原始的 CreateCommittedResource、CreateCommandQueue 和 CreateCommandList 方法类似,但提供了额外的参数,以支持更多的资源和功能。

例如,CreateCommittedResource1 方法允许创建受保护的资源,并接受 ID3D12ProtectedResourceSession 参数,以便与保护资源相关联。

这些扩展方法通常是为了支持新的硬件特性和增强功能。在使用时,你可以根据应用程序的需求选择使用适当的接口。

具体的使用和详细的接口说明可以在 DirectX 12 的官方文档中找到。


转载请注明出处:http://www.zyzy.cn/article/detail/26125/Win32 API/D3d12.h/ID3D12Device1