WEBVTT

00:00.000 --> 00:15.440
Okay, thank you for attending this talk. My name is Juan Suarez, I'm a sobering

00:15.440 --> 00:21.000
generator working at the area. It's typically in the graphic steam where we are working

00:21.000 --> 00:29.960
mainly on driver developments. In my case, I've involved with MSA for since 2016, I was

00:29.960 --> 00:36.440
10 years, well, 10 years out of 3. First, involved with the interdrivers, with all I-965

00:36.440 --> 00:43.080
drive, which is now totally degraded, and later moved to work with the Raspberry Pi drivers

00:43.080 --> 00:53.400
with Chema in the Raspberry Pi 1 to 5, and I've been working a ringman a year for several

00:53.480 --> 01:02.840
misoblices. So, what's the motivation of all this talk? Well, maybe during the years, there was

01:02.840 --> 01:10.520
several talks, this kind of topics related with Mr. For instance, the words like talks about

01:10.520 --> 01:15.560
status updates on the drivers like Chema did now, and there was some talks about the

01:15.560 --> 01:20.520
pretty components of Mr. Like the one that faced this morning, but actually there was never

01:21.480 --> 01:27.640
you know, you talk about exactly what is Mr. And I mean, I know that probably a lot of people

01:27.640 --> 01:32.600
are already know how what is Mr. But in the graphics, there are probably people working with

01:34.200 --> 01:41.080
and there that doesn't know exactly how Mr. What's behind colors. So, equally interesting to

01:41.080 --> 01:47.560
explain them, not so to the brother Owens in the internet, that is watching this talk. So,

01:48.520 --> 01:54.120
that's the reason why we are giving this talk, and hopefully at the end, you get a better

01:54.120 --> 02:00.040
year how Mr. Works, and if you are not contributing to Mr. Maybe you are getting motivated

02:00.040 --> 02:07.640
for you to contribute. So, this is more or less the outline of the talk, we are going to start with

02:07.640 --> 02:13.640
a spend difference between users, paying some current space drivers, which is part of the

02:13.720 --> 02:20.440
repair and for Mr. Then Abit of History. So, we have this, Mr. What is the, why Mr. Is,

02:23.000 --> 02:30.680
has the key to have nowadays? Then Abit of technical discussion on what is the architecture,

02:30.680 --> 02:36.280
the main components, showing us more than a sample of what happens, we had curtains like when

02:36.360 --> 02:43.000
you draw something, what is happening until the pixels end up, so in the display.

02:44.440 --> 02:49.960
And then at the end Abit of, like, how we are in Mr. Testament, all of these things,

02:49.960 --> 02:53.960
and how you can contribute and for conclusions. So,

02:56.920 --> 03:02.680
different between current space and the user space driver. Well, when we used to think

03:02.680 --> 03:08.040
out of the driver, we think about this very small piece of code that is running on the

03:08.040 --> 03:13.640
corner, and that basically helps to interact with a hardware like this, or if you be a driver or

03:13.640 --> 03:20.840
whatever. And in the case of GPUs is not different, I mean, in the case of GPUs also you need a

03:20.840 --> 03:28.360
driver to handle the, to interact with the hardware itself. The big difference is that the

03:28.920 --> 03:35.960
GPUs are really, really big monsters. These are very complex devices to, to work with.

03:36.920 --> 03:43.000
Just in a sample, you check the programming manual of the internal skylic, which is a GPU

03:43.000 --> 03:50.040
from 3 years ago, and there is not much, much powerful one in the market. Yeah, basically,

03:50.040 --> 03:56.280
the, this, the, the, the performance is like six, how some page long. So, and there is a lot of

03:56.360 --> 04:02.600
multi-taste like, uh, if you do this, you don't do that, a lot of, uh, iterations, a lot of

04:02.600 --> 04:09.080
virtual multi-taste that makes very, very complicated, uh, for, probably, however. So,

04:10.360 --> 04:15.960
now what they want to do, that, I mean, if you want to write a very, very specific application for

04:15.960 --> 04:21.480
a very, very specific device that does very, very big things, you never are going to use the,

04:21.560 --> 04:26.440
do it, however, directly. Right, what you want to do is, what you're application, using a

04:26.440 --> 04:34.120
one-long API like up in jail, full-con, whoever, and then let something, some part of the,

04:34.120 --> 04:41.480
so, well, you don't want to implement to deal with a hover. And basically, this is where Missa

04:42.280 --> 04:49.320
enters. Missa is a framework that helps to write drivers that resize an user space,

04:49.960 --> 04:57.880
and the main objective is to translate this, OpenGL, API Vulkan API to something that

04:57.880 --> 05:02.680
then can be switched to a counter, something that is very specific for each of the GPUs.

05:05.320 --> 05:12.360
Usually, uh, there is like, uh, as a middle, we depend on the pattern, it's a GPU.

05:12.360 --> 05:16.760
Usually, uh, we have different drivers inside Missa, but covers different GPUs.

05:17.400 --> 05:24.520
Uh, usually, I mean, it could be that you have like different drivers for the same, uh, family,

05:24.520 --> 05:29.000
for instance, the work case that we're going to apply, um, uh, devices, which is missing growth

05:29.000 --> 05:35.880
common GPUs, or, uh, for Braco, for the GPUs that runs in the garage, we apply 1 to 4 to 3.

05:35.880 --> 05:40.840
There is a, uh, driver, and then for four or five, it's a different drive, why? Because,

05:40.840 --> 05:45.320
basically, because a, what is the same growth common GPU, even in the same family, they can be,

05:45.400 --> 05:50.040
big difference. Sometimes, uh, we need to deal with, with, uh, with different drivers.

05:52.360 --> 05:56.120
Um, uh, what, also, because, uh,

05:56.120 --> 06:03.160
highly, helpingGL, uh, API is quite different from, uh, family, Vulkan API, so you have two different drivers.

06:03.160 --> 06:07.000
We have basic, are assigned the same code, because, uh, the end is, at the same power,

06:07.000 --> 06:10.600
is a workbed by four for instance, the power, but they are separated.

06:11.080 --> 06:17.400
So, uh, message, as I say, it's a, it's a, it's a framework, because you write the drivers,

06:17.400 --> 06:22.520
and you want to know because they provide a lot of tools and utilities and everything you need,

06:23.400 --> 06:29.640
uh, to implement, uh, the driver makes the life easier. For instance, uh, you need to compile shaders.

06:30.200 --> 06:37.000
So, uh, compile is, uh, it requires a lot of steps and things like that, and well,

06:37.160 --> 06:41.720
this provides like a, shape, compilation, compiler, um, and see that.

06:44.600 --> 06:52.840
So, uh, do we talk about how miss, uh, uh, uh, uh, is, okay, like is, let's do a bit of history.

06:53.720 --> 06:56.440
Uh, so miss is started in, in, start to work in,

06:57.000 --> 07:02.120
was worked in, sorry, by Brian Paul, which is still contributing to miss, uh, in 1993.

07:02.680 --> 07:07.960
Uh, the first release was in 1995, and it was, the real was, okay.

07:08.760 --> 07:14.200
Let's take an up in jail, one point single application, and translate all the, the P.I.

07:14.600 --> 07:20.600
to something like I can see in the exam, right? Uh, so basically it was translating all the P,

07:20.600 --> 07:26.360
up in jail to cause text sleep. So basically, we can show the index server. So in this sense,

07:26.360 --> 07:32.040
the first version of the miss was like a sober rendering, and the reason was because

07:32.120 --> 07:39.640
I mean, uh, in the 90s, there was no GPUs available for consumers. I mean, the GPUs were

07:40.680 --> 07:46.600
quite expensive, uh, devices, uh, it was like a silicon graphics, uh, devices were quite expensive.

07:46.600 --> 07:54.520
So not for, probably, but allow people to deal and try up in jail in jail, uh, normal, uh, PCs.

07:55.160 --> 08:05.000
But it's still not, uh, it's not, uh, sorry, it's not, uh, how about the latest? Then, in 1997, 1996,

08:05.000 --> 08:11.240
I don't know, it's at the end of the year, the first, uh, GPU car in 10th floor in market, was the,

08:11.240 --> 08:18.040
the 3 px blue. And, uh, well, it didn't, what, did you, what's the, you see up in jail,

08:18.040 --> 08:25.880
but, uh, private library was called Blight. So it was, uh, quite, uh, interesting to,

08:25.880 --> 08:31.640
basically, like with translate the opinion to a sleep was using the right opinion to use the

08:31.640 --> 08:39.560
life. So in the sense, uh, this was in miss, uh, 2.2, and it was like the first popular

08:39.640 --> 08:45.240
oping yell, uh, drive it, it was a serrated. So people can use oping yell applications,

08:45.240 --> 08:54.360
I was real serrated. Still, uh, it was a wrap, I mean, the visa didn't access the hard work

08:54.360 --> 09:05.240
directly, it was like a user, uh, a private library. And, uh, so yeah. Then, in 1999, another milestone

09:05.880 --> 09:10.200
was the inclusion of the, which is the, the interface, which is basically allowed now, it allows

09:10.200 --> 09:15.960
to, uh, access the network to the, to the hardware, it's only the, uh, uh, wrapper, um,

09:15.960 --> 09:23.720
perpetrator, perpetrator, wrapper. And the first, uh, device was the, again, the 3d, f blue,

09:24.520 --> 09:31.320
but, uh, I mean, with, I started to appear a lot of, of, of, of, uh, driver for different brands,

09:31.400 --> 09:38.440
was the matters. Intel was for, for him, D for the, all 80 rage devices, uh, 3d labs. I mean,

09:38.440 --> 09:45.720
work, what do you guys, I mean, so, uh, feel them. So, what was the situation now? Well, first

09:45.720 --> 09:54.920
we were, uh, in 2008, sorry, 2008, this is the, it was like, we have oping yell, which have multiple

09:55.000 --> 10:04.520
versions. We have multiple drivers, uh, oping yell, uh, is, uh, white, heavy, uh, API,

10:04.520 --> 10:08.920
what you're, why do you, because you have a lot of, states, a lot of things. And,

10:08.920 --> 10:12.760
I mean, you're a lot of, I mean, it's very, we need to work on the song. And,

10:12.760 --> 10:18.920
probably a lot of, they are, all of the same problems in, it's rubbish. So, and I, in this moment,

10:18.920 --> 10:24.840
it was, Gallium was introduced, which basically tries to abstract, uh, all the common parts

10:25.800 --> 10:33.480
are requested in, uh, in oping yell. And just let it's drivers to a specific job, uh, that all,

10:33.480 --> 10:44.920
that it pays, actually, to, uh, to the, to the GPU, but on the GPU. Um, now there's, I mean, all the

10:44.920 --> 10:51.240
drivers are using Gallium, all of them. I mean, uh, no drivers, no issues in the, uh,

10:51.320 --> 10:57.320
impending the oping yell, that's using Gallium. So, this, this is a very important, uh, moment,

10:58.120 --> 11:06.920
of, of the history of Mesa. Then, well, uh, the next was, like, in 2016,

11:07.800 --> 11:13.560
I, I purified, uh, the, uh, bull can driver, which was Ambil, which was,

11:13.640 --> 11:22.200
implemented as a wife bed. Uh, it was in, uh, in Mesa 12. And, but sooner, I mean, after that,

11:22.200 --> 11:26.680
it was, uh, it was, uh, it was, uh, it was, uh, it was basically the driver for the, you can drive for

11:26.680 --> 11:36.360
Ambil details. Uh, uh, so, so, so yeah, so now, what happens nowadays? Well, the, the current

11:36.440 --> 11:41.720
missile, basically supports multiple APIs. I mean, the, well, no are oping yell,

11:41.720 --> 11:47.880
oping yell is in all their versions. But also it's bulka, but it's also oping yell,

11:47.880 --> 11:54.520
and there are also older APIs, like op, uh, V8 API, which is a video series and a yell.

11:55.320 --> 11:59.720
We have multiple drivers for multiple devices, like, uh, for instance, I use a

11:59.800 --> 12:06.520
corpus, which is for Intel, uh, however, or the own C, which is for NV and wall, which is for all, um,

12:06.520 --> 12:14.360
NVIDIA hardware, then, uh, for Males, uh, qualcomm devices, uh, there is for, uh,

12:14.360 --> 12:20.680
uh, bracco, bbante, as I think, which is for the, basically, for I, uh, appeal M1 GPUs.

12:22.200 --> 12:27.960
Then we have, also book, a lot of different book and drivers, again, for, uh, Intel, for, uh,

12:28.680 --> 12:37.880
MD, NVK, which is, uh, in writing in rust, is for, uh, on the newer, newer, uh, for NVIDIA

12:37.880 --> 12:46.040
hardware, uh, PNBK, which is, uh, for bali, uh, bracco, again, qualcomm, chronically, which is, uh,

12:46.040 --> 12:52.840
the murka implementation for the appeal, uh, PN1 GPUs, uh, popular, and so on.

12:53.800 --> 12:59.560
We have also, so we're editing, uh, which basically remains, uh, OpenGL, uh,

12:59.560 --> 13:04.760
and Vulkan, uh, in case you don't want to use there, the, the, the hardware, uh,

13:04.760 --> 13:08.040
hardware, basically, because maybe we don't have, uh, GPU, but you need to run

13:08.040 --> 13:11.640
Vulkan application, in this case, and then pipe and lava pipe,

13:11.640 --> 13:17.080
was, are the most efficient ones. So, uh, because there, because it's like a, uh,

13:17.080 --> 13:22.680
reference driver, what you want to, and it's like, uh, first of all, and then

13:23.640 --> 13:27.800
something very interesting is, are the ledger drivers, which are, like, drivers that

13:27.800 --> 13:33.080
works on top of other drivers, for instance, the, well, the most common, well, no,

13:33.080 --> 13:38.440
is sync, which basically, uh, influence OpenGL on top of Vulkan. I think,

13:38.440 --> 13:44.520
interesting, because, for instance, in the new NVIDIA, GPUs, we only have NVIDIA driver,

13:44.520 --> 13:49.320
which is Vulkan, but then you use sync on top of NVIDIA, so you get for free,

13:49.400 --> 13:52.760
OpenGL drivers working on the GPU, uh, on NVIDIA GPUs.

13:54.600 --> 14:01.160
Same thing that we have, uh, OpenGL on top of, uh, during, during 3D, for Windows,

14:01.160 --> 14:06.920
we have Cosmic Reef, which basically, uh, supports Vulkan on top of metal, so you have, uh, uh,

14:07.880 --> 14:14.360
you can run a Vulkan in, uh, any, uh, Apple device. And then what,

14:14.920 --> 14:22.760
we see here, OpenGL, um, um, um, um, um, sort of, um, Vulkan on, uh, virtual machines, like,

14:22.760 --> 14:28.360
for instance, venues is like, you can't run, Vulkan is a virtual machine, uh, it's oscillated

14:28.360 --> 14:36.600
because the, uses the host GPU. There is also said, uh, OpenGL, which is, nowadays,

14:36.680 --> 14:43.960
Rustysiel, uh, the area is, uh, that you have, uh, your driver, OpenGL driver is, uh,

14:43.960 --> 14:48.680
implemented, which is using Galium, uh, you support the required, uh, uh,

14:49.080 --> 14:53.880
implemented requirements, let you get how, hopefully, our PC driver. And then,

14:54.840 --> 15:00.120
something, when you, is to flow, which is basically a tens of flow, late, delegate,

15:01.080 --> 15:05.400
that, uh, lots to use, there's a flow to run, they have a little, uh, AI, uh,

15:07.160 --> 15:11.800
application, uh, in this game, we have this, uh, MP, like the Roxia, P-Vanti,

15:11.800 --> 15:17.000
and they're, they are, they're also based on Galium, so basically it means that you need to implement,

15:17.000 --> 15:22.280
they think, uh, function to a Galium requires, and then you can use these devices to, uh,

15:22.280 --> 15:25.320
to accelerate the, the, your, the, your AI work.

15:27.880 --> 15:35.640
Now, uh, so let's see the components of this. Uh, this is, uh, simplified diagram, um, uh,

15:35.720 --> 15:40.600
I just want to talk to the tells, uh, that's it, a lot of, uh, parts that are not,

15:40.600 --> 15:46.600
interesting for this, I mean, for this stuff, because I mean, we have no, much time, um, so,

15:48.040 --> 15:52.760
first of all, we have the OpenGL, and we can application, right? And the first thing is that,

15:54.200 --> 15:59.560
these applications are not going to be linked against your driver, right? Basically, they use

15:59.640 --> 16:07.960
all of them, and the post of the loader is to find the proper driver, and then, uh, hook the, uh,

16:07.960 --> 16:12.360
directly, they make the, the operations, the OpenGL functions, to the specific driver.

16:15.560 --> 16:19.160
They have the advantage that you run the pick, you create the applications, and you can,

16:19.160 --> 16:24.680
will choose different, uh, GPUs to run your application, I mean, the, the, the, the,

16:24.920 --> 16:29.560
rather, we choose the, there's one for you, but you can change it, or you have multiple GPUs,

16:29.560 --> 16:34.840
you can choose, okay, I want to, with this, this application, like, this other, this application.

16:37.320 --> 16:46.680
So, um, then, on the left, we have the, uh, the OpenGL driver, right? And as you can see,

16:46.680 --> 16:52.360
is, uh, much more complex than they look on the right. And the reason is, because OpenGL is

16:53.320 --> 17:03.000
for the 90s, it's a very, very old, um, API, and when it was created, it was like, um, GPUs were thought,

17:03.000 --> 17:11.960
like, uh, machine states, right? And, uh, OpenGL was designed without in mind, and that design,

17:13.800 --> 17:19.880
kept until this days, uh, and what I mean with, it's a machine world, just, basically,

17:19.880 --> 17:24.760
means that for instance, you want to draw, uh, you want just to take a, uh, texture, sample,

17:24.760 --> 17:30.040
I'll draw it in the frame buffer. There is no, I mean, that operation is not explicit in the

17:30.040 --> 17:34.280
sense of that, you don't have a function to say, but you pass the texture, you pass the frame buffer

17:34.280 --> 17:40.760
and the wrong, rather, the, the procedure is, you buy a texture in, in the OpenGL. So,

17:40.760 --> 17:45.320
you need to think that, OpenGL is a steam machine, transitory, you just taste the word, now I have a

17:45.400 --> 17:50.840
texture bound, right? Then you bind with another operation or another call to OpenGL,

17:50.840 --> 17:55.080
you bind the frame buffer. Now again, I have another state where I have, uh, a, uh,

17:55.080 --> 18:00.920
frame buffer and I have, uh, texture. Now, any present, uh, you're going to go into the, from

18:00.920 --> 18:06.360
the moment on, we'll be, use this two bound, these two bound resources. So, now you say draw,

18:06.360 --> 18:12.120
or whatever, or sample. And we, this, this, this, this, this, this resources,

18:12.200 --> 18:15.640
you want to change the frame buffer, you need to undo another operation and they,

18:15.640 --> 18:21.080
away, or another transition and other, OpenGL. So, there are a lot of states, uh, that need to be

18:21.080 --> 18:27.880
carried. And the other problem is that, did you really openGL spec? I mean, like, this is,

18:27.880 --> 18:32.200
happy to say, OpenGL will come in. In order to execute operation, you have to, uh,

18:32.200 --> 18:36.920
much sound preconditions, right? For example, you want to sample a texture, you need to have a

18:37.000 --> 18:42.200
texture bound because otherwise you can sample it. And the openGL spec is very,

18:43.080 --> 18:48.520
specific about if you don't have something, the error you need to do. I mean, you can,

18:48.520 --> 18:53.480
I mean, it's not like, okay, if, if something doesn't fulfill, whatever can happen, no, no,

18:53.480 --> 18:59.480
it's say, okay, if you don't have this collision, that you need to write this specific error. So,

18:59.480 --> 19:01.560
it's, it's, it's, it's, it's, it's, it's, it's, it's, it's, it's, it's, it's, it's, it's, it's,

19:01.560 --> 19:07.240
because a lot of pages are just saying, the, all the errors you need to submit when there's something

19:07.240 --> 19:12.920
that's in, uh, it's not fulfilled. So, this means that a lot of time, a lot of,

19:12.920 --> 19:19.160
such as are spent validating that you can execute the operation and the portable errors.

19:20.760 --> 19:26.440
So, a lot, again, all of these stuff is, it doesn't matter if you are running, you'll be,

19:26.440 --> 19:32.200
I, MD, or the only, I'm 30 P.U. So, I mean, you need to do that. And all of this part is quite common.

19:32.200 --> 19:39.240
So, that the reason, uh, why the half is, uh, quite complex, uh, part.

19:40.520 --> 19:49.480
Yes, assuming it, I read, uh, there are like, uh, uh, a first layer, which is, this,

19:49.480 --> 19:53.240
come from, I mean, from the older versions, this is like a very thin layer, which is,

19:53.320 --> 19:59.160
basically like, it's the end, end to the point for the open-year, uh, API.

19:59.720 --> 20:05.800
This layer is quite thin, uh, basically what it does is kind of, uh, validate that you can't

20:05.800 --> 20:11.320
run the operation. I mean, all the conditions are, uh, fulfilled. And then, if it, it happens,

20:11.320 --> 20:17.160
then, move to value, which is the, this, uh, has all the complexity of this state,

20:17.160 --> 20:23.640
state machines, and things like that. So, the way it's work is like, when you run your driver,

20:23.640 --> 20:29.560
like, it's driving, basically you, uh, I'm going to, uh, create a structure for, for

20:29.560 --> 20:35.720
volume. I mean, this is, there's, uh, API to that, actually like that. And then, basically,

20:36.440 --> 20:42.280
this volume provides like hooks that you need to just implement them. And these hooks are,

20:43.160 --> 20:49.880
specific parts for your driver, uh, to, um, they're going to call, sorry, uh,

20:49.880 --> 20:54.280
Gary is going to use, just when something, it really depends on your driver,

20:54.280 --> 20:58.680
I also, sorry, sorry, JP, I mean, for instance, you are going to draw at the end,

20:58.680 --> 21:04.120
Julie, to use the GPU. So, there will be a hook for driving when all the state machines and all the

21:04.200 --> 21:13.560
things are managed. Uh, also the drivers provides like capabilities. So, they form, like,

21:13.560 --> 21:20.920
what kind of features they support. So, Gary can decide what to do depends on their, uh, for instance,

21:20.920 --> 21:27.560
is the way of, Gary, you say, okay, I'm supporting OPNGL, C.1, because my, uh,

21:28.440 --> 21:36.200
back end, my user space driver is telling the, I support this kind of features. But at the end,

21:36.200 --> 21:42.520
the mean work is done in, in the, in the volume part. Then in the right part, we'll have the

21:42.520 --> 21:47.720
hook and drivers. I mean, this is, is much more simple, because hook and listen, what an API is,

21:47.720 --> 21:57.480
is explicit. And, uh, there is no validation in the sense that, I mean, API also helps

21:57.480 --> 22:03.560
on requirements, like, you need to help this, um, this, uh, fulfill this requirements in order to

22:03.560 --> 22:08.840
execute the operation, but they will partner and they say, if you don't do, whatever can happen.

22:08.840 --> 22:13.720
I mean, if that not date to validate, it's, the, the user need to validate, ensure that everything

22:13.720 --> 22:19.800
goes, uh, is, uh, is correct. So, it's hard to, you have to, you don't support that, you can,

22:20.040 --> 22:26.520
um, uh, happen that you can attach or if you reset or if you have, or whatever. I mean,

22:26.520 --> 22:33.160
fortunately, I mean, uh, it's, what difficult to implement, uh, implementation and no half errors.

22:33.160 --> 22:39.560
So, in the case of, uh, Vulcan, the recent intermediate layer, which is called, um, the validation layer,

22:40.120 --> 22:45.240
which, uh, sits between the Vulcan role and the Vulcan drivers, basically, what it is like,

22:45.560 --> 22:52.280
when you call a Vulcan, uh, function, this validation just intercept the, the call and basic

22:52.280 --> 22:58.040
tracks all the states and it's ensuring that you fulfill all the requirements and it's not,

22:58.040 --> 23:04.280
it will tell you, okay, you are in, uh, fulfill this requirement and if you, even, uh, tips

23:04.280 --> 23:09.400
about, okay, you are doing this, but it's not very performant, say that. But the, the point is that,

23:09.400 --> 23:14.760
all these validation things is not done by the Vulcan driver. So, it's just implement,

23:15.240 --> 23:18.520
faster when you're running in production, uh, the applications.

23:20.360 --> 23:26.040
Still, I mean, uh, uh, there is some parts that are like common for instance,

23:26.040 --> 23:33.320
still, you need to create like a dispatch table, which basically is like, uh, uh, the, when the

23:33.320 --> 23:41.000
Vulcan function should, which function should call from the driver itself. Uh, I hope all the

23:41.080 --> 23:48.440
Vulcan will be changed, uh, but, uh, change, or the calls, uh, for instance, uh, uh, there are

23:48.440 --> 23:54.760
like, uh, common for recycling, but we can't raise the Vulcan buffer. So, uh, the Vulcan run

23:54.760 --> 24:03.960
times utilities, basically is like a common service, uh, it's in quotes, uh, it's not a service,

24:03.960 --> 24:09.000
uh, what service. But, uh, it's something that it really can use to, uh, make it through life,

24:09.080 --> 24:12.120
is sure for instance, I don't know. Uh, I'm thinking now, uh, for instance, time nine

24:12.120 --> 24:16.920
semaphores, which can be provided through the Vulcan. So, the duty, but that, if you don't support

24:16.920 --> 24:23.560
that, it can be prevented using this normal semaphores. And, uh, so, yeah, so you can do that.

24:23.560 --> 24:29.160
Um, nowadays, I mean, all the drivers are using this, uh, this Vulcan run time, because make,

24:29.160 --> 24:34.120
really makes the life easier because, uh, quite a lot of little things are handled by this

24:34.280 --> 24:43.000
one time. Um, then we have the shaded compilation, because again, all the modeling applications

24:43.000 --> 24:51.640
need to compile shaders. Uh, so this is the part that does receive a GLSL server, or

24:51.640 --> 24:57.080
SPRV, you already see Vulcan. And, uh, the transferring to the final assembly code suitable for your

24:57.080 --> 25:02.200
GPU. Uh, again, there are some parts, common to all the drivers, but the partners,

25:02.280 --> 25:08.200
specific to the Vulcan, because the assembly really depends on each GPU, which GPU has its own assembly,

25:08.200 --> 25:13.800
and even for the CPU, depends on the formula, there are some changes on, and things. So, basically,

25:13.800 --> 25:25.080
this is, uh, what we said that, we will see that later in a more detail. And then, once we have everything,

25:26.040 --> 25:33.320
we have the, the kind of part. So, um, in this case, basically, uh, there is like, uh,

25:34.920 --> 25:41.080
a library, which, uh, used to, um, talk with the kernel drivers, which is called,

25:41.080 --> 25:48.520
let the run, the run, why the render memory, I'm a large manager. And, uh, so, yeah, basically,

25:48.600 --> 25:55.160
when your driver, the Vulcan, or, or, or, or OPINGL driver, has everything really to be a

25:55.160 --> 26:01.160
circuit. It's like, uh, everything, you know, memory, uh, basically, some sense that to the,

26:01.160 --> 26:07.880
the, the RAM, uh, which is in the kernel, and then each of these, uh, speak drivers,

26:08.680 --> 26:14.120
basically what they do is, uh, is, I mean, do, it's, I mean, do it, it's calorie in the

26:14.120 --> 26:17.880
domain. They just need to be secured by the, what did you build? So, basically, it doesn't seem like,

26:17.880 --> 26:23.480
okay, let's, uh, scale the job, prioritize, touch them, write, uh, register or whatever. So,

26:23.480 --> 26:31.320
they'll job as a starter, what did you, uh, monitor, when they don't, if finished, to tell the user

26:31.320 --> 26:38.040
space driver, okay, I'm finished, you know, it's waiting for a signal. Uh, if something wrong happens,

26:38.680 --> 26:46.680
which a lot of time happens, we need to reset the GPU, do that. I mean, a lot of things that are,

26:47.400 --> 26:59.240
required to do to find a circuit this, this, uh, the job. So, uh, I think it, I mean,

26:59.240 --> 27:05.080
why we see the components, we can go a bit of more detail on the, what happened behind the

27:05.160 --> 27:11.160
components, when you call a function, an open-gel function or a broken function, what happens inside

27:11.160 --> 27:18.200
this, okay. So, first of all, or for, I'm deleting a lot of details as a military, so I just like,

27:18.760 --> 27:24.840
simplify a lot of the code. I would simplify a lot of the two chain, all the chain, all the calls,

27:24.840 --> 27:31.960
because a lot of, I mean, a lot of calls. So, yes, get, give you an idea of what is happening here. So,

27:32.760 --> 27:38.840
this is the, the, for the way we call, you know, draw a rice and the lower, uh, find the proper

27:38.840 --> 27:44.040
driver, basically, this is the first, um, function, the, at the point for this operation, which is called

27:44.040 --> 27:49.160
B-set draw a rice. And as I explained before in the literature, this is the analysis of the

27:49.160 --> 27:56.280
state's, right? And validate that, uh, since, uh, our correct, if something is not correct,

27:56.360 --> 28:01.000
the letters are not correct. That's a level, and I'm in return. And if anything goes fine,

28:01.000 --> 28:09.080
then it's not the, the draw itself. Uh, this draw itself is still the, in the, in the, uh,

28:09.080 --> 28:15.560
measure layer, but again, it does several, uh, set some, several, uh, reach to something like that,

28:16.760 --> 28:20.520
uh, structure, sorry, and then it calls the state tracker to prepare the right, and

28:21.480 --> 28:27.080
call the draw value, which is basically, uh, is, uh, is the, in the California, it's in charge of,

28:27.080 --> 28:35.960
uh, a student, the draw. Again, the draw value, draw a tough thing is, I call CS, CSO draw, uh,

28:35.960 --> 28:42.440
video, CSO CSO is an object that keeps, uh, the, uh, a constant state of it that keeps the states

28:42.440 --> 28:48.920
on the full machine, and, uh, yeah, and basically calls that. This, in now, is everything in, in

28:49.800 --> 28:57.240
Galin. No, I want to go ahead, because it just check the, uh, the stack is like, uh, 20 calls,

28:57.240 --> 29:04.840
and I want to show 20 funcels. Okay. So, we'll be with that. But at the end, it ends up running the,

29:05.960 --> 29:12.440
the, the function of the reflection of the specific GPU, right, and in, in this case, I will show

29:12.520 --> 29:17.960
in the case for the, with the leak, which is the graph, um, the OpenGL, uh, drive for the

29:17.960 --> 29:27.160
Raspberry Pi 415, uh, uh, from the moment on, it's driver, handless operation, uh, really

29:27.160 --> 29:34.120
depending on the GPU. So, it driver has different, that influencing different ways, um, and I

29:34.120 --> 29:40.040
want to show the, uh, how the, the OpenGL, sorry, how the visually drive it does. But more or

29:40.040 --> 29:46.600
as the, the idea is that all of those drivers will, like, at the end, like, um, they'll tell me,

29:46.600 --> 29:52.440
what's similar, all of them is like, great, a bunch of common streams or jobs, which are basically,

29:52.440 --> 29:57.400
like, a lot of structures, where you configure the, you put the values in the structures,

29:58.520 --> 30:04.760
that contains addresses, um, you contains a simply called, a lot of things, that are the things

30:04.840 --> 30:10.920
that GPU configures the GPU, and then put that in a buffer memory, and this is going to be

30:10.920 --> 30:15.800
dispatched to the kernel, because that's, what GPU is going to read, and I see, do this here,

30:15.800 --> 30:21.880
so, so you can, or things there. More is, I mean, I mean, of course, each driver has, it's all

30:21.880 --> 30:26.040
structures, but at the end, it's not more or less the idea of all the, all the drivers.

30:27.880 --> 30:33.560
For the case of Vulcan, the indication is, uh, decay, CMT draw, but that's it, much more simpler,

30:34.120 --> 30:38.120
and almost the call is deleted, I mean, the entry point is deleted, uh,

30:38.120 --> 30:42.440
provided by the, provided by the hardware, in this case is the V3V, so,

30:43.960 --> 30:53.640
unless you have, uh, the disvalidation, uh, calling the V3V to be 3D, the CMT draw, sorry, is, uh,

30:53.640 --> 30:58.600
very fast, there's no high operation of that, so in this case, it's very simple, and then you see,

30:58.680 --> 31:06.840
we start to draw, I mean, there's no validation at all, yeah, uh, again, I'm not going to show how

31:06.840 --> 31:13.160
we, this keeps continuing, but again, it depends on the hardware, but at the end, as this is the

31:13.160 --> 31:18.360
same hardware, like the, sorry, this is the more, for the same hardware at the previous one,

31:18.360 --> 31:23.320
more as the, the outcome will be similar, I mean, we like a bunch of structures that put in

31:23.320 --> 31:29.640
a mail in the buffer, uh, I simply call for a sayers, and then we'd have to, for the review,

31:29.640 --> 31:38.440
to be this, to be executed. Now, before we draw, uh, we need sayers, I mean, as I said before,

31:38.440 --> 31:45.960
the, the start-up contains a share, I simply call it, and uh, you use OpenGL, the shares are

31:45.960 --> 31:51.960
basically writing in GLSL, and you use Bucca, is it working in Spielbeak, which is how much

31:52.040 --> 32:01.640
load level, uh, binary, uh, language, which is basically created from GLSL, or other high, high

32:01.640 --> 32:10.520
level, language, uh, by the end, but again, it, well, another, you need to, uh, compiler, that, to

32:10.520 --> 32:20.200
generate a final, uh, assembly code. In the case of GLSL, this like, uh, and this time where

32:20.280 --> 32:24.920
there is a parser, you solve MISA, the parsed code, generates an intermediate level, uh, language,

32:24.920 --> 32:31.800
and then that is compared to, to, to, to near, uh, in the case of PIRB, it's basically just

32:31.800 --> 32:37.000
compared to, like, a match, one, one, two, one, that convert GLS, it's already split it to near.

32:38.360 --> 32:46.040
Near is, uh, language is by MISA, which means, uh, new intermediate, uh, representation, um,

32:47.000 --> 32:54.040
which is, uh, I think was introduced in 2015, and this, the, the language, this, uh, used, uh,

32:54.040 --> 32:59.720
uh, all the drivers, mostly, and this, the, we, was designed for the GPU, so much is very

32:59.720 --> 33:07.640
well to GPU, and, uh, so it is that, you transform, that, that, uh, GLSL or SPB to,

33:08.120 --> 33:15.960
Thisよう is, a sample of Gls, a piece, and these near is they're performing in, in S, S, S, S, S, I,

33:15.960 --> 33:21.800
form, where a single is a, uh, Sigma began, significant static, uh, well, normal, the, the, the chronicle,

33:21.800 --> 33:24.200
But, um, the thing is that this, uh, this, in the form, that you can apply a lot of

33:24.840 --> 33:30.440
optimization, that are, very well-known, from the compiler wall, um, you can apply a lot of the

33:31.080 --> 33:37.560
socializations, and samples like, like you know, Algiere, like, uh,

33:37.560 --> 33:38.560
of the mission.

33:38.560 --> 33:47.100
And if you have to appreciate the say A plus A, you can simplify that as twice A, it depends

33:47.100 --> 33:52.460
on how much the faster or not, come as a dispersion elimination, let's call the elimination

33:52.460 --> 33:56.060
like if you have a code that is not going to be executed, it will lose that.

33:56.060 --> 34:00.660
I mean, all those kinds of optimizations are applied in this near step.

34:00.660 --> 34:07.660
These are applied logonins, basically logonins is replacing an operation by which is more

34:07.660 --> 34:11.900
accomplished by a different, more simpler operations, and as somebody's for instance,

34:11.900 --> 34:18.100
if you have a, you need to compute the sign of a number, and you're however, let's

34:18.100 --> 34:25.020
support the sign by itself, you can replace the sign by a Taylor expansion, you see more

34:25.020 --> 34:26.020
simple instructions.

34:26.020 --> 34:31.460
So, the logonins is, do that, and there are quite a lot of logonins, they can be applied

34:31.460 --> 34:37.460
on the near, and a lot of them depends on your hardware, I mean, that's the reason why we

34:37.460 --> 34:41.380
have this capability for instance, that is, that you can have a support this, okay, then

34:41.380 --> 34:46.740
like I, as you could just, this near operation, otherwise I need to lower and transform

34:46.740 --> 34:47.740
that.

34:47.740 --> 34:54.740
So, as I said, these common for all the drivers, although there is a benefit for this

34:54.740 --> 34:55.740
kind of optimizations.

34:55.740 --> 35:06.340
So, you have any automation, all there will be, get this automation for free, and then

35:06.340 --> 35:15.340
when you have near, we still need a sample code for GPU, and basically what we do is,

35:15.340 --> 35:21.300
we have an optimal near, was a past world basis, and say to the specific driver, because

35:21.300 --> 35:26.820
now for now, for that moment, only the drivers know how to transform that in the specific

35:26.820 --> 35:27.820
GPU.

35:27.820 --> 35:37.920
I said, be called for that GPU, again, I'm sure we, in a sample with the, with the GPU for

35:37.920 --> 35:44.920
the run by free, I'm sorry, for I'm 5, in this case, the near is converted to another

35:44.920 --> 35:53.200
intermediate language, it's called beer, this beer is more sweet, more, more, more, it's

35:53.200 --> 35:59.400
more for the GPU, I mean, this is instructions that are more than, the ones that have

35:59.400 --> 36:07.140
a support, okay, and here we do more de-visations, very specific to the beer, we do

36:07.220 --> 36:13.060
a scaling, we're already in the strategy, let's say that, and they'll get optimised beer,

36:13.060 --> 36:19.860
and then this beer is converted to QPU, which is basically, this is the, was simply of

36:19.860 --> 36:25.780
the, for the run by free, run by free, which basically it has two, like two lines of

36:25.780 --> 36:31.500
issues, like two, one for multiplication and other for automatic operations, I can

36:31.500 --> 36:38.380
run in parallel. So this is very, very specific to the Raspberry Pi 4 and 5. Again,

36:38.380 --> 36:42.780
you go to another device. It's quite different. For instance, in the case of AMD,

36:42.780 --> 36:48.060
it uses echo, which is the back end compiler. There are other cases that are using

36:48.060 --> 36:54.380
given lvm, this, well, no, they use that as the intermediate language and the

36:54.460 --> 36:59.900
operator of programming. This is completely depends on the, on the, on the, on each other

36:59.900 --> 37:10.860
appeal. Okay, now we have all these jobs and common lines of the 74. We have now the assembly

37:10.860 --> 37:17.580
and I need to sum it to the, to the GPU. As I said, this, uh, don't, we, uh, slip the RAM.

37:18.540 --> 37:24.700
Basically, what it does is HTTP, we take the results, it sum it to the GPU, which, basically,

37:24.700 --> 37:30.140
sometimes means, uh, for instance, in case of all the Raspberry Pi, it means that, okay,

37:30.140 --> 37:35.980
I'm going to writing a register where the others of this buffer and write another register that

37:35.980 --> 37:40.860
says, okay, start to get, uh, the security job and there's another register that says, when the job is,

37:40.860 --> 37:45.660
it's finished or not. And there are signals to say, okay, the job, there was like a interrupt soon,

37:45.740 --> 37:52.300
because it was a crash or whatever. This everything is managed. The newer GPUs, for instance,

37:52.300 --> 37:58.940
are able to scale in, by, through Howard, like, have the components to scale the jobs,

37:58.940 --> 38:05.340
through Howard's, but at the end, uh, everything is executed until you get these, uh,

38:05.340 --> 38:14.140
beautiful, triangle and screen. Okay. So more races, this is a simplification of,

38:14.140 --> 38:18.700
what have we behind the cortex, you know, when you run the open gear, or we can, um,

38:20.060 --> 38:27.820
now, from a point on view of, uh, of the priority self, how to test and continue, how we test

38:27.820 --> 38:32.380
the critical things, okay. So basically, we use the GitHub, uh, the red letter, we love where we,

38:32.460 --> 38:39.260
basically report fixes, and report pieces, fixes, or sorry, patches, or we would,

38:39.260 --> 38:45.820
basically, my requests, assuming, the rap, it would be review with my people, uh, by, by,

38:45.820 --> 38:52.540
very smart people, and they can't, I said it, I said, okay, this is fine, I said it, or maybe

38:52.540 --> 38:58.220
is, which is multiple times, it's okay. You need to fix this, and if it's not, or maybe,

38:58.300 --> 39:03.980
you need to, for instance, I may be a little, I may request to fix something in my driver, but then

39:03.980 --> 39:09.340
that change is broken, not the driver, so it will say, okay, be careful, there's really that,

39:09.340 --> 39:13.580
because you are breaking other drivers, so you need to review. So this is an iteration process,

39:13.580 --> 39:19.260
and when everything is, is a set, uh, the my request is not directly, uh, merge, but it's

39:19.340 --> 39:25.580
submit to a main sign to the March board, and basically what March board is like,

39:25.580 --> 39:30.700
you have the key, a key of my request to be merged, and what it does is, it's the first

39:30.700 --> 39:38.060
memory quest, we'll erase this against master, sorry, upstream, the main, um, to the top, then

39:38.060 --> 39:45.340
wrong, uh, several tests, and several was fine, merge it, okay, it's nothing, it doesn't go,

39:45.420 --> 39:53.340
reeds, until, okay, something is wrong. Next, let's more request, and so on and so, why does that,

39:53.340 --> 39:58.300
because if you try to do the more request, all together, maybe this work, this work, but

39:58.300 --> 40:08.460
together, we fail, so there's a very wide, is, is executing one by one, okay, and how, this is,

40:08.460 --> 40:14.460
how much is testing thing, well, the first thing is that if we rebuild all the tests, all the drivers,

40:14.460 --> 40:17.900
that are affected by the memory quest, sometimes there is a memory quest that touches for

40:17.900 --> 40:23.180
instead of the Raccoon code, so that is not going to affect the worst of the drivers, because the

40:23.180 --> 40:28.380
Raccoon is going to come, but for it, you touch something about near itself, this need to be

40:28.380 --> 40:33.420
issued by all the drivers, so all the drivers need to be compiled, and then, uh, basically, it

40:33.420 --> 40:38.300
should use a lot of different tests with, basically, it should use a pilot, which is a set of, uh,

40:38.700 --> 40:47.980
community, test feed, uh, for OpenGL, and, but we also run OpenGL CTS, a multi-CTS,

40:47.980 --> 40:55.900
which are the conformance test feeds for, for the level, running multi-CTS can take out of

40:55.900 --> 41:03.740
hours, okay, and we don't want to have a, a lot of hours to, until something is merged, so,

41:03.820 --> 41:09.340
well, we don't, it's out of different, uh, actions to make the things work faster, for instance,

41:10.060 --> 41:15.580
instead of running one test, like, we can see the wrong one test, uh, it's time, in, in, okay,

41:15.580 --> 41:22.380
we run like, for the, we already have four CPUs, four cores, we run four tests in pile, which make

41:22.380 --> 41:27.820
many things faster, then we distribute the institution, multiple GPUs for instance, for the

41:27.900 --> 41:34.780
Raspberry Pi, for instance, we have eight or nine or ten Raspberry Pi 3s, so we run, uh, test,

41:34.780 --> 41:40.060
the subject, affects the, the Raspberry Pi 3, we distribute all the stuff in all these, uh,

41:41.660 --> 41:47.420
devices, so they are only in parallel, and then we also run a subset of tests, so, more

41:47.420 --> 41:54.220
everyday is that to have everything, a security in 15 minutes, more or less, right, and it's

41:54.300 --> 42:00.220
happening, I mean, it's a sex, it will match, then, of course, every night, we have one, like, uh,

42:01.660 --> 42:06.460
nightly pipeline, which basically is, okay, now I have time, we are not blocking all the

42:06.460 --> 42:12.220
memory quests, that's also why we run these, uh, uh, uh, in 15 minutes, but so, let's, let's

42:12.220 --> 42:16.540
run all the tests, so in this case, we run a more comprehensive test, for instance, we run,

42:16.540 --> 42:22.300
maybe the full CTS, uh, you can't take maybe one to hours, but we will have time, what do we

42:22.380 --> 42:28.860
do with this only night, on the night, and, uh, and if everything happens, well, uh, people

42:28.860 --> 42:35.340
we see the next day, okay, maybe my change passed there, but it was a very specific corner

42:35.340 --> 42:41.980
case of the test that I did it past, well, we need to work on all the fix, and well, that's all,

42:41.980 --> 42:48.620
so, uh, as conclusion was, Messiah is, like, basically a translation between, uh, different

42:48.700 --> 42:56.860
RFCPIs, and the hardware, uh, for the case of OpenGL, it provides all the, uh, full steam machine

42:56.860 --> 43:02.220
trucker and multiple utilities that are implemented, uh, to implement the, the, the drivers that

43:02.220 --> 43:09.900
helps to implement the drivers, uh, it's also provides a very comprehensive set of tools, uh, for, uh,

43:09.900 --> 43:17.420
compile shaders, provides a lot of, uh, optimizations, uh, and, uh, helps, helpers just to get the final

43:17.420 --> 43:24.460
assembly code, near, is the, the common language used for all the, all, most of all the drivers

43:24.460 --> 43:31.580
nowadays, and then, all the work is submitted to the GPU, is a lip your RAM, okay, so, I hope,

43:32.460 --> 43:38.220
you have enough better idea, not deep, but as the, at least some real, what happened,

43:38.220 --> 43:42.620
mechanical, with, with, with Messiah, and the hope that you can start to continue to miss

43:42.620 --> 43:45.660
a video on, not like that, and that's all.

43:54.540 --> 43:54.940
Who is this?

44:05.340 --> 44:11.340
Why are they, they are, uh, it's only for the sake, right, okay. Yeah, so, I'm not walking on the sake,

44:11.340 --> 44:17.020
so let's take this with a grain of salt, but I think one of the problems is that, um,

44:17.020 --> 44:28.780
as I've implemented the full OpenGL, uh, API, and the OpenGL API, not the, yes, but the,

44:28.780 --> 44:38.780
the API is thought for desktop devices, but mostly the Apple M1 GPU is like a big mobile GPU,

44:38.780 --> 44:41.900
so, there are a lot of features that are not, um,

44:42.940 --> 44:46.300
support by the hardware, so I didn't do a lot of things to that, and then on top of that,

44:47.020 --> 44:53.100
is that most of the things were quite robust in engineering, because there is no documentation

44:53.100 --> 45:02.540
of how to put on the GPU, so you need to do a lot of, uh, like tests to just, uh, to just to,

45:02.540 --> 45:09.260
uh, fill out how these works, which is, I mean, I mean, fortunately, in my case, I don't do that,

45:09.260 --> 45:13.580
but it can be very, very challenging, a lot of experience, uh, do that. Fortunately,

45:13.580 --> 45:19.100
the person that is working on the, uh, suffix, which is Alyssa, uh, she has a lot of experience,

45:19.100 --> 45:23.340
because she was, uh, doing Rochigi for all the drivers, so she has a lot of knowledge,

45:23.340 --> 45:27.500
how to address this, but yeah, they, they, they, they, they, they, they more complicated parts.

45:33.100 --> 45:37.580
Do you have any particular advice for someone who's been working for a while, but would want to,

45:37.580 --> 45:39.580
wants to actually start concentrating on something?

45:41.820 --> 45:48.940
Yeah, well, I think, I'm sorry, uh, yeah, if there's a bias for someone that, uh,

45:48.940 --> 45:52.540
would like to start to continue to miss, all right, this is the, yeah, well, yeah,

45:52.540 --> 45:59.100
the thing is, they are a miss that are quite of several issues, um, that basically they are,

45:59.660 --> 46:05.900
like, after going to, like, easier, you can start to do that, so that, I would start to do that,

46:05.900 --> 46:13.900
do that. Then, uh, another bison is that is easier, usually, uh, to start with how

46:13.900 --> 46:19.820
that you have the documentation, like, if you need to do things, and then you don't have the,

46:19.820 --> 46:22.780
documentation for the however, it's quite complicated. So for instance, in this case,

46:23.740 --> 46:30.780
Intel, however, has its public documentation, it's, it's a complete device, but it has

46:30.780 --> 46:35.820
more communication. And now, of course, asking, because, I mean, the people, the community,

46:35.820 --> 46:40.060
would like to get more continue to some, people, the community are very nice and polite. So,

46:40.060 --> 46:45.820
I think, uh, if you have doubts, you can ask, there is, like, a IRC channel, you can ask questions,

46:45.820 --> 46:50.380
so you can, uh, submit them. So, yeah, basically, it's just a matter of,

46:50.460 --> 46:54.300
starting with something simpler, you have the code, you can check the code,

46:54.300 --> 46:57.500
you can do experiments with that, you have this, this, you'll see what happened to the

46:57.500 --> 47:03.340
ID so on that, you have GDB or whatever to do test. So, yeah, basically, that's, uh, my advice,

47:03.340 --> 47:05.180
just to start, basically.

47:10.140 --> 47:10.780
Yes.

47:13.180 --> 47:15.660
So, lift the RF contains, uh,

47:16.620 --> 47:21.980
I'm a specific staff, and there's also a lot of things stuff in the space,

47:23.420 --> 47:29.340
you just make both. Yeah. How, how, if you have something that's specific to your team here,

47:29.740 --> 47:33.740
how do you decide to do it? Yeah, the thing is, uh, in the,

47:33.740 --> 47:38.060
Libby or M, you have, like, common functions that are common for, for all the, all, okay.

47:38.060 --> 47:43.260
In, the question is that, um, Libby or M have a specific, uh,

47:43.260 --> 47:47.420
function for the power. So, basically, how we basically manage because there are, like,

47:47.420 --> 47:51.420
multiple drivers and multiple different structures, right? Okay. So, yeah, basically,

47:52.220 --> 47:57.500
Libby or M is, like, like, a common part, this function that are common for all the drivers,

47:57.500 --> 48:00.860
basically, like, for instance, creating a memory, as I remember, it's like,

48:00.860 --> 48:05.100
it's more or less the same, right? But then it have backends, like, different backends.

48:05.100 --> 48:11.260
And these backends are embedded with IOCTLs, where you pass, like, uh, operation, okay. And then,

48:11.820 --> 48:15.580
the structural whatever. And this is very specific for the, for each driver. So, it's the

48:15.580 --> 48:21.820
driver. Uh, when the lost Libby or M actually loaded the DRM, for its own backends, for

48:21.820 --> 48:28.620
its own driver. So, for instance, when we use, uh, the Raccoon, Libby or M is like, a Libby or M is

48:28.620 --> 48:33.420
large, uh, the room within it. You, be through the, I think of something like that. And I

48:33.420 --> 48:38.860
contains the IOCTLs with the code specific for the, for the UPSO. Now, I know, as

48:38.940 --> 48:42.940
it's basically the driver, the user space driver knows, okay, or I want to submit this job.

48:42.940 --> 48:48.620
This is basically the API need to be IOCTL with this, but the structures are everything I need to

48:48.620 --> 48:55.500
know is one document. This is like, is, like, uh, in the, in the, it's been for this, for this, uh,

48:55.500 --> 49:01.100
your M. So, it's like, that, like, two parts on the Libby or M. Come and check that, I understand,

49:01.660 --> 49:08.700
but, sort of, the API between the user space, but, and, look, DRM is potentially, it's got

49:08.700 --> 49:13.180
overlapping bits for different hardware, but they can, they can have, like, a different API.

49:13.180 --> 49:14.620
Yeah. Okay. Yes.

49:14.620 --> 49:20.780
I mean, for some operations are the same. Sure. It's like, is, you have, like, DRM.H, which

49:20.780 --> 49:28.060
is a common function, and then you have DRM, it's last NBK, point H, or DRM, it's last, uh,

49:28.060 --> 49:31.980
as I say, point H, whatever. And that's the specific parts of the, I mean, the first is,

49:31.980 --> 49:37.020
quite similar, because they are, or they are IOCTLs, which is basically the common way of, of,

49:38.300 --> 49:44.140
communication with IOC, but yeah, the, why, the, what service offers really depends on each

49:44.140 --> 49:51.820
hours. So, a lot of time, we need to add new, uh, IOCTLs in DRM, when you need to, uh, use, speak, a

49:51.820 --> 49:57.580
new, a newer thing that, you need to support for the current part. So, you add new IOCTL, and that's

49:57.580 --> 49:59.580
what. No, there's no. Okay. No.

50:27.580 --> 50:34.580
much, but the question is, how moved forward?

50:34.580 --> 50:37.180
Yeah, so in regards to, like, statistics

50:37.180 --> 50:40.580
about the failures of magic wastes, but it, oh.

50:40.580 --> 50:44.580
Yeah, I like, I'm not sure, but it's like,

50:44.580 --> 50:51.580
Jesus, like, put it to, would it be common to fail those tests?

50:51.580 --> 50:54.580
After this, like, can I run it with opening,

50:54.580 --> 50:57.580
I've been expecting this with invisible parameters,

50:57.580 --> 51:01.580
basically because I think that's how it comes to.

51:01.580 --> 51:03.580
I'm actually getting the question correctly,

51:03.580 --> 51:06.580
but I understand that if something fails,

51:06.580 --> 51:09.580
when you're only going to request this pre-testing thing,

51:09.580 --> 51:13.580
something fails that, if you can do something,

51:13.580 --> 51:20.580
the local, you mean, the local computer tool.

51:20.580 --> 51:26.660
I think she's going to move between words of Google first, first, first, first, first.

51:26.660 --> 51:33.180
OK, so I mean, yeah, I mean, sometimes you are working, everything works fine, you are

51:33.180 --> 51:37.060
competitive, you submit to the American, to the, to the, to the, to the, to the

51:37.060 --> 51:43.580
miracles and there's something else. OK, so I mean, really depends of, I mean,

51:43.580 --> 51:49.100
sometimes it's obvious what is, what is happening, really depends, but sometimes

51:49.100 --> 51:53.380
it's really depends, I mean, maybe the failure always fails in a speak of driver

51:53.380 --> 51:59.860
that you don't have this driver. And I mean, I mean, you can't check the code and I guess

51:59.860 --> 52:05.340
what is happening, but sometimes when we end up doing this, I ping person, the person

52:05.340 --> 52:09.700
might turn around this, OK, I do this, and this is failing, but I'm not sure why, maybe

52:09.700 --> 52:16.180
you can take a look at that, because you don't have, you don't have all the GPUs in your

52:16.260 --> 52:20.740
account, so other time it's like, you guess, OK, maybe this, this, this, this is the

52:20.740 --> 52:28.460
problem, and then just, basically, you can basically sum it up lunch, and then force the GPU

52:28.460 --> 52:33.740
to execute this, this code, it's happening a lot of times, so you execute, using the CI,

52:33.740 --> 52:38.380
the OMSCI, you execute the test and say, OK, yeah, now it's fixed, now I can, I'm, I'm

52:38.380 --> 52:42.100
request, and I see that that, I really depends on the kind of errors on things that

52:42.100 --> 52:43.100
I'll see that.

52:51.580 --> 52:56.700
How difficult things like, how can make your life, because it obligates a lot of things ahead

52:56.700 --> 52:59.980
of time, I'd say, it's less likely to question the driver because something like

52:59.980 --> 53:05.060
wrong, how does that affect, like, how much you have to be super careful when doing the

53:05.140 --> 53:08.460
driver course, when you're talking about things that nothing can be validate.

53:08.460 --> 53:13.940
OK, so basically, it's like, the question is, how much life is more complicated in

53:13.940 --> 53:18.260
vulca, because if you're a result of things, and you do that in vulca, right?

53:18.260 --> 53:24.860
OK, actually, it makes things more easier for multiple reasons, OK, first, yeah, you don't

53:24.860 --> 53:30.180
need to validate anything, I mean, you assume that thing is correct, if something is wrong,

53:30.220 --> 53:36.780
the point is not your size, in the, the burrow per side, unless the requirements are

53:36.780 --> 53:42.100
fully, and it still, something is wrong, OK, so in that case, it's more simpler.

53:42.100 --> 53:47.660
And then the vulca API, which basically, what do you think, what do I do, what going to,

53:47.660 --> 53:54.820
to implement, I mean, is big, it's very, very robust, but at the same time, it's more

53:54.820 --> 54:00.860
near to what, what actually the GPU is doing, in the case of OpenGL, if you want to

54:00.860 --> 54:07.260
look, since really fast, due to a lot of solutions and tricks, I feel like that, and part

54:07.260 --> 54:12.740
of it, and are done, by going, that's why it is very complex, and the part needs to be done

54:12.740 --> 54:18.460
in the driver, so in this, in the sense, I mean, the thing is that the OpenGL driver is not

54:18.460 --> 54:23.180
the same like, the or how or what the driver, due to a lot of, of, of, option, a lot of

54:23.180 --> 54:28.300
implementation, so in this sense, when you're ready to call in the vulcan, I mean, I understand

54:28.300 --> 54:33.700
that writing vulcan application is more complex, because you need to write the whole

54:33.700 --> 54:38.140
bit Bible, but when you see the functions, it's OK, it is more simpler to what the GPU

54:38.140 --> 54:43.620
is doing, so I don't need to, and the kind of assumptions are, or how I going to

54:43.700 --> 54:48.900
up study is comes in, with input pain, to implement this in the media, so in this, this

54:48.900 --> 54:59.140
is in more simpler, OK, I think that's all, OK, thank you very much.

