最底层是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提交到显卡去执行。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!