中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 7435|回复: 3

哪位大牛知道Graphics driver与D3D之间的交互细节?推荐资料也行

[复制链接]
发表于 2011-7-4 20:35:26 | 显示全部楼层 |阅读模式
哪位大牛知道Graphics driver与D3D之间的交互细节?推荐资料也行
发表于 2012-1-13 09:30:27 | 显示全部楼层
从D3D到图形驱动程序,中间还有一个交互层,MS称之为THUNK LAYER,代表D3D Runtime 访问驱动的一组进入点;驱动通过callback访问rumtime

NT5及以前通过D3D8THK.DLL 实现THUNK LAYER,xp和2k又略有不同:
1)wxp是地道的转接层,d3d8thk仅仅导入了gdi32的ddentry
2)w2k和w98,d3d8thk实现了独立的访问核心模式的接口

VISTA为代表的NT6驱动模型WDM,thunklayer直接定义在gdi32.dll中,使得windows下面的所有图形子系统统一到了一起:gdi,d3d,ogl

访问核心的指令是sysenter和sysexit

(一)D3DTHK 在MSDN之Graphics Low Level Client Support 一文中有详细介绍
1)NtGdiDdQueryDirectDrawObject 查询设备能力和回调函数
2)NtGdiD3DContextCreate/NtGdiD3DContextDestroy 创建和销毁D3D Context
3)NtGdiD3DDrawPrimitives2 提交Command Buffer;pfpVidMemCmd定义了命令缓冲区起始地址;COMMAND 格式请查阅WDK

(二)D3DKMT 直接定义在gdi32中,意为"Kernel Mode Thunks"
1)D3DKMTQueryAdapterInfo 通过 KMTQAITYPE_UMDRIVERNAME 类型给出用户模式驱动dll文件名
2)D3DKMTCreateDevice/D3DKMTDestroyDevice 创建设备
3)D3DKMTRender 提交命令缓冲区
4)UMD(用户模式驱动) 提供的OpenAdapter将通过pAdapterFuncs给出CreateDevice的CALLBACK
5)CreateDevice CALLBACK 通过D3DDDIARG_CREATEDEVICE结构给出两组函数,一组是D3DRUNTIME提供给UMD使用的接口D3DDDI_DEVICECALLBACKS,一组是UMD提供给D3DRUNTIME的驱动函数D3DDDI_DEVICEFUNCS

通过上述说明,你已经可以渗透D3D 的驱动交互层了,比如制作一些图形性能分析工具之类的应用。
附注,上述仅为D3D9 驱动交互层,D3D10和D3D11 和 VISTA D3D9 差不太多,稍微多了几个接口而已,详见WDK
发表于 2017-10-14 20:18:58 | 显示全部楼层
感谢大侠提供了这个信息,让我终于找到了向下钻研的突破口!!!太感谢了!!!
发表于 2018-3-5 18:02:14 | 显示全部楼层
明白了,感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2018-6-24 03:17 , Processed in 0.057106 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表