Direct3D 11.2 功能

Direct3D 11.2 中添加了以下功能,Windows 8.1、Windows RT 8.1 和 Windows Server 2012 R2 附带。

平铺资源

Direct3D 11.2 允许创建可视为使用少量物理内存的大型逻辑资源的平铺资源。 平铺资源 (非常有用,例如,在游戏中使用地形) 和应用 UI。

平铺资源是通过指定 D3D11_RESOURCE_MISC_TILED 标志创建的。 若要使用平铺资源,请使用以下 API:

有关平铺资源的详细信息,请参阅 平铺资源

检查平铺资源支持

在使用平铺资源之前,需要了解设备是否支持平铺资源。 下面介绍了如何检查对平铺资源的支持:

HRESULT hr = D3D11CreateDevice(
    nullptr,                    // Specify nullptr to use the default adapter.
    D3D_DRIVER_TYPE_HARDWARE,   // Create a device using the hardware graphics driver.
    0,                          // Should be 0 unless the driver is D3D_DRIVER_TYPE_SOFTWARE.
    creationFlags,              // Set debug and Direct2D compatibility flags.
    featureLevels,              // List of feature levels this app can support.
    ARRAYSIZE(featureLevels),   // Size of the list above.
    D3D11_SDK_VERSION,          // Always set this to D3D11_SDK_VERSION for Windows Store apps.
    &device,                    // Returns the Direct3D device created.
    &m_d3dFeatureLevel,         // Returns feature level of device created.
    &context                    // Returns the device immediate context.
    );

if (SUCCEEDED(hr))
{
    D3D11_FEATURE_DATA_D3D11_OPTIONS1 featureData;
    DX::ThrowIfFailed(
        device->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &featureData, sizeof(featureData))
        );

    m_tiledResourcesTier = featureData.TiledResourcesTier;
}

对 WARP 设备的扩展支持

Direct3D 11.2 扩展了对 WARP 设备的支持,通过在 D3D11CreateDeviceDriverType 参数中传递D3D_DRIVER_TYPE_WARP来创建 WARP 设备。 Direct3D 11.2 中的 WARP 软件呈现器添加了对 Direct3D 功能级别 11_1 的完全支持,包括 平铺资源IDXGIDevice3::Trim、共享 BCn 表面、minblend 和地图默认值。 还启用了 HLSL 着色器中的双重支持,同时支持 16x MSAA。

批注图形命令

Direct3D 11.2 允许使用以下 API 批注图形命令:

HLSL 着色器链接

Windows 8.1添加了 HLSL 着色器的独立编译和链接,使图形程序员能够创建预编译的 HLSL 函数,将它们打包到库中,并在运行时将它们链接到完整的着色器。 这实质上等效于 C/C++ 的单独编译、库和链接,它允许程序员编写预编译的 HLSL 代码(当更多信息可用于完成计算)。 有关如何使用着色器链接的详细信息,请参阅 使用着色器链接

完成这些步骤,在运行时使用动态链接创建最终着色器。

创建和使用着色器链接

  1. 创建 ID3D11Linker 链接器对象,该对象表示链接上下文。 单个上下文不能用于生成多个着色器;链接上下文用于生成单个着色器,然后丢弃链接上下文。
  2. 使用 D3DLoadModule 从库 Blob 加载和设置库。
  3. 使用 D3DLoadModule 加载和设置条目着色器 Blob,或创建 FLG 着色器
  4. 使用 ID3D11Module::CreateInstance 创建 ID3D11ModuleInstance 对象,然后对这些对象调用函数以将资源重新绑定到其最终槽。
  5. 将库添加到链接器,然后调用 ID3D11Linker::Link 以生成最终的着色器字节代码,这些代码随后可以在运行时中加载和使用,就像完全预编译和链接的着色器一样。

函数链接图 (FLG)

Windows 8.1还添加了函数链接图 (FLG) 。 可以使用 FLG 构造由一系列相互传递值的预编译函数调用组成的着色器。 使用 FLG 时,无需编写 HLSL 并调用 HLSL 编译器。 而是使用 C++ API 调用以编程方式指定着色器结构。 FLG 节点表示输入和输出签名以及预编译库函数的调用。 注册函数调用节点的顺序定义调用序列。 必须先指定输入签名节点,最后必须指定输出签名节点。 FLG 边缘定义值从一个节点传递到另一个节点的方式。 传递的值的数据类型必须相同;没有隐式类型转换。 形状和重排规则遵循 HLSL 行为,值只能按此顺序向前传递。 有关 FLG API 的信息,请参阅 ID3D11FunctionLinkingGraph

收件箱 HLSL 编译器

HLSL 编译器现在位于 Windows 8.1 及更高版本的收件箱中。 现在,大多数着色器编程 API 都可用于为 Windows 8.1 及更高版本构建的 Windows 应用商店应用。 许多用于着色器编程的 API 不能用于为Windows 8生成的 Windows 应用商店应用;这些 API 的参考页带有注释标记。 但某些着色器 API (例如, D3DCompileFromFile) 仍只能用于开发 Windows 应用商店应用,而不能用于提交到 Windows 应用商店的应用;这些 API 的参考页仍标有注释。

Direct3D 11 中的新增功能