您的位置:首页 > 编程语言 > ASP

Vulkan Driver for VC4(Raspberry Pi 3b) base on mesa

2020-10-25 22:40 676 查看
作者:Yaong
出处:https://www.cnblogs.com/yaongtime/p/13875596.html
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任   这是一篇关于在raspberry Pi 3b上移植实现vulkan 驱动的文章。 经过一段时间的代码搬运,终于实现了零的突破,可以在树莓派3B上运行Vulkan triangle/texture。当然目前的情况是,仅仅能运行这两个demo,很多API都未实现,实现了的API也还有一大堆bug,总之这只是一个开始。   之所以会在选择raspberry pi 3b是移植vulkan driver,是因为近段时间在学习GPU drivers(Mesa + DRM/KMS ),加之树莓派的GPU驱动是开源的,GPU硬件数据手册也是开源的,这有利于新手学习相关知识。   这份移植的Vulkan驱动代码目前只涉及到Mesa部分,kernel驱动代码没有改动,所以后面提到的代码均是在Mesa中。 这份Vulkan驱动代码99.9%都是从v3dv、 tunip、vc4、lavapipe中复制粘贴过来的。v3dv是raspberry pi 4的vulkan驱动,目前还没有合并到Mesa的upstream中(现在已经合并进去了)。tunip是对高通GPU的反向编译后实现的开源vulkan的开源驱动。vc4就是raspberry pi 3b的OpenGL ES 2.0实现。lavapipe是Mesa中vulkan的软实现。   Raspberry pi 3b上的GPU VC4只支持OpenGL ES 2.0,硬件上是不能完全支持vulkan的。所以不少vulkan的特性在Raspberry pi 3b是实现不了的。 在我开始做这件事之前,已经有外国牛人实现了Raspberry pi 3b的vulkan驱动,做这件事也是受到他的启发,请参考:https://github.com/Yours3lf/rpi-vk-driver。在看到相关报道前,我是沿着OpenGL ES 2这条路在分析vc4的代码。许多代码经过反复琢磨后也确实能看懂,但是终究缺乏动手的过程,再加上被其他事情稍微耽误一下,就忘了,比如寄存器分配的算法,现在就忘得的差不多了。所以在看到有人在Raspberry pi 3b上实现vulkan驱动,让我也萌生了动动手的想法。而且我发现老外的实现上少了glsl的编译,说明是可以有事做的,不用又只能分析别人的代码。   在这之前完全没有接触过vulkan,所以一切从零开始。还好随着学习vulkan知识后,发现vulkan和OpenGL很多东西是相通的,所以之前的学的OpenGL知识帮了很大的忙,vulkan的API学得也还比较顺利。但是像memory barrer、subpass一些vulkan独有的概念还是花了不少时间去理解。   回到代码部分。 如前文所说,绝大部分代码是复制粘贴过来的,所以代码里不出意外的话应该潜藏了不少的bug,以及很多查询类API会返回不符合硬件属性的值。目前能运行的demo是来之SaschaWillems在发布在GitHub上的测试代码https://github.com/SaschaWillems/Vulkan。   如果有兴趣想尝试一下,可按如下方法搭建环境。 首先说下我的环境。 我当前的这个系统环境已经使用了很久了,所以已经记不得装过那些编译工具和依赖库,这里给一个ARCH LINUX上的依赖列表:https://www.archlinux.org/packages/staging/x86_64/mesa/。后续有时间,可以从头走一遍,把需要的依赖编译工具和依赖库记录下来。所以下面给出的搭建步骤很可能是不完整的,现在偷个懒,后续有时间再补上。 我在raspberry pi 3B 上安装的是arch-linux来之Arch Linux ARM 社区,可以通过这里获取:https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3#installation   ~> uname -a Linux alarm 5.8.9-2-ARCH #1 SMP Tue Sep 15 00:48:59 UTC 2020 aarch64 GNU/Linux     代码下载: git clone https://gitlab.freedesktop.org/Yaong/mesa-vc4-vulkan.git   我所使用的编译mesa脚本: #! /bin/bash   GALLIUM="v3d,vc4,freedreno"   meson . _build \     -D prefix=path/to/install \     -D buildtype=debug    \     -D b_lto=false \     -D b_ndebug=false \     -D platforms= \     -D gallium-drivers= \     -D dri3=disabled \     -D egl=disabled \     -D gallium-extra-hud=false \     -D gallium-nine=false \     -D gallium-omx=disabled \     -D gallium-opencl=disabled \     -D gallium-va=disabled \     -D gallium-vdpau=disabled \     -D gallium-xa=disabled \     -D gallium-xvmc=disabled \     -D gbm=disabled \     -D gles1=disabled \     -D gles2=disabled \     -D glvnd=false \     -D glx=disabled \     -D libunwind=disabled \     -D llvm=disabled \     -D lmsensors=disabled \     -D shared-glapi=enabled \     -D valgrind=disabled \     -D glx-direct=false \     -D open ad1 gl=false \     -D prefer-iris=false \     -D shared-swr=false \     -D swr-arches= \     -D vulkan-drivers=vc4,broadcom   ninja -j 8 -C _build && ninja -j 4 -C _build install     Vulakn demo编译:   Download: git clone --recursive https://github.com/SaschaWillems/Vulkan.git git submodule init git submodule update python download_assets.py   Depends: pacman -Sy vulkan-icd-loader   Build: cd Vulkan mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_D2D_WSI=ON .. cmake --build . --target all -j 6   Test: export VK_ICD_FILENAMES=path/to/install/rpi-vk-driver.json sudo ./bin/texture or sudo ./bin/triangle   运行效果:  

 

 

因为这是第一次尝试写开源软件,虽然绝大部分代码不是我写的,相关的代码也有版权申明,但是我自己增加的少数代码,我目前还不知道该怎样正确的申明版权,所以我自己增加的文件,就随便复制了一段Copyright,后续会学习一下这方面的知识。当然,我的主要目的不是维护自己的版权,而是不希望乱用了别人的版权,以引起其他不必要的误会。   所以后面还有很多的事要做,当然我也不知道最终能做到怎样的一个程度。 祝我好运吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: