软件层

Direct3D 11 运行时是使用层构造的,从核心的基本功能开始,在外部层中构建可选功能和开发人员辅助功能。 本部分介绍每个层的功能。

一般规则是,层会添加功能,但不修改现有行为。 例如,核心函数将具有与要实例化的调试层无关的相同返回值,但如果实例化调试层,则可能会提供其他调试输出。

若要在创建设备时创建层,请调用 D3D11CreateDeviceD3D11CreateDeviceAndSwapChain 并提供一个或多个 D3D11_CREATE_DEVICE_FLAG 值。

Direct3D 11 提供以下运行时层:

核心层

默认情况下存在核心层;在 API 和设备驱动程序之间提供非常精简的映射,从而最大程度地减少高频率调用的开销。 由于核心层对性能至关重要,因此它只执行关键验证。 其余层是可选的。

调试层

调试层提供大量额外参数和一致性验证(例如,验证着色器链接和资源绑定、验证参数一致性和报告错误说明)。

若要创建支持调试层的设备,必须安装 DirectX SDK (以获取D3D11SDKLayers.dll) ,然后在调用 D3D11CreateDevice 函数或 D3D11CreateDeviceAndSwapChain 函数时指定D3D11_CREATE_DEVICE_DEBUG标志。 如果在启用调试层的情况下运行应用程序,则应用程序将大大变慢。 但是,为了确保应用程序在交付之前清除错误和警告,请使用调试层。 有关详细信息,请参阅 使用调试层调试应用

注意

对于 Windows 7 平台更新的 Windows 7 (KB2670838) 或 Windows 8.x,若要创建支持调试层的设备,请安装适用于 Windows 8.x 的 Windows 软件开发工具包 (SDK) 以获取D3D11_1SDKLayers.dll。

注意

对于Windows 10,若要创建支持调试层的设备,请启用“图形工具”可选功能。 转到“设置”面板,在“系统、应用 & 功能”下,管理可选功能、添加功能,然后查找“图形工具”。

注意

有关如何远程调试 DirectX 应用的信息,请参阅 远程调试 DirectX 应用

 

或者,可以使用 DirectX SDK 中包含的 DirectX 控制面板启用/禁用调试标志。

当调试层列出内存泄漏时,会输出对象接口指针的列表及其友好名称。 默认友好名称是“<unnamed>”。 可以使用 ID3D11DeviceChild::SetPrivateData 方法和 D3Dcommon.h 中的 WKPDID_D3DDebugObjectName GUID 来设置友好名称。 例如,若要将 pTexture 命名为 SDKLayer mytexture.jpg,请使用以下代码:

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

通常,应在生产版本之外编译这些调用。

设备