接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(17)
上一回在讲解了intel_user_framebuffer_create函数中的第一个函数i915_gem_object_lookup()时,围绕传给i915_gem_object_lookup函数的实参都是什么展开了深入解析,并且借此机会将之前一直没有探明的、悬而未决的东西一举搞清楚了。由于这部分内容非常重要,因此,本回要从KWin到libdrm再到DRM、从上到下详细地梳理一下。
- KWin层
先从KWin说起。KWin层的代码不用问还是src/backends/drm/drm_buffer.cpp的那一经典段落:
std::shared_ptr<DrmFramebuffer> DrmFramebuffer::createFramebuffer(const std::shared_ptr<DrmGpuBuffer> &buffer)
{
const auto size = buffer->size();
const auto handles = buffer