三代DRI的變化

DRI1

首先要說,DRI1已經不在考慮使用了,這裏說一下它的原理:

DRI1由於當時圖形卡內存大小,只有一個屏幕front buffer+back buffer由所有DRI clients和X server使用,front buffer和back buffer就像現在顯示系統的雙緩衝一樣,所有要做渲染操作的實體都直接渲染到back buffer,然後執行swap就更新畫面,front變back,back變front。另外所有渲染實體在開始渲染時,都會獨佔DRM設備,就像互斥鎖保護的內存資源,其他的渲染實體就要等,並且渲染實體在釋放設備時,所有之前上傳的數據(如紋理等)都會丟失,總之,性能不行。

DRI2

DRI2和DRI3現在都在使用,但是DRI3性能更好一些,說一下DRI2原理:

DRI2是進入compositor時代的設計,buffer開始變成離屏buffer,並且離屏buffer可以做直接渲染,DRM也經過了一次大更新;每個DRI client都有自己的back buffer(附帶着深度和模版 緩衝區),DRI client在back buffer做完渲染後的swap也不再是直接顯示出去,而是變成提交給compositor作爲一個compose源,最終的屏幕內容是compositor根據各個源的疊加、透明、邊界裁剪得到,並swap到真的front buffer。

爲了管理各個DRI client都有自己的back buffer這個事兒,DRM加了新功能,內存管理TTM,但是後來又重寫成GEM,這些東西到DRM的事兒裏再說。但是有了這個內存管理之後,DRI2 client渲染時不再鎖定整個DRM設備,並且在暫停渲染時也不必釋放所有顯存資源。

DRI3

DRI3 client申請自己的渲染buffer,而不是去調用X server來做申請,這帶來了易於改變窗口大小、重複利用之前的buffer等特性(compositor刷幀只需要更新部分緩存內容即可);DRI3放棄了不安全的機遇GEM共享buffer的機制,轉而使用DMA的fd來傳遞,並且DRI3PixmapFromBuffer和DRI3BufferFromPixmap可以完成X server buffer與DMA buffer的轉換,同樣一塊內存,在DRI client和X server之間傳遞。DRI3還有Present擴展,新鮮程度沒有激起我非常強的表述欲,就當沒看見了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章