D3D11On12CreateDevice 是一个用于创建基于 Direct3D 11 的设备的函数,该设备可以在 Direct3D 12 设备上运行。这个函数的定义在 D3d11on12.h 头文件中。

以下是关于 D3D11On12CreateDevice 函数的一些基本信息:

1. 函数定义
   HRESULT D3D11On12CreateDevice(
      _In_ IUnknown *pDevice,
      UINT Flags,
      _In_reads_(NumQueues) D3D12_COMMAND_QUEUE_DESC *pQueueDescList,
      UINT NumQueues,
      _In_reads_(NumNodeMasks) const UINT *pNodeMask,
      UINT NumNodeMasks,
      _Outptr_ ID3D11Device **ppD3D11Device,
      _Outptr_ ID3D11DeviceContext **ppD3D11DeviceContext,
      _Outptr_ D3D11On12DDI_DEVICE_FUNCS *pDeviceFuncs,
      _Outptr_ ID3D12CommandQueue **ppCommandQueue
   );
   
2. 参数说明
   - pDevice: 用于共享的 Direct3D 12 设备 (ID3D12Device)。
   - Flags: 标志,控制创建过程的行为。
   - pQueueDescList: 一个数组,包含用于创建 Direct3D 11 设备上下文的命令队列描述符列表。
   - NumQueues: 命令队列描述符列表的元素数。
   - pNodeMask: 一个数组,用于指定每个队列的节点掩码。
   - NumNodeMasks: 节点掩码数组的元素数。
   - ppD3D11Device: 输出参数,用于接收创建的 Direct3D 11 设备的指针。
   - ppD3D11DeviceContext: 输出参数,用于接收创建的 Direct3D 11 设备上下文的指针。
   - pDeviceFuncs: 输出参数,用于接收设备函数的指针。
   - ppCommandQueue: 输出参数,用于接收创建的 Direct3D 12 命令队列的指针。

3. 返回值
   - 如果函数成功,返回 S_OK。
   - 如果函数失败,返回相应的错误代码,例如 E_OUTOFMEMORY、E_INVALIDARG 等。

4. 使用示例
   // 假设已经创建了一个 Direct3D 12 设备 pD3D12Device

   ID3D11Device* pD3D11Device = nullptr;
   ID3D11DeviceContext* pD3D11DeviceContext = nullptr;
   D3D11On12DDI_DEVICE_FUNCS deviceFuncs;
   ID3D12CommandQueue* pD3D12CommandQueue = nullptr;

   HRESULT hr = D3D11On12CreateDevice(
       pD3D12Device,
       D3D11_CREATE_DEVICE_BGRA_SUPPORT, // 可根据需要设置其他标志
       queueDescList,                    // 命令队列描述符列表
       numQueues,                        // 命令队列数量
       nodeMaskArray,                    // 节点掩码数组
       numNodeMasks,                     // 节点掩码数量
       &pD3D11Device,
       &pD3D11DeviceContext,
       &deviceFuncs,
       &pD3D12CommandQueue
   );

   if (SUCCEEDED(hr))
   {
       // 使用创建的 Direct3D 11 设备和相关资源
   }

这个函数允许在使用 Direct3D 12 的应用程序中创建并使用 Direct3D 11 设备和上下文。请注意,在使用之前,确保已经创建了有效的 Direct3D 12 设备。


转载请注明出处:http://www.pingtaimeng.com/article/detail/25865/Win32 API/D3d11on12.h/D3D11On12CreateDevice