想了解更多关于开源的内容,请访问:51CTO 开源基础软件社区https://ost.51cto.com本人使用树莓派4和小米6进行OpenHarmony适配GPU时产生过许多问题,这里回顾一下我移植GPU的过程,同时也做一些总结和经验分享,希望大家看过之后能少走一些弯路。-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"graphic_standard_feature_ace_enable_gpu = true",//bool forceCPU = false;
bool forceCPU = true;
经过断断续续的查找资料,对比验证,找到了验证gpu工作的方法,就是通过opengl的api调用一个简单的gpu绘图程序,结果仍然撕裂,这时我基本确定问题不在编译参数了。
接口能调用成功,但是显示异常,这种bug不会报错,没有图形相关经验的我根本定位不到原因,最终我想到树莓派4有安卓的移植项目,随后查到安卓也是用mesa3d,然后我找到了两个树莓派4移植项目, 【lineage-rpi】和【 android-rpi】,对比了两个仓中的mesa3d代码之后,终于给我在【 android-rpi】中发现了关键代码,树莓派4适配安卓仅仅修改了下面这些地方:
然后再看OpenHarmony的mesa3d的代码,之前我对比过platform_ohos.c跟platform_android.c的区别,差异是有,但是总体比较类似,同时我也发现了注释中有说明platform_ohos是基于platform_android修改。
经过对比,我把android-rpi对mesa的修改手动同步到了OpenHarmony的mesa中,修改如下。
经过重新编译,烧录,测试例子终于能够正常显示,前后历时四个多月,从3.2beta3跨到了3.2beta4。cpu合成+cpu渲染组合下,调用OpenGLApi进行三角形的绘制:
通过树莓派4适配GPU的经历,我总结出GPU适配的思路如下:1.不启用GPU功能,在CPU合成+CPU渲染的环境下,确认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",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",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"-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
通过/data/log/faultlog/temp下崩溃日志确认build_id_find_nhdr_callback存在问题。
通过在函数内部加print打印的方式,对比分析之后确认是offset计算不正确,最后我意外发现了OpenHarmony的【third_party_libunwind】有修改过build-id,经过查看pr提交发现了以下关键代码,原来是oh的编译框架在编译出的elf文件头增加了一个非标准的note段,mesa使用标准的方式去解析note内容导致偏移量计算出错,需要处理一下偏移量问题,然而mesa3d这个开源gpu驱动长久没人维护了,这个问题一直没有暴露出来,这给我碰到了。。。同步修改之后解决调用崩溃问题。
同时接口调用也能正常显示了。
但是当我进行移植第二步,CPU合成+GPU渲染时黑屏,无法显示内容,又是一番折腾,加打印然后调试,最后发现关键代码,freedreno中有强制设置对齐。
在hilog中发现Assertion failed。
查看源码发现a5xx系的头文件中有pitch的验证,【&0x3f】相当于判断能否被64整除。
然后我往前找到buffer设置的某个地方尝试着把pich强制64对齐,终于能显示出图像。
不黑屏了,但是仍然显示不正常,很明显能感知到是长度没有对齐导致错位了。
最终在SIG-OpenGfxDrv群里的lhl大神指导下,修改display适配层中的WIDTH_ALIGN参数为64,成功解决显示问题。
确认CPU合成+GPU渲染显示能正常工作之后,启用GPU合成+GPU渲染,成功运行,小米6终于适配GPU成功。树莓派4和小米6的GPU适配,从代码量来说,适配代码真的很少,但是又异常困难,在此记录一下我走过的坑,希望我走过的坑,后来者不用再掉下去。想了解更多关于开源的内容,请访问:51CTO 开源基础软件社区https://ost.51cto.com GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
Ruby是否有逐步调试器,类似于Perl的“perl-d”? 最佳答案 ruby-debug(对于ruby1.8),debugger(对于ruby1.9),byebug(对于ruby2.0)以及trepanning系列都有一个-x或--trace选项。在调试器内部,命令setlinetrace将打开或关闭线路跟踪。这是themanualforruby-debug原来的答案已经修改,因为数据噪声文章的链接,唉,不再有效了。还添加了ruby-debug的后继者 关于ruby-Ruby
Devise是一个Ruby库,它为我提供了这个User类:classUser当写入:confirmable时,注册时会发送一封确认邮件。上周我不得不批量创建300个用户,所以我在恢复之前注释掉了:confirmable几分钟。现在我正在为用户批量创建创建一个UI,因此我需要即时添加/删除:confirmable。(我也可以直接修改Devise的源码,但我宁愿不去调和它)问题:如何即时添加/删除:confirmable? 最佳答案 WayneConrad的解决方案:user=User.newuser.skip_confirmation
我给自己买了一个新的8gigUSBkey,我正在寻找一个合适的解决方案来拥有一个可移植RoR环境来学习。我在谷歌上搜索了一下,发现了一些可能性,但我很想听听一些现实生活中的经历和意见。谢谢! 最佳答案 我喜欢InstantRails,非常容易使用,无需安装程序,也不会修改您的系统环境。 关于ruby-on-rails-可移植RubyonRails环境,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
我安装了ruby、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记
我已经开始使用RubyMine6。我正在处理Rails4、Ruby2.1.1项目。我无法找到如何使用Pow作为服务器调试到RubyMine。你能给我指明正确的方向吗? 最佳答案 我能够使用远程调试从RubyMine进行调试。我正在使用RubyMine6、Rails3、Ruby2.1.1。首先创建一个.powenv文件并添加:exportRUBY_DEBUG_PORT=1234exportPOW_WORKERS=1将以下gem添加到您的Gemfile:gem'ruby-debug-ide'gem'debase'创建一个新的初始化器st