amdgpu PM4 packet format

CPU与GPU通过Ring Buffer实现渲染命令的提交,渲染命令作为一个packet被提交到Ring Buffer上,AMD规定packet的格式,它被分为两部分,Header和IT_BODY(information body),EOP渲染命令也有如下通用格式,如下图所示:

packet的HEADER最高2bit代表packet的类型,AMD将packet分为了3类,分别是0,2,3。
每类packet的头部除了高2bit代表类型以外其它字段与packet类型相关,其中type-0和type-2是用作写寄存器的packet,type-3用做发送渲染命令以及一些特殊操作的命令,比如IB和Fence操作。

type 0.png
type 2.png
type 3.png

以type-3 packet为例:

HEADER由4个字段组成,如下:
PREDICATE:待分析
IT_OPCODE:操作码,用于描述具体的渲染命令类型或者特殊操作,比如Indirect Buffer和事件触发操作
COUNT:描述IT_BODY的大小的字段,4字节为单位。它的值为IT_BODY长度减1。
TYPE:packet类型,这里是3
AMD驱动中有如下宏定义type-3类型的packet:

#define     PACKET_TYPE3    3
#define     PACKET3(op, n)  ((PACKET_TYPE3 << 30) |  (((op) & 0xFF) << 8) |  ((n) & 0x3FFF) << 16)
#define     PACKET3_EVENT_WRITE_EOP             0x47

/* 组装一个操作码为PACKET3_EVENT_WRITE_EOP的type-3类型的HEADER,并设置其IT_BODY长度为5 DWORD */
PACKET3(PACKET3_EVENT_WRITE_EOP, 4)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。