如何:创建 WARP 设备

本主题演示如何创建实现高速软件光栅器的 WARP 设备。 若要创建 WARP 设备,只需指定要创建的设备将使用 WARP 驱动程序。 此示例同时创建设备和交换链。

创建 WARP 设备

  1. 定义交换链的初始参数。

        DXGI_SWAP_CHAIN_DESC sd;
        ZeroMemory( &sd, sizeof( sd ) );
        sd.BufferCount = 1;
        sd.BufferDesc.Width = 640;
        sd.BufferDesc.Height = 480;
        sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
        sd.BufferDesc.RefreshRate.Numerator = 60;
        sd.BufferDesc.RefreshRate.Denominator = 1;
        sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
        sd.OutputWindow = g_hWnd;
        sd.SampleDesc.Count = 1;
        sd.SampleDesc.Quality = 0;
        sd.Windowed = TRUE;
    
  2. 请求实现应用程序所需的功能的功能级别。 可以针对功能级别成功创建 WARP 设备,D3D_FEATURE_LEVEL_9_1通过D3D_FEATURE_LEVEL_10_1并从所有功能级别的Windows 8开始。

        D3D_FEATURE_LEVEL FeatureLevels = D3D_FEATURE_LEVEL_10_1;
    

    D3D_FEATURE_LEVEL 枚举中查看有关功能级别的详细信息。

  3. 通过调用 D3D11CreateDeviceAndSwapChain 创建设备。

    HRESULT hr = S_OK;
    if( FAILED (hr = D3D11CreateDeviceAndSwapChain( NULL, 
                    D3D_DRIVER_TYPE_WARP,
                    NULL, 
                    0,
                    &FeatureLevels, 
                    1, 
                    D3D11_SDK_VERSION, 
                    &sd, 
                    &g_pSwapChain, 
                    &g_pd3dDevice, 
                    &FeatureLevel,
                    &g_pImmediateContext )))
    {
        return hr;
    }

需要通过 D3D_DRIVER_TYPE 枚举中的 WARP 驱动程序类型提供 API 调用。 方法成功后,它将返回一个交换链接口、一个设备接口、一个指向驱动程序授予的功能级别的指针,以及一个即时上下文接口。

有关在某些功能级别上创建 WARP 设备的限制的信息,请参阅 创建 WARP 和参考设备的限制

Windows 8 的新增功能

当计算机的主显示适配器是“Microsoft 基本显示适配器” (WARP 适配器) 时,该计算机还有第二个适配器。 第二个适配器是没有显示输出的仅限呈现的设备。 有关仅呈现设备的详细信息,请参阅Windows 8中有关枚举适配器的新信息

设备

如何使用 Direct3D 11