mesa解析2 显卡驱动软件架构
2015-09-18 19:07
495 查看
最底层是radeon_drm_winsys,功能:
通过libdrm,和内核drm交互:申请显存bo,显存map到内存,查询bo是否忙(正在被显卡使用)
pipe_screen,接口类,功能:
查询显卡特性参数。另外,注册了资源构造函数。资源指显存资源,如bo,texture
r600_common_screen,继承自pipe_screen,实现了pipe_screen定义的接口
其中注册了一个radeon_drm_winsys,以辅助实现pipe_screen定义的接口。
radeon_drm_cs
一个内存中的buffer数组,对显卡状态的设置和绘制命令都发射到这里,然后一次性flush到显卡
pipe_context,接口类
r600_common_context继承自pipe_context
r600_context继承自r600_common_context
存有显卡状态的副本,注册有radeon_drm_cs。
对上的接口是以pipe_开头的状态对象,如pipe_stencil_ref,内部有r600_stencil_ref与之对应。
pipe_开头的状态对象,是对现代显卡的底层抽象层,是架构无关层。而r600_开头的状态对象,和具体显卡中的寄存器对应。
r600_context中的状态对象,都继承自r600_atom,继承时要实现emit方法。这些r600_atom注册在上下文中一个列表里。其中还要包含一个pipe_开头的状态对象,以及一个r600_开头的状态对象。比如r600_stencil_ref_state中,包含pipe_stencil_ref和r600_stencil_ref。
当上层调用pipe_context的接口,传入一个pipe_stencil_ref,要求设置状态,则将其注册到r600_stencil_ref_state,并更新r600_stencil_ref,最后设置r600_stencil_ref_state这个r600_atom为dirty。
当flush发生时,检查上下文中的所有atom,标记dirty的,调用其emit方法,如r600_emit_stencil_ref,将r600_stencil_ref中的硬件配置信息的配置命令发送到radeon_drm_cs,最后将cs提交到显卡去执行。
通过libdrm,和内核drm交互:申请显存bo,显存map到内存,查询bo是否忙(正在被显卡使用)
pipe_screen,接口类,功能:
查询显卡特性参数。另外,注册了资源构造函数。资源指显存资源,如bo,texture
r600_common_screen,继承自pipe_screen,实现了pipe_screen定义的接口
其中注册了一个radeon_drm_winsys,以辅助实现pipe_screen定义的接口。
radeon_drm_cs
一个内存中的buffer数组,对显卡状态的设置和绘制命令都发射到这里,然后一次性flush到显卡
pipe_context,接口类
r600_common_context继承自pipe_context
r600_context继承自r600_common_context
存有显卡状态的副本,注册有radeon_drm_cs。
对上的接口是以pipe_开头的状态对象,如pipe_stencil_ref,内部有r600_stencil_ref与之对应。
pipe_开头的状态对象,是对现代显卡的底层抽象层,是架构无关层。而r600_开头的状态对象,和具体显卡中的寄存器对应。
r600_context中的状态对象,都继承自r600_atom,继承时要实现emit方法。这些r600_atom注册在上下文中一个列表里。其中还要包含一个pipe_开头的状态对象,以及一个r600_开头的状态对象。比如r600_stencil_ref_state中,包含pipe_stencil_ref和r600_stencil_ref。
当上层调用pipe_context的接口,传入一个pipe_stencil_ref,要求设置状态,则将其注册到r600_stencil_ref_state,并更新r600_stencil_ref,最后设置r600_stencil_ref_state这个r600_atom为dirty。
当flush发生时,检查上下文中的所有atom,标记dirty的,调用其emit方法,如r600_emit_stencil_ref,将r600_stencil_ref中的硬件配置信息的配置命令发送到radeon_drm_cs,最后将cs提交到显卡去执行。
相关文章推荐
- 前端看到一些不错的写法,网站,资源网站,字体等
- 新浪、万网前系统架构师高俊峰:统一监控报警平台架构设计思路
- PHPCMS搭建wap手机网站
- HDFS 架构设计
- Android系统架构
- iOS122 有态度的iOS第三方资源聚合网站
- 搭建网站常见返回码40X 50X等错误的原因及解决方案
- RabbitMQ 集群与高可用配置
- 蔡学镛:让架构接地气,不再云里雾里
- Git相关网站
- Android开发相关网站和工具
- Flask+Mysql搭建网站之其他笔记
- 淘宝数据魔方技术架构解析
- 混合IT架构的最佳实践
- 新浪微博技术架构分析
- 微信、陌陌等著名IM软件设计架构详解
- HDFS 高可用HA搭建过程
- Unity3D 之脚本架构,优雅地管理你的代码
- 使用SQLMAP对网站和数据库进行SQL注入攻击
- 架构的伸缩性(转载)