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

收件箱 HLSL 编译器

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

Direct3D 11 中的新增功能