amd使用状态机维护了pageflip的三个状态。
- AMDGPU_FLIP_NONE
当前工作队列为空 - AMDGPU_FLIP_SUBMITTED
当前队列运转, 提交了任务 - AMDGPU_FLIP_PENDING
当前工作队列正在运转
1. 通过libdrm从上到下查看代码流程
- test_page_flip
- libdrm通过drmModePageFlip(DRM_IOCTL_MODE_PAGE_FLIP)发pageflip
- 通过select等待event
- 重复
2. 内核驱动运转模式
主要分析的POLARIS10 (RX570),所使用的IP是VI
a. IP初始化,注册client,处理中断
- dce_v11_0_pageflip_irq
- dce_v11_0_crtc_irq
b. 处理中断
- 还没时间再写,以下别看·······
内核在amdgpu_display_crtc_page_flip_target判断是不是AMDGPU_FLIP_NONE
然后提交bufferwork,将队列状态切换为AMDGPU_FLIP_SUBMITTED