成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony富設備移植指南(6.3)GPU調試經驗分享

系統(tǒng) OpenHarmony
樹莓派4的GPU驅動組成比較復雜,在Linux的gpu驅動目錄中drm目錄下存放著vc4和v3d兩個目錄,vc4既包含Display驅動也包含GPU驅動,主要用于樹莓派3及之前的SoC;而v3d則只包含gpu驅動,專用于樹莓派4。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區(qū)??

??https://ost.51cto.com??

本人使用樹莓派4和小米6進行OpenHarmony適配GPU時產生過許多問題,這里回顧一下我移植GPU的過程,同時也做一些總結和經驗分享,希望大家看過之后能少走一些彎路。

1、樹莓派4GPU移植

樹莓派4的GPU驅動組成比較復雜,在Linux的gpu驅動目錄中drm目錄下存放著vc4和v3d兩個目錄,vc4既包含Display驅動也包含GPU驅動,主要用于樹莓派3及之前的SoC;而v3d則只包含gpu驅動,專用于樹莓派4。由于vc4和v3d的Display硬件差異不大,為了讓樹莓派4最大化利用vc4現(xiàn)有的Display驅動,樹莓派驅動的開發(fā)者并沒有分離代碼,所以樹莓派的GPU驅動需要同時啟用vc4和v3d。同時,我在查閱mesa3d的文檔中有關v3d的描述中也有類似的說明,原文如下:

The V3D Mesa drivers communicate directly with the V3D kernel DRM driver for scheduling GPU commands. Additionally, on the Raspberry Pi 4, the kernel uses the VC4 DRM driver for display support, so Mesa exposes a vc4_dri.so using the kmsro helpers to do behind-the-scenes buffer management between the two kernel drivers, while executing rendering on the V3D kernel module.

查資料時我看到樹莓派的mesa3d驅動還需要kmsro,當時我不太理解,經過好幾天的網上搜索,最終抱著不確定的心態(tài),使用了以下的參數(shù)編譯mesa:

-Dplatforms=ohos -Degl-native-platform=ohos -Ddri-drivers= -Dgallium-drivers=v3d,vc4,kmsro \
-Dvulkan-drivers= -Dgbm=enabled -Degl=enabled -Dcpp_rtti=false -Dglx=disabled -Dtools= -Ddri-search-path=/vendor/lib/chipsetsdk

在復制編譯好的lib文件加入編譯框架,并在config.json中設置啟用gpu。

"graphic_standard_feature_ace_enable_gpu = true",

編譯燒錄之后運行黑屏,受到SIG-OpenGfxDrv群里的大神指導,調試gpu可以先設置cpu合成,gpu渲染的模式,即保持config.json中設置啟用gpu,同時修改foundation/graphic/graphic_2d/rosen/modules/render_service/core/pipeline/rs_base_render_engine.cpp中的NeedForceCPU函數(shù),強制使用cpu合成。

//bool forceCPU = false;
bool forceCPU = true;

再次編譯,燒錄運行,發(fā)現(xiàn)屏幕能點亮,但是顯示異常,經過各種探索,仍然無法解決,第一次移植失敗。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

經過斷斷續(xù)續(xù)的查找資料,對比驗證,找到了驗證gpu工作的方法,就是通過opengl的api調用一個簡單的gpu繪圖程序,結果仍然撕裂,這時我基本確定問題不在編譯參數(shù)了。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

接口能調用成功,但是顯示異常,這種bug不會報錯,沒有圖形相關經驗的我根本定位不到原因,最終我想到樹莓派4有安卓的移植項目,隨后查到安卓也是用mesa3d,然后我找到了兩個樹莓派4移植項目, 【lineage-rpi】和【 android-rpi】,對比了兩個倉中的mesa3d代碼之后,終于給我在【 android-rpi】中發(fā)現(xiàn)了關鍵代碼,樹莓派4適配安卓僅僅修改了下面這些地方:

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

然后再看OpenHarmony的mesa3d的代碼,之前我對比過platform_ohos.c跟platform_android.c的區(qū)別,差異是有,但是總體比較類似,同時我也發(fā)現(xiàn)了注釋中有說明platform_ohos是基于platform_android修改。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

經過對比,我把android-rpi對mesa的修改手動同步到了OpenHarmony的mesa中,修改如下。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

經過重新編譯,燒錄,測試例子終于能夠正常顯示,前后歷時四個多月,從3.2beta3跨到了3.2beta4。

cpu合成+cpu渲染組合下,調用OpenGLApi進行三角形的繪制:

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)


啟用GPU渲染后,能夠感知到幀率有提升,打個比方,cpu合成+cpu渲染在豎屏旋轉下只有7幀/秒,cpu合成+gpu渲染下能達到14幀/秒,有提升但是仍然卡頓嚴重,經過多方求教仍未解決問題。

在初步打通gpu調用之后,夜里腦子仍在思考著問題的解決辦法,不斷排列組合,最終想到了3.2beta4的一個公告內容,RS側支持GPU合成,然后又聯(lián)系到了幾個月前我看到過的一個關于gpu的issue,描述到了【graphic_standard_feature_rs_enable_eglimage】這個參數(shù),最后爬起來把這個參數(shù)設置成了true,編譯燒錄一套走起,最后居然給干成了,流暢度可感知的達到了60fps那種流暢。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

通過樹莓派4適配GPU的經歷,我總結出GPU適配的思路如下:

1.不啟用GPU功能,在CPU合成+CPU渲染的環(huán)境下,確認GPU驅動正常工作。

foundation/graphic/graphic_2d/rosen/modules/render_service/core/pipeline/rs_base_render_engine.cpp中的NeedForceCPU
中修改強制cpu合成
//bool forceCPU = false;
bool forceCPU = true;

vendor/raspberrypi/rpi4/config.json
中設置不啟用gpu
"graphic_standard_feature_ace_enable_gpu = false",

2.啟用部分GPU功能,在CPU合成+GPU渲染的環(huán)境下,確認GPU能正確渲染。

foundation/graphic/graphic_2d/rosen/modules/render_service/core/pipeline/rs_base_render_engine.cpp中的NeedForceCPU
中修改關閉cpu合成
//bool forceCPU = false;
bool forceCPU = true;

vendor/raspberrypi/rpi4/config.json
中設置啟用gpu
"graphic_standard_feature_ace_enable_gpu = true",

3.啟用GPU合成+GPU渲染,加速OpenHarmony圖形顯示。

foundation/graphic/graphic_2d/rosen/modules/render_service/core/pipeline/rs_base_render_engine.cpp中的NeedForceCPU
中還原關閉cpu合成
bool forceCPU = false;

vendor/raspberrypi/rpi4/config.json
中設置啟用gpu,同時啟用gpu合成
"graphic_standard_feature_ace_enable_gpu = true",
"graphic_standard_feature_rs_enable_eglimage = true"

同時OpenHarmony開源的GPU移植也可以參考安卓方面的移植。

2、小米6GPU移植

小米6的gpu是Adreno 540,經過網上搜索資料mesa驅動對應的名字是freedreno,所以編譯參數(shù)對應為:

-Dplatforms=ohos -Degl-native-platform=ohos -Ddri-drivers= -Dgallium-drivers=freedreno \
-Dvulkan-drivers= -Dgbm=enabled -Degl=enabled -Dcpp_rtti=false -Dglx=disabled -Dtools= -Ddri-search-path=/vendor/lib64/chipsetsdk

但是編譯燒錄之后運行簡單的測試gpu程序始終無法運行,signal 11程序崩潰了。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

通過/data/log/faultlog/temp下崩潰日志確認build_id_find_nhdr_callback存在問題。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

通過在函數(shù)內部加print打印的方式,對比分析之后確認是offset計算不正確,最后我意外發(fā)現(xiàn)了OpenHarmony的【third_party_libunwind】有修改過build-id,經過查看pr提交發(fā)現(xiàn)了以下關鍵代碼,原來是oh的編譯框架在編譯出的elf文件頭增加了一個非標準的note段,mesa使用標準的方式去解析note內容導致偏移量計算出錯,需要處理一下偏移量問題,然而mesa3d這個開源gpu驅動長久沒人維護了,這個問題一直沒有暴露出來,這給我碰到了。。。同步修改之后解決調用崩潰問題。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

同時接口調用也能正常顯示了。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

但是當我進行移植第二步,CPU合成+GPU渲染時黑屏,無法顯示內容,又是一番折騰,加打印然后調試,最后發(fā)現(xiàn)關鍵代碼,freedreno中有強制設置對齊。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

在hilog中發(fā)現(xiàn)Assertion failed。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

查看源碼發(fā)現(xiàn)a5xx系的頭文件中有pitch的驗證,【&0x3f】相當于判斷能否被64整除。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

然后我往前找到buffer設置的某個地方嘗試著把pich強制64對齊,終于能顯示出圖像。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

不黑屏了,但是仍然顯示不正常,很明顯能感知到是長度沒有對齊導致錯位了。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

最終在SIG-OpenGfxDrv群里的lhl大神指導下,修改display適配層中的WIDTH_ALIGN參數(shù)為64,成功解決顯示問題。

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

#創(chuàng)作者激勵#OpenHarmony富設備移植指南(6.3)GPU調試經驗分享-開源基礎軟件社區(qū)

確認CPU合成+GPU渲染顯示能正常工作之后,啟用GPU合成+GPU渲染,成功運行,小米6終于適配GPU成功。

樹莓派4和小米6的GPU適配,從代碼量來說,適配代碼真的很少,但是又異常困難,在此記錄一下我走過的坑,希望我走過的坑,后來者不用再掉下去。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區(qū)??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區(qū)
相關推薦

2023-02-28 15:40:16

鴻蒙CPU渲染

2023-03-06 16:11:00

設備移植開源GPU驅動

2023-03-10 09:47:45

OpenGL渲染設備移植

2023-02-14 17:06:31

設備移植打包刷機

2023-02-06 16:21:48

2023-04-06 09:10:13

設備移植鴻蒙

2023-02-07 15:52:50

2023-02-08 15:46:50

設備移植第三方內核適配

2009-12-16 16:37:59

Ruby on Rai

2013-05-03 13:45:42

KVM故障調試

2012-01-30 13:58:36

Linux Deepi Gnome Shel

2022-06-21 11:30:22

littleVGL鴻蒙

2023-05-16 14:49:25

鴻蒙內核移植

2023-05-05 16:05:26

設備內核移植鴻蒙

2022-10-14 15:27:02

應用開發(fā)鴻蒙

2022-10-10 15:01:35

手寫板鴻蒙

2022-06-09 14:40:14

系統(tǒng)移植鴻蒙

2022-03-17 15:55:19

播放數(shù)字音頻解碼鴻蒙

2022-04-15 14:31:02

鴻蒙操作系統(tǒng)

2023-04-10 09:44:22

內核鼠標調試鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲人成人一区二区在线观看 | 国产一区在线免费 | 成人在线一区二区三区 | 久草综合在线视频 | 99re99| 日韩成人在线网址 | 久久久久久久久毛片 | 在线观看免费av片 | 日韩一区二区三区在线视频 | 91精品在线播放 | 欧美精品第一区 | 午夜免费福利电影 | 欧美精品在线免费 | 成人欧美一区二区三区在线观看 | 久久综合狠狠综合久久综合88 | 欧美日韩国产高清 | 亚洲国产一区二区在线 | 秋霞av国产精品一区 | 日韩久久久久 | 精品精品 | 欧美日韩国产一区 | 日韩在线资源 | 精品久久久久久亚洲精品 | 亚洲一区二区视频在线观看 | 精品真实国产乱文在线 | 国产精品福利视频 | 亚洲精品丝袜日韩 | 久久成人国产 | jizz亚洲人 | 国产精品a久久久久 | 亚洲欧美一区二区在线观看 | 视频1区2区| 欧美亚洲视频 | 拍戏被cao翻了h承欢 | 另类一区 | 天天干天天插 | 欧美9999 | 中文字幕在线一区二区三区 | 黄色香蕉视频在线观看 | 中文字幕在线观看第一页 | 亚洲午夜视频在线观看 |