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)

你可能感兴趣的:(amdgpu PM4 packet format)