Direct3D 11.2 中添加了以下功能,Windows 8.1、Windows RT 8.1 和 Windows Server 2012 R2 随附。
平铺资源
Direct3D 11.2 允许创建平铺资源,这些资源可被视为使用少量物理内存的大型逻辑资源。 平铺资源在游戏和应用 UI 中使用地形非常有用(例如)。
通过指定 D3D11_RESOURCE_MISC_TILED 标志创建平铺资源。 若要使用平铺资源,请使用以下 API:
- ID3D11Device2::GetResourceTiling
- ID3D11DeviceContext2::UpdateTiles
- ID3D11DeviceContext2::UpdateTileMappings
- ID3D11DeviceContext2::CopyTiles
- ID3D11DeviceContext2::CopyTileMappings
- ID3D11DeviceContext2::ResizeTilePool
- ID3D11DeviceContext2::TiledResourceBarrier
- D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION 标志,ID3D11Debug::SetFeatureMask
有关平铺资源的详细信息,请参阅 平铺资源。
检查平铺资源支持
在使用平铺资源之前,需要了解设备是否支持平铺资源。 下面介绍了如何检查对平铺资源的支持:
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 设备的支持,通过在 D3D11CreateDevice的 DriverType 参数中传递 D3D_DRIVER_TYPE_WARP 来创建。 Direct3D 11.2 中的 WARP 软件呈现器添加了对 Direct3D 功能级别 11_1 的完全支持,包括 平铺资源、IDXGIDevice3::Trim、共享 BCn 图面、minblend 和映射默认值。 此外,还启用了 HLSL 着色器中的双 支持以及对 16x MSAA 的支持。
批注图形命令
Direct3D 11.2 允许使用以下 API 批注图形命令:
- ID3D11DeviceContext2::IsAnnotationEnabled
- ID3D11DeviceContext2::BeginEventInt
- ID3D11DeviceContext2::SetMarkerInt
- ID3D11DeviceContext2::EndEvent
HLSL 着色器链接
Windows 8.1 增加了 HLSL 着色器的单独编译和链接,这允许图形程序员创建预编译的 HLSL 函数,将它们打包到库中,并在运行时将它们链接到完整的着色器。 这实质上等效于 C/C++单独的编译、库和链接,它允许程序员在提供更多信息完成计算时编写预编译的 HLSL 代码。 有关如何使用着色器链接的详细信息,请参阅 使用着色器链接。
完成这些步骤以在运行时使用动态链接创建最终着色器。
创建和使用着色器链接
- 创建 ID3D11Linker 链接器对象,该对象表示链接上下文。 单个上下文不能用于生成多个着色器;链接上下文用于生成单个着色器,然后丢弃链接上下文。
- 使用 D3DLoadModule 从库 blob 加载和设置库。
- 使用 D3DLoadModule 加载和设置条目着色器 blob,或创建 FLG 着色器。
- 使用 ID3D11Module::CreateInstance 创建 ID3D11ModuleInstance 对象,然后对这些对象的函数调用函数,将资源重新绑定到其最终槽。
- 将库添加到链接器,然后调用 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 中的新增功能