[HN Gopher] How to write a Vulkan driver in 2022 ___________________________________________________________________ How to write a Vulkan driver in 2022 Author : mfilion Score : 56 points Date : 2022-03-23 18:56 UTC (4 hours ago) (HTM) web link (www.collabora.com) (TXT) w3m dump (www.collabora.com) | shmerl wrote: | Nice, will this code become the basis of actual nvk for Nvidia | Vulkan driver in Mesa? | sylware wrote: | Hard truth: vulkan is so lean, it almost does not need any shared | code between hardware vulkan drivers. | Jasper_ wrote: | It's quite lean, it requires a lot less code than OpenGL does! | But it does require some -- partly because there's some cruft | left in the spec, but also because there's _always_ some work | that can be shared. SPIR-V and NIR being the big ones, everyone | needs a shader compiler, and a good chunk of the work around | that can be shared. And then the stuff on top of that like | pipeline caches. That 's stuff where the spec got it right, but | just everybody needs some infrastructure. | | There's also things like subpasses, which, if you _can_ ignore | it, you can just use a "default" implementation that acts like | a desktop immediate-mode GPU and ignores subpasses. Not always | appropriate for a mobile GPU or a tiler, where subpasses are | meaningful to you, so it's provided as an optional helper. | | Then there's just leftover spec mistakes like VkFramebuffer, | where the spec is just thicker than it should be. That's fixed | in future spec versions but someone needs to implement the old | way. | sylware wrote: | VkFramebuffer is gone in future versions or vulkan? By what | was it replaced? (I am being lazy here, asking instead of | going to read the latest specs). I coded my everyday video | player using vulkan (very conservative), I would move my code | to this new thingy once it's in mesa. What I liked with | vulkan, on the main thread of my video player, I just post | vulkan non-blocking commands, I don't even need a video | thread! I can even use the main thread to mix fast enough the | audio data! | | NIR is a sweet spot for me (lean C89 code with benign bits of | c99/c11), even though I would like a configure "switch" to | remove all non-breaking algebraic optimizations from the | vulkan drivers (I used to do that myself for a good while, | near 0 performance impact) since it is redondant because | those should be directly done in spir-v code. | | Since I am an AMD user (I play video games, now all the ones | I play have a vulkan backend), even if I really dislike a | bloody lot c++, I am grateful to valve for ACO (because llvm | is beyond toxic, even from a c++ point of view). But I wish | ACO would manage to add the possibility for hand-coded | assembly shaders (AMDGPU ISA is public and really ez to | code), just need a few relocation types (writing an assembler | should not be a nightmare like with hw architectures using | bazillions of relocation types). | shmerl wrote: | Congrats to Mesa on reaching the level when some like Imagination | are already seeing benefits in making an open Vulkan driver. | tlamponi wrote: | Collabora has IMO some nice work going on, development and | educational wise. | | Also, I'm getting some strong hints about getting a vulkan driver | for nvidia soonish, would be nice! | mhh__ wrote: | The Mesa codebase does feel quite weird from afar but it would | fun to contribute. I know compilers but not much about graphics. | | Unfortunately I don't have a box to try wacky drivers on so that | may block my efforts to embarrass myself in one more domain. | Couldn't tell whether they test in VMs or physical boxes (or | userspace?) | shmerl wrote: | You can simply build it on Linux and test (you can use it | without packaging anything). It's separate from kernel drivers. | | Configuring the build with Meson might look a bit intimidating, | but you can find examples by checking how distros configure it. | | For example on Debian you can see this in the build log: | | https://buildd.debian.org/status/fetch.php?pkg=mesa&arch=amd... | | Search for | | LC_ALL=C.UTF-8 meson | dyingkneepad wrote: | The Mesa driver is all in user space, it's simply a library. | You can develop it without messing with your system or any of | the applications that are generally open. | | Developers can just build and install them to some user- | controlled directory (e.g., $HOME/opt) and run from there with | LD_LIBRARY_PATH and other similar variables. You can wrap all | the variables in a script and run your custom-built mesa with | simply "$ with-custom-mesa glxgears" and then glxgears will be | using your custom (and possibly broken) driver, while | everything else will still be using the default drivers from | the distro. | | You could use containers such as systemd-nspawn, but it's much | more complicated than simply using $HOME/opt. | | Edit: https://docs.mesa3d.org/install.html#running-against-a- | local... | corysama wrote: | I heard it said that OpenGL drivers are essentially run-time | compilers :) Working on a driver like this would not actually | involve much knowledge of graphics. It's more an exercise of | careful spec interpretation and deep knowledge of hardware- | level interface. | | Have a read through | https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-... | and see if you'd find that space interesting to work in. ___________________________________________________________________ (page generated 2022-03-23 23:00 UTC)