mesa解析2 显卡驱动软件架构

最底层是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提交到显卡去执行。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值