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 来创建。 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 中的新增功能