 So hello Really nice for you to show up Because it's not going to be a technical talk. So it's not going to be a flashy talk or anything But I have animations. So if that's any consolation The Vulcan driver for thing. Yeah, it's true, but on the other hand that's more important. So it's a really lesson in fertility These lights are linked. I think in the description. They only work on Firefox. So have fun Okay, let's start with that. I will tell you who I am What roughly as Raspberry Pi for us if anybody hasn't heard that a few things about at least what I think I have learned about meadow 3d I think a few things I have hopefully learned about gallium v3d variant Then this strange driver that I'm currently writing and about possible features So who am I I'm name is Andreas back my head of a github. We have a Twitter idea work at Otto That's a e-commerce company in Germany And back in 2017 I've worked at in games. So we did this this game and this game You see down here the platforms were Android and horizon, which is basically an internet switch And interesting thing is for both these platforms you in 2017 you could write your games in Well, you can render in Vulcan. So that's what actually these games did. So you had here a big Vulcan layer where you would render out and For horizon, it's a little bit different the Vulcan layers a little bit smaller and you have this NVM Which is a specialized and I think Nvidia variant Yeah, and we ship that and you can play this game now on Android and it's on the switch if you want And that's when I personally got into Vulcan or got introduced to Vulcan we were I think one of the first Vulcan games that were out there and Yeah, so what I'm doing now, I mean There's Raspberry Pi 4. So what I'm doing in the user space What I need to do basically I need to make a C API which With the help of Mesa Which implements all the things that Vulcan driver would assume So to do that, I don't want to write everything from scratch So I would like to utilize what the kernel or what in the kernel already is that's the V3D driver Which basically can handle the hardware of the Raspberry Pi 4, which is here this video cat codec 6 And yeah, that code is already there. So without that, it would be more hard Yeah, if you want to look at the source code of my patches, you can go here and see what a moron I am Or anything. I mean, I'm really starting new at this So there you don't have to have any big expectations because it's just random stuff Why am I doing that? I started earlier with that basically We have for example Raspberry Pi's at work We use them as dashboards, grumbos, we even try to use Microsoft Teams with that and what you really notice with Raspberry Pi's or the smaller PC's if you will is they don't have too much of power. So every bit of power that you can have Be it in the GPU or CPU you want to have so Personally, I would say it would be perhaps really beneficial to have Vulcan to get All the overhead from OpenGL out, but it's just a series. I don't know whether this is actually good Personally, I've just never been really fond of OpenGL. I've dealt with it a little bit But Vulcan is rather more my alley, but it's more explicit From my experience, I have most experience in C++ go and C. So basically that makes writing for me as I think doable And I have currently a little bit more than one hour of commute every day So I have free time with my hands. So hey, why not in the future? Of course the hip talk We will have here. I think tomorrow There's some web GPU and people try to do some abstractions If I heard this correctly on top of Vulcan for example So maybe it will be web GPU on Raspberry. Who knows? Yeah Raspberry 4 I mean was released 2019 has these two HDMI outputs now is a little bit more beefy Everybody has heard every complaint about it. So I will not repeat that here Basically, it should be able to support Vulcan 1.1. The CPU can actually do 64 bits the video core cannot as far as I know so Currently I even have 46 bits of the driver and I've not tested them yet but I would assume that there might be some problem somewhere because people just assume that Int is 32 bits or whatever Who knows? or vice versa and Basically the the video core is a tile renderer So we have the spinner thing which goes to the renderer and you render a tile out. I'm not the expert Not a single expert. I mean experts are sitting here. Probably who can explain it way better than me So And I thought what do I or what did I have to learn and that's basically summed up here So I started looking at that at the new hardware and was saying okay What is what's already there in terms of software infrastructure or whatever so you have here the the v3d Eric is maintaining that You have the VC4 for the video core 4, which is the Raspberry Pi 3 I Think Eric is maintaining that but I have no idea quite frankly and Then it gets interesting because if you look at the performance testing at Kronos, there is actually a Broadcom driver in there and Broadcom I have this from good sources that they internally really have a Vulcan driver But apparently they have no plans to releasing that to the public. So I don't know Okay That one I mean that's what I am doing and named it v3d vk And I'm basing that on methods 3d There is the other one Which Eric started before he left us think Broadcom and he named that v3dv I think It's also based on measure but didn't really compile as far as I remember and for the The older hardware. There's RPI vk. I don't know what the name of the guy is but at least he Continuously every few months does something on that and yeah makes some progress. I guess So that's currently what the landscape we have I'm more to that later Yeah, so what did I learn from measure 3d? I Think and I can be wrong the biggest part of measure seems to be gallium, which is basically the the open GL Yeah driver or variants. I don't know how to describe that There is a bit of infrastructure for Vulcan. It's not nearly as much as for gallium Might be intentionally. I don't know The big problem is you cannot really differentiate currently between common between gallium and between Vulcan because it's the code feels like it grew hysterically and so Basically means that a lot of common uses gallium. So you do it's really hard to write your Vulcan code Without putting gallium in it. So I think there are some cleanup on the way currently, but currently it's not really clean So and that reflects in in the built system Yeah gallium v3d supports ridicule 6 so Eric did as far as I know all the necessary changes to have basic support so Which is really good for me because I can look at the code and try to figure out what it does and port it then to Vulcan And I always said without gallium. It's really hard to get gallium outlets it You know Vulcan infrastructure What I noticed is Vulcan drivers have a monolithic Your driver private edge. I don't know what the reason for that is But it's not nice for people like me who have small has well CPU and have to recompile a whole driver each time So I did not follow that approach. I have smaller headers because I cannot really I mean I've limited time every day Having big headers is I don't know might have some reason, but it's not the reason I don't understand And some finding symbols in this gigantic header is not really fun The the last Infrastructure thing I saw was that the format Now moving out of gallium into the common. I think Not everything is outside of gallium yet, but it's slowly moving. So it's getting it's getting better. That's the good thing And I complained already today, I will complain again The problem I at least had and have to a certain degree with matter is it feels like a cult So if you're in that that's great But if you're new to that you have a problem because there is all the things you need to do or you would like to do It's not described or you just need to be in it and it's really hard to get in it But also I think people are getting aware of that a little bit more Then there's this build system I'm wearing the the basal shirt not because I think basal is so bad because I think basal is way better than meson, but Your basal is probably okay, but it's just not great isolation and all those things You really see that it's not as clean as it could be and on the other hand it works So yeah, we have to deal with that so Aside from the gallium v3d part There's also a part where is a general Broadcom library, which is not in gallium and That's basically you put XML in With a magic pison that we already heard of Then you get hell of combination units for the variants out currently I'm just interested in the latter latest. So it's not that much of a problem for me But for the v3d in gallium They really do a lot of work to support all the different generations of hardware they have Problems we have problems documented in the codes if you're really interested in how the hardware behaves It's here and there and everywhere basically. So basically what you will have to do to really understand it And I try at least is to read through all the source code and try to really pick up all the nitty gritty that some developer documented And I'm not sure I couldn't really find it. There's different documentation How ready compute already is or not and I still have to figure that out for v3d For gallium, so that's the next layer basically which uses the the method library This is I think a pretty standard gallium variant I don't know I don't understand everything from gallium. So bear with me the only thing that I found found kind of notable is that they have some macro abstraction for Setting the in this case is the dinner command Where you're not Setting the single bytes, but you rather go ahead and set set the structures And then it's a macro magic that converts that to the actual bytes Under the hood it also handles the variants so hardware specific things To me it makes the code more readable It The kind of trust that the compiler does enough optimizations for that to go away. I'm not sure I don't trust compilers So that much But it's it's okay. I think the other Really beneficial thing is to me at least who who gets new into the whole topic is that I can read the code More easily, I think and that's really beneficial if you compare it's free to Reno And they do as far as I know manual bytes and it's a little bit clumsy to read at for them The cons are to me Yeah, the macros I had a bugged once in that code or around the code and debugging with that or tracing It's not so fun, but it's doable. So yeah There's maybe some performance on the table, but I don't know I haven't measured and Open GL is this dirty flower flag implicit effect effect handling missing parallelism at times for v3d at least That's just I think open GL Implementation so it's not really that bad, but it could be improved and Vulkan is if not anything to improve on open GL. How did I start? Basically, at least I just decided where to steal code a skill code I implement what I need to change and I jumped back to two. So I steal so basically If you look at the drivers everybody is stealing from everybody I think envy was the first one. It's the first Vulkan driver and we'll slowly copying code and trying to make it a little bit Better at each iteration and that works not that bad. Let's put it that way. It's not original, but hey Myself so At times I got sick of writing code and then I was like, oh, yeah, let's do a SCM platform or the The CI so I have in GitHub. I release snapshots Have as its age to test I have the CTS Which I run periodically and I have a CI on cloud build because I don't really know how to interact with the whole GitLab CI and perhaps I should look into that. But yeah Works pretty great in cloud build So the timeline is roughly so I started in I don't know Probably somewhere summer then in the Around here I had the Vulkan info running so the basic infrastructure for reporting the features and things I had a first CTS passing in October Then of somewhere in November I set up my CI few days after that I released just snapshots and that's just no really sense or not that sensical that's put it that way and Somewhere in January at least 64 CTS passing so that's not great, but it's enough for me that put it that way We were also had to prepare a talk here. I if you remember I began working with the NV as a template my switch to turnip instead because and we has already a lot of optimizations and They are hard to translate to my hardware So when it right I'll need or rather use turnip now as my base I'm currently in trying to figure out how compute shaders work whether the infrastructure is already there or not and That will keep me busy for some time, I guess the roadmap the One or the other will have read about Igalia. So they are working since I think two months or more On their own variant of the Vulkan driver We already talked together and we will try to figure out how other people might Work on their drivers. So it might be the case that I'm throwing all the code away that I wrote that's possible If we are really lucky then we might be Interested or able to implement or move some of the code to them But nevertheless, I hope The the road forward is still more coding getting the driver Into better shape and yeah for me. It's just test suites getting them to run and Some point hopefully have a driver on the cts I would personally be really interested about having a mapping between the tests and the API calls So you could tell okay all API calls from I don't know creating pipelines or anything are done so that part of the API is just Should work as intended So yeah, and with that I try to breathe through all of that and No questions, please Sorry Yeah, no No, I could what I could do is I could show you If all goes well how the the cts runs, but that's not really interesting. I think so no on that explicitly thing that I Have a different approach. So the Igalia guys If you have seen the news they have a triangle rendering so I don't care about rendering I only care about testing so For me it was like I don't care if I need five years for that. I don't need or ten years I just want to learn about these things. So I'm more about okay I will use the tests and try to comply with the tests and try to figure out what I have to do to A piece of tests or a piece the APIs Yeah, I think it should be there The Yeah, so the question sorry was whether the the cts or my question was whether the the computer shader was already in place and The the comment was that it has to be in place because open GL is 311 needs them anyway And I think that's correct The other way around is that the documentation is not correct. So Probably one of the documentation problems Yeah, sure so the question was how many many mandates I have put in it a completed driver so Then the question is rather how long we will we probably take for a completed driver and the news from The the Raspberry Foundation was don't hold your breath And I think that's realistic. So there's pretty good chance That this might take a year and I think a year might be realistic since the digalia guys work full-time with two people on that So if we already get a few other people Into that part-time or whatever. I think a year might be realistic not full-fledged feature but I think Workable perhaps. I don't know open arena. Let's say open Rena should be doable in a year Yeah Oh So the question was whether that work is any good for any older versions and the answer is Maybe So there's currently a lot of handling in the gallium v3d and at least in my code I threw all that out. So if you would integrate Simpler handling in the Vulcan it might be actually The other thing is I think there's hardware wise one or two things that are not sufficient for the Raspberry 3 So it might not be totally there, but perhaps enough fish. I don't know on the other hand There's this RPI vk driver Which is not based on Mesa and I think May it may be doable if you get that person for example interested in doing that then there may be some progress. Yeah anyone else So if I understand correctly of whether I developed with a Raspberry Pi or Yeah, sorry. Okay, the question really was whether I commute with a Raspberry Pi and I have thought about that But no, I that was in a slaw here I have SSH access through my firewall and I execute that remotely on my Raspberry So, yeah, it works and time's up. So thanks