DriverEntry 可能会进行需要一下初始化过程:
- 初始化显示微型端口驱动程序
- 初始化与 Direct3D 用户模式显示驱动程序之间的通信
- 初始化内存段的使用
- 枚举 GPU 引擎功能
- 加载 OpenGL 可安装客户端驱动程序
初始化显示微型端口驱动程序
操作系统加载显示微型端口驱动程序后,将执行以下步骤来初始化显示微型端口驱动程序:
操作系统调用显示微型端口驱动程序的 DriverEntry 函数。
DriverEntry 分配 DRIVER_INITIALIZATION_DATA 结构,并使用DXGKDDI_INTERFACE_VERSION填充 DRIVER_INITIALIZATION_DATA 的 Version 成员,并使用指向显示微型端口驱动程序的其他入口点函数 ((即显示微型端口驱动程序实现的函数) )的指针填充DRIVER_INITIALIZATION_DATA的其余成员。
DriverEntry 调用 DxgkInitialize 函数以加载 Microsoft DirectX 图形内核子系统 (Dxgkrnl.sys) 并为 DirectX 图形内核子系统提供指向显示微型端口驱动程序的其他入口点函数的指针。
DxgkInitialize 返回后,DriverEntry 将 DxgkInitialize 的返回值传播回操作系统。 显示微型端口驱动程序编写器不应对 DxgkInitialize 返回的值做出假设。
初始化显示微型端口驱动程序
操作系统加载显示微型端口驱动程序后,将执行以下步骤来初始化显示微型端口驱动程序:
操作系统调用显示微型端口驱动程序的 DriverEntry 函数。
DriverEntry 分配 DRIVER_INITIALIZATION_DATA 结构,并使用DXGKDDI_INTERFACE_VERSION填充 DRIVER_INITIALIZATION_DATA 的 Version 成员,并使用指向显示微型端口驱动程序的其他入口点函数 (即显示微型端口驱动程序实现的函数) 的指针填充DRIVER_INITIALIZATION_DATA的其余成员。
DriverEntry 调用 DxgkInitialize 函数以加载 Microsoft DirectX 图形内核子系统 (Dxgkrnl.sys) 并为 DirectX 图形内核子系统提供指向显示微型端口驱动程序的其他入口点函数的指针。
DxgkInitialize 返回后,DriverEntry 将 DxgkInitialize 的返回值传播回操作系统。 显示微型端口驱动程序编写器不应对 DxgkInitialize 返回的值做出假设。
初始化与 Direct3D 用户模式显示驱动程序之间的通信
若要初始化与 Microsoft Direct3D 用户模式显示驱动程序 DLL 版本 11 DDI 的通信,Direct3D 运行时首先加载 DLL。 接下来,Direct3D 运行时通过 DLL 的导出表调用用户模式显示驱动程序的 OpenAdapter 函数,以打开图形适配器的实例。 OpenAdapter 函数是 DLL 的唯一导出函数。
在调用驱动程序的 OpenAdapter 函数时,运行时在 D3DDDIARG_OPENADAPTER 结构的 pAdapterCallbacks 成员中提供 pfnQueryAdapterInfoCb 适配器回调函数。 运行时还在 D3DDDIARG_OPENADAPTER 的 Interface 和 Version 成员中提供其版本。 用户模式显示驱动程序必须验证它是否可以使用此版本的运行时。 用户模式显示驱动程序在 D3DDDIARG_OPENADAPTER 的 pAdapterFuncs 成员中返回其适配器特定函数的表。
用户模式显示驱动程序应调用 pfnQueryAdapterInfoCb 适配器回调函数,以从显示微型端口驱动程序查询图形硬件功能。
运行时调用用户模式显示驱动程序的 CreateDevice 函数 (驱动程序的适配器特定函数之一,) 创建用于处理呈现状态集合和完成初始化的显示设备。 初始化完成后,Direct3D 运行时可以调用 显示驱动程序提供的函数,用户模式显示驱动程序可以调用 运行时提供的函数。
使用D3DDDIARG_CREATEDEVICE结构调用用户模式显示驱动程序的 CreateDevice 函数,其成员按以下方式设置,以初始化用户模式显示驱动程序接口:
运行时将 Interface 设置为运行时从用户模式显示驱动程序所需的接口版本。
运行时将 Version 设置为驱动程序可用于标识生成运行时时间的数字。 例如,驱动程序可以使用版本号来区分 Windows Vista 发布的运行时和随后续 Service Pack 发布的运行时,后者可能包含驱动程序所需的修补程序。
运行时设置 hDevice 以指定驱动程序调用回运行时时驱动程序应使用的句柄。 驱动程序生成唯一句柄,并将其传递回 hDevice 中的运行时。 运行时应在后续驱动程序调用中使用返回的 hDevice 句柄。
运行时在 pCallbacks 指向的 D3DDDI_DEVICECALLBACKS 结构中提供其特定于设备的回调函数的表。 用户模式显示驱动程序调用运行时提供的回调函数来访问显示微型端口驱动程序中的内核模式服务。
用户模式显示驱动程序在 pDeviceFuncs 指向的D3DDDI_DEVICEFUNCS结构中返回其特定于设备的功能的表。
可同时存在的 (图形上下文) 显示设备的数量仅受可用系统内存的限制。