1
00:00:10,280 --> 00:00:14,220
say hi everybody thanks a lot for
coming on to my talk about global

2
00:00:15,910 --> 00:00:21,450
so i'm robert right guy work for intel open
source technology centre on the kind

3
00:00:21,450 --> 00:00:23,480
maintainer of the whole project

4
00:00:33,910 --> 00:00:40,370
so for those are not familiar with probably it's
other consoles gpu graphics library originally

5
00:00:40,370 --> 00:00:45,140
created for the cluster projects they are
these days as a standalone project

6
00:00:45,810 --> 00:00:52,910
it was created to deal with the possibility across
different versions of opengl so course

7
00:00:52,910 --> 00:00:59,360
opengl yes opengl and even experimentally
a bit these days with the web you know

8
00:00:59,360 --> 00:01:04,290
it's is so dealing with portability
across operating systems

9
00:01:05,470 --> 00:01:10,820
one of the differences with some other graphics
if you refuse are base is that

10
00:01:10,820 --> 00:01:16,470
initially when we created it we were interested
in supporting more multiple sort of orthogonal

11
00:01:16,470 --> 00:01:22,460
components being of the contribute to the graphics
rendering in a way that didn't trampling

12
00:01:22,460 --> 00:01:24,140
each other's us take tracking

13
00:01:30,010 --> 00:01:35,110
so in a still come hoping to go through
first a run through of how

14
00:01:35,110 --> 00:01:41,710
we submit and process geometry with
a gpu and when the something out

15
00:01:42,990 --> 00:01:45,510
and i want to then give

16
00:01:46,230 --> 00:01:50,350
an overview of the utilities in the couple
library that try to make it really

17
00:01:50,350 --> 00:01:54,400
practical for writing graphics applications

18
00:01:55,790 --> 00:02:00,160
be on just access to the G P your
hardware and then talk about some

19
00:02:00,160 --> 00:02:04,760
of the specific things we've been developing
more recently just say that people get some

20
00:02:04,760 --> 00:02:07,600
insight to how the project is actually developing

21
00:02:11,620 --> 00:02:13,860
so first so wanna talk about

22
00:02:14,410 --> 00:02:19,610
basically the lowest level api even in cover
which most closely matches have a gpu

23
00:02:19,610 --> 00:02:20,690
process is data

24
00:02:21,500 --> 00:02:28,590
i'm kind of personally interested in trying
to expose more people to understand have a

25
00:02:28,590 --> 00:02:34,830
gpu itself works especially in the context of user
interface development where i think we

26
00:02:34,830 --> 00:02:38,620
try to be on the utilise the flexibility of this hardware

27
00:02:39,280 --> 00:02:45,630
and the state-of-the-art for you are is today
this is quite basic in comparison to

28
00:02:46,320 --> 00:02:50,260
you can see to sort of game developers
and how successful they are using this

29
00:02:50,260 --> 00:02:54,010
hardware with many of this and that
kind of constraints is us with

30
00:02:54,570 --> 00:02:57,100
interactivity and real time graphics

31
00:02:57,670 --> 00:02:58,740
so

32
00:03:01,220 --> 00:03:04,420
anyway the first thing that any applications
gonna have to do they're gonna use google

33
00:03:04,420 --> 00:03:08,450
to draw something are with the G here
is great and of the cobble context

34
00:03:08,450 --> 00:03:13,690
this is gonna just you could cool context
news is gonna create your sandbox for

35
00:03:13,690 --> 00:03:17,640
all the data the call was gonna need
to track for your application

36
00:03:18,760 --> 00:03:21,900
so then we're gonna need to create a so
it's a destination for what we

37
00:03:21,900 --> 00:03:24,330
draw remove are rendering this is called a frame buffer

38
00:03:24,970 --> 00:03:28,060
a frame buffer is a collection of to debug is

39
00:03:28,550 --> 00:03:32,580
the but we care the most about is the colour
buffer and that's where we're

40
00:03:32,580 --> 00:03:36,900
gonna store the results visually of what
we're drawing but a frame of mind also

41
00:03:36,900 --> 00:03:41,060
contain other ancillary about this so that are is

42
00:03:41,380 --> 00:03:47,150
for accumulating the depth of the geometry
that is used during this that we have

43
00:03:47,150 --> 00:03:49,150
to see so you know these guys

44
00:03:52,540 --> 00:03:56,180
in probably create a frame buffer you
can you can great and on screen frame

45
00:03:56,180 --> 00:04:00,460
buffer that would be visual to a visible
to use of coding got one screen

46
00:04:00,460 --> 00:04:04,820
you with the size alternative you would create
an offscreen frame buffer by creating a

47
00:04:04,820 --> 00:04:09,650
text you have with a given size and then
you would rat that texture with

48
00:04:09,650 --> 00:04:11,290
as an offscreen frame buffer

49
00:04:13,250 --> 00:04:17,510
so if we have a destination that's where
we're gonna store results then we need

50
00:04:17,510 --> 00:04:21,600
some data that we're gonna process
with the G P A and how does a

51
00:04:21,600 --> 00:04:23,090
gpu except data

52
00:04:23,680 --> 00:04:24,080
so

53
00:04:25,780 --> 00:04:27,210
and gpus

54
00:04:28,820 --> 00:04:35,280
also actually the is so the thirty
forms of data so we i think

55
00:04:38,820 --> 00:04:39,120
so

56
00:04:43,190 --> 00:04:48,560
the in cover we support lighting image data have for

57
00:04:51,670 --> 00:04:52,480
sorry

58
00:05:00,500 --> 00:05:01,290
in the order

59
00:05:02,610 --> 00:05:06,640
and image it's a as a form of a so that we would expect we

60
00:05:06,640 --> 00:05:12,340
have person a gpu be on search german
tree and it's a in probably support

61
00:05:12,340 --> 00:05:20,930
lighting textures on the from finals from
afar name or from about four with a

62
00:05:20,930 --> 00:05:29,380
given size that and by sending data
on that texture us one is being up

63
00:05:29,380 --> 00:05:37,430
to images into a larger at this of images a

64
00:05:38,670 --> 00:05:41,220
and it's often useful to be able to

65
00:05:42,440 --> 00:05:45,750
how can we just again as a high level
protection the way you often it

66
00:05:45,750 --> 00:05:49,740
is a compact and to be have the packs
more images into a larger images

67
00:05:49,740 --> 00:05:56,620
to avoid state changes and another form of textures
the gpus process of pictures great

68
00:05:56,620 --> 00:06:03,340
from when your system resources such
as X eleven expects or while and

69
00:06:06,760 --> 00:06:08,870
i'm sorry the older this

70
00:06:16,600 --> 00:06:17,000
okay

71
00:06:19,030 --> 00:06:19,630
it's just that

72
00:06:20,330 --> 00:06:24,170
the left and right click it doesn't very
this is a real andreas breaks the

73
00:06:24,170 --> 00:06:30,410
slide down to the sections which of vertical
sections like this pressing that right skip

74
00:06:30,410 --> 00:06:30,830
saver

75
00:06:31,360 --> 00:06:32,900
pretty big chunk that so which

76
00:06:33,410 --> 00:06:39,210
so about a so this'll spree this slightly
better slide talk a week or two

77
00:06:39,210 --> 00:06:42,160
meeting date to the G P so depressing
we need we have to do is

78
00:06:42,160 --> 00:06:46,630
the actual geometry into the G P A so
first we need to actually understand

79
00:06:46,630 --> 00:06:51,350
what they to the G P processes and that
is geometry which is test selected

80
00:06:51,350 --> 00:06:56,170
from triangles is the primary form in which
we price estate on the G P

81
00:06:56,170 --> 00:06:58,160
A so you

82
00:06:58,690 --> 00:07:00,020
to understand

83
00:07:01,240 --> 00:07:06,090
you have the how we describe astrology the next
thing to understand that's a this

84
00:07:06,090 --> 00:07:10,990
up about that is the stuff like just
jump ahead at and sorry about that

85
00:07:10,990 --> 00:07:17,580
but we're gonna fast go through explaining
how the geometries this but apologies and

86
00:07:17,980 --> 00:07:24,280
so the way we describe it geometries might
tell is german treaters trying plated from

87
00:07:24,280 --> 00:07:29,120
attempt to assign different triangles and there's
triangles themselves made of that but to cease

88
00:07:29,880 --> 00:07:35,320
and that is that sees are themselves components
of what are called attributes

89
00:07:35,560 --> 00:07:40,560
so examples of attributes he would be so
positions for each vertex in a triangle

90
00:07:40,560 --> 00:07:43,210
so you would have a position

91
00:07:43,870 --> 00:07:48,010
which could be a coordinate two D or
three D coordinate reach but text in

92
00:07:48,010 --> 00:07:55,030
that geometry or it might be a colour
for each vertex in the geometry or

93
00:07:55,030 --> 00:07:56,460
it might be i

94
00:07:57,070 --> 00:08:00,930
a texture coordinate that would could
be at to detect record there

95
00:08:01,580 --> 00:08:05,800
it is the mapping a specific subregion
of an image that is a don't you

96
00:08:05,800 --> 00:08:10,000
there's a lot of flexibility in the gpus
to what data you can associate with

97
00:08:10,000 --> 00:08:16,460
about season your geometry and these are
just very the examples but it's you can

98
00:08:16,460 --> 00:08:19,440
have all of the cost and data so i see the outcome actually

99
00:08:20,610 --> 00:08:24,790
but they don't you can also have many different
apologies so tip about apologies would

100
00:08:24,790 --> 00:08:27,870
be that you have a triangle list
which is where you would have

101
00:08:28,430 --> 00:08:36,380
so i sets of three but the sees which represent
completely disjoint and disconnected triangles

102
00:08:36,880 --> 00:08:40,740
or you might have a strip of triangles
and that would be you divide your

103
00:08:40,740 --> 00:08:45,560
first set of three but sees feel first triangle
and then one additional verdict is

104
00:08:45,560 --> 00:08:48,920
gonna connect to the last two that sees
of your script to make one more

105
00:08:48,920 --> 00:08:53,680
triangle and so one more vertex connects
the last event these answers a more data

106
00:08:53,680 --> 00:08:58,980
efficient way of describing some geometry than
with the less if that's applicable to your

107
00:08:58,980 --> 00:09:03,330
which on your trying to describe and last
example would be a band where you

108
00:09:03,330 --> 00:09:06,330
just have a single but clicks in the centre
and then the rest of the

109
00:09:06,330 --> 00:09:08,090
triangles gonna spend a lot of that

110
00:09:08,700 --> 00:09:09,830
and that's and one

111
00:09:15,430 --> 00:09:18,560
so how do we actually described
estate using the called I P I

112
00:09:21,150 --> 00:09:22,810
so the first thing we're gonna do is describe

113
00:09:23,530 --> 00:09:27,620
decide what kind of data we want to associate
with the each of those matrices

114
00:09:28,680 --> 00:09:32,850
there is some different strategies as
to how you present estate to the G P

115
00:09:32,850 --> 00:09:36,730
so i'm just gonna give you one very
typical like how we would do this

116
00:09:37,410 --> 00:09:37,950
so

117
00:09:39,020 --> 00:09:43,460
we decide that we wanna have a position the colour
and texture gordon associated with

118
00:09:43,460 --> 00:09:48,960
each vertex in our geometry we're gonna create
a since even greater about six am

119
00:09:48,960 --> 00:09:54,740
i-vector extractor in this case and it has
a position it has two components of

120
00:09:54,740 --> 00:10:00,770
the position X and Y coordinates into
D and there of type fly we're gonna

121
00:10:00,770 --> 00:10:04,150
have full components of the colour but
we implement out for a and each of

122
00:10:04,150 --> 00:10:08,260
those is a by a number gonna have two components
protect recording it and those

123
00:10:08,260 --> 00:10:10,180
are touch like nist one

124
00:10:11,180 --> 00:10:11,860
and

125
00:10:13,140 --> 00:10:17,580
this but what about an this is just that
we've taken on my vertex struck

126
00:10:17,580 --> 00:10:21,720
which is a vertex i'm with declaring an array
of these and we're gonna plot

127
00:10:21,720 --> 00:10:26,340
out we've got three about sees for one triangle
and with plotting out the positions

128
00:10:26,340 --> 00:10:31,630
of the but sees giving each method the colour
and where specifying the texture coordinates

129
00:10:32,420 --> 00:10:32,710
you

130
00:10:35,260 --> 00:10:39,290
so we nine to up like that data
to the gpus able to read and

131
00:10:39,290 --> 00:10:42,510
prices that and that's just a case of uploading
into a cover that should be

132
00:10:42,510 --> 00:10:47,300
but we do that by coding a battery
but when you repulsed in the size

133
00:10:47,300 --> 00:10:50,160
of the data that we want to apply
time we pass in the actual point

134
00:10:50,160 --> 00:10:50,860
to the data

135
00:10:52,180 --> 00:10:54,000
and that's gonna give us a reference to about

136
00:10:56,420 --> 00:11:01,170
the next thing is that we're going
to have to describe the G P or

137
00:11:01,170 --> 00:11:04,410
how is it that it can what we got data needs to know that i

138
00:11:04,410 --> 00:11:08,140
have to that data so it's right three
the but sees to process it

139
00:11:09,310 --> 00:11:14,060
and so if we reach out to be we need to create a cover that

140
00:11:14,060 --> 00:11:18,470
should be and we go global attribute new
and we're gonna pass in a reference

141
00:11:18,470 --> 00:11:21,720
to the buffer which is a date there
are actually so we do we declared

142
00:11:22,330 --> 00:11:28,190
and we're gonna give each attribute and nine
we're gonna specify what is this be

143
00:11:28,190 --> 00:11:31,020
and the number of bytes that we
need to step to be have to move

144
00:11:31,020 --> 00:11:34,250
from the best the text of the second but sex and so on

145
00:11:35,160 --> 00:11:38,410
and then we're gonna need to specify what's
the offset from the beginning of the

146
00:11:38,410 --> 00:11:42,760
buffer whether gpus gonna start reading
for that should be here to

147
00:11:43,060 --> 00:11:44,250
process that data

148
00:11:45,440 --> 00:11:48,740
lastly we need to specify the number
of compared to data have you have to

149
00:11:48,740 --> 00:11:49,020
take

150
00:11:51,560 --> 00:11:52,910
like two components

151
00:11:55,930 --> 00:11:59,820
so assuming we do the same thing for the colour
and texture coordinates we have

152
00:11:59,820 --> 00:12:01,880
for batch we recovered attributes now

153
00:12:03,820 --> 00:12:06,410
we can now define one or more primitives

154
00:12:06,750 --> 00:12:09,050
the referring to that should be right so

155
00:12:09,620 --> 00:12:13,490
so at this point this is where we specify
the actual topology that we want

156
00:12:13,490 --> 00:12:18,620
to that we wanna gpu to use to interpret
that data so lists triangle friends

157
00:12:18,620 --> 00:12:19,420
trips or whatever

158
00:12:20,180 --> 00:12:25,060
so with the funny primitive here way because
it's just a single triangle that apologies

159
00:12:25,060 --> 00:12:30,870
pretty meaningless so we specify that there
are three but sees the belong to this

160
00:12:30,870 --> 00:12:32,150
specific primitive

161
00:12:33,180 --> 00:12:37,820
and then we specifying the actual attributes
the belong to this primitive and in this

162
00:12:37,820 --> 00:12:42,060
case we using this of our function
takes a know to make the list of

163
00:12:42,060 --> 00:12:43,140
that should be says

164
00:12:49,620 --> 00:12:50,910
so the

165
00:12:52,170 --> 00:12:58,600
other thing that gpus comprises besides the john
geometric data that i just described that

166
00:12:58,600 --> 00:13:03,910
is that they can also still image data
as textures citizen where we were a

167
00:13:03,910 --> 00:13:07,060
bit outflow of their own and i started going through

168
00:13:08,560 --> 00:13:12,300
how in cover we can like text data
so we have we can let them

169
00:13:12,300 --> 00:13:18,010
from files we can load a texture just
as an empty but and fill out

170
00:13:18,010 --> 00:13:22,310
from the C P with the point to we can
also create these textures which

171
00:13:22,310 --> 00:13:26,650
are cool data structures like an example
of a high level texture the pose able

172
00:13:26,650 --> 00:13:28,110
there are numbered if i don't use

173
00:13:28,540 --> 00:13:33,590
but it's sometimes useful for this
band of packing images one texture

174
00:13:34,360 --> 00:13:35,380
to avoid

175
00:13:36,120 --> 00:13:38,870
like a changes for

176
00:13:39,420 --> 00:13:40,750
you are use cases

177
00:13:42,250 --> 00:13:46,930
and might these pictures from when the system resources

178
00:13:47,380 --> 00:13:48,180
what is

179
00:13:48,680 --> 00:13:49,160
and

180
00:13:52,480 --> 00:13:56,230
so we probably talk we put off right but
what we're gonna store results with

181
00:13:56,230 --> 00:14:01,650
what our data which is these triangles
and images as textures so now we need

182
00:14:01,650 --> 00:14:05,150
to figure out how to describe the pipeline
by which this is all gonna be

183
00:14:05,150 --> 00:14:05,910
processed

184
00:14:10,740 --> 00:14:16,530
so i'm gonna give a really sky high
level view of any it example of

185
00:14:16,530 --> 00:14:21,460
how you can configure gpu pipeline to process
data of modern T is pretty don

186
00:14:21,460 --> 00:14:28,350
flexible and they're a number of stages
a cut optional state is really but that

187
00:14:28,350 --> 00:14:34,940
i'm not representativeness example but it is
still a very typical a common example is

188
00:14:34,940 --> 00:14:36,640
for is this technology

189
00:14:37,130 --> 00:14:41,250
they're gonna start with our geometry
we coming in on the left

190
00:14:41,530 --> 00:14:47,440
and we're gonna bust going to this but expressing
stage in this stage we're gonna

191
00:14:47,440 --> 00:14:53,110
transform a german three we're gonna scale it rotated
translated we're gonna projected so that

192
00:14:53,110 --> 00:14:58,340
points at a button away from the origin are
gonna attenuate towards vanishing point to

193
00:14:58,340 --> 00:14:58,860
the

194
00:14:59,670 --> 00:15:00,520
realistic

195
00:15:01,470 --> 00:15:04,850
and at the end of the stage all about
german tree is gonna be transformed

196
00:15:04,850 --> 00:15:06,750
into the coordinate space about frame but

197
00:15:08,110 --> 00:15:13,160
and it's conceptually a range within
a scene of other geometry

198
00:15:14,620 --> 00:15:15,590
bands

199
00:15:16,210 --> 00:15:20,000
the next stage after that is the frogman
processing stage in the G P is

200
00:15:20,000 --> 00:15:24,530
gonna go through each of the triangles
in our geometry and it's gonna i would

201
00:15:24,530 --> 00:15:28,180
like that with the pixel grid about frame
buffer in it's gonna consider for each

202
00:15:28,180 --> 00:15:30,480
pixel where the centre of the

203
00:15:31,000 --> 00:15:35,740
what's called a fragment where that is within
the bounds of that triangle then it's

204
00:15:35,740 --> 00:15:40,310
gonna run a program to basically calculate colour
for that fragment at this point when

205
00:15:40,310 --> 00:15:41,520
you're calculating not colour

206
00:15:42,150 --> 00:15:45,510
you can but that's of those textures the we floated

207
00:15:46,130 --> 00:15:46,730
and

208
00:15:47,290 --> 00:15:52,550
also the coolness of each triangle where we
have those attribute values coming in there

209
00:15:52,550 --> 00:15:59,690
is can be interpolated say that for every intermediate
fragment network processing we have interpolated

210
00:15:59,690 --> 00:16:02,030
attribute values to contradict

211
00:16:02,620 --> 00:16:03,240
program

212
00:16:04,730 --> 00:16:06,300
so in the final step

213
00:16:06,820 --> 00:16:10,320
we take all of those fragments and we
know need to humanise there is onto

214
00:16:10,320 --> 00:16:12,640
the existing contents of the frame buffer

215
00:16:13,430 --> 00:16:18,150
to build up a whole scene and it this
point we might also be reading

216
00:16:18,150 --> 00:16:21,820
back insisting colours in a frame buffer
to be able to say if the effect

217
00:16:21,820 --> 00:16:24,220
of transparency by combining in coming

218
00:16:24,810 --> 00:16:26,120
destination ones

219
00:16:27,140 --> 00:16:32,500
and so the buttons wasting the from present processing
state is there is programmable stage

220
00:16:32,500 --> 00:16:39,740
is very flexible the planning stages tends to
what is a much more limited functionality

221
00:16:39,740 --> 00:16:43,410
done and fix function of us still
a can lay down do that stuff

222
00:16:44,310 --> 00:16:44,870
and

223
00:16:45,920 --> 00:16:53,110
and the well in which the actually the hardware
prices this is very paralysed there

224
00:16:53,110 --> 00:16:57,010
is if you have a primitive without one for
triangles coming and there's not really

225
00:16:57,010 --> 00:17:01,240
any bordering guarantees as to have
a gpus gonna price essays triangles

226
00:17:01,770 --> 00:17:06,510
and it's gonna be doing lots of geometry
the same time and similar with a

227
00:17:06,510 --> 00:17:11,150
fragment processing the order exact order in which
is gonna priceless fact is not something

228
00:17:11,150 --> 00:17:16,130
you get to guarantee and it's very
paralysed that you will be doing

229
00:17:16,680 --> 00:17:17,260
sorry

230
00:17:18,940 --> 00:17:23,790
so kind of have a gpu prices to state a high level and

231
00:17:24,970 --> 00:17:29,080
i don't have the time to explain lots
of examples of using the cover if

232
00:17:29,080 --> 00:17:30,480
you have to describe a

233
00:17:31,040 --> 00:17:36,700
variations on configuring E D U but just
to introduce you to the couple plot

234
00:17:36,700 --> 00:17:41,970
line object which represents that whole
processing part by the G P A

235
00:17:42,690 --> 00:17:47,340
and we can create a peaceful pipeline
by conical pipeline you

236
00:17:48,270 --> 00:17:53,270
and to just give one example thing of for
figuring it where we are introducing

237
00:17:53,270 --> 00:17:58,520
a texture into that pricing but we're gonna
associated texture with what's known as an

238
00:17:58,520 --> 00:18:03,510
idea and this idea of layers use during the fragment
pricing stage where they can

239
00:18:03,510 --> 00:18:04,490
be combined and

240
00:18:04,930 --> 00:18:08,240
us associating attention with layers there of that

241
00:18:12,280 --> 00:18:16,090
so basically now we have all of the bits
that it takes to actually draw

242
00:18:16,090 --> 00:18:20,940
something a process similar gpu i'll just mention
frame buffer of data a primitive we

243
00:18:20,940 --> 00:18:27,280
got a processing pipeline we can call primitive
draw busting the reference to that data

244
00:18:27,280 --> 00:18:31,190
that frame buffer and is that the choice of five line

245
00:18:31,870 --> 00:18:37,340
and so that's basically that's basically it
but introducing datum pricing G P A and

246
00:18:37,340 --> 00:18:37,690
it's

247
00:18:38,090 --> 00:18:41,050
it is to distill as much as i got time to be able to

248
00:18:41,790 --> 00:18:42,790
i give you

249
00:18:43,700 --> 00:18:47,850
so the next thing i wanna talk about
the utilities at all the whites that

250
00:18:47,850 --> 00:18:52,720
go beyond just that lower level access to
the gpu hardware that trying to make

251
00:18:52,720 --> 00:18:57,530
it actually really practical to get stuff
done is just basic things a little mice

252
00:18:57,530 --> 00:19:05,440
all graphical applications need and gonna start
off by introducing the math utilities that come

253
00:19:05,440 --> 00:19:06,310
with bubble

254
00:19:07,050 --> 00:19:14,320
we have matrices api matrices of the way that
we deal with describing transformations of

255
00:19:14,320 --> 00:19:16,890
geometry in combining those transformations

256
00:19:17,770 --> 00:19:25,870
just essential stuff really matrix not build
on top of that capability and kate to

257
00:19:25,870 --> 00:19:30,410
the number of applications that want to organise
that the geometry into seeing profs

258
00:19:30,770 --> 00:19:37,270
so it's very common that you want to basically start
these transformations together is interested

259
00:19:37,270 --> 00:19:40,790
in seeing trough pushing them onto the stack
"'em" popping them as you move around

260
00:19:40,790 --> 00:19:46,170
the scene rough and this can say you re accumulating
lots of transformations about this

261
00:19:46,170 --> 00:19:48,100
is the on changing i frequency

262
00:19:49,210 --> 00:19:51,090
and that is it just

263
00:19:51,400 --> 00:19:54,330
you know use of all kinds of things
the next can be to have a

264
00:19:54,330 --> 00:19:56,210
you know it's on and dealing with that is

265
00:19:56,750 --> 00:20:02,310
rotations there are several rotation types
that we have been a couple user an example

266
00:20:02,310 --> 00:20:08,290
of a compact representation rotation comprised
of three orthogonal rotations

267
00:20:08,790 --> 00:20:14,470
and quaternions or another format it's an encoding
of an axis workstation and they have

268
00:20:14,470 --> 00:20:19,910
the nice property being able to interpolate really
smoothly between the have the pros and

269
00:20:19,910 --> 00:20:23,020
cons and but especially with quaternions

270
00:20:24,150 --> 00:20:27,900
they're pretty some pretty fancy matt's behind the it's not

271
00:20:29,340 --> 00:20:30,410
every time you need

272
00:20:33,080 --> 00:20:38,780
and colour utilities so being able to convert
from rgb take you saturation like two

273
00:20:38,780 --> 00:20:39,460
spaces

274
00:20:39,990 --> 00:20:40,490
other

275
00:20:44,810 --> 00:20:49,240
which i just snippets this is the way that
we experienced the programmable parts of

276
00:20:49,240 --> 00:20:52,810
the program will parts of the gpu

277
00:20:54,720 --> 00:20:55,570
this

278
00:20:56,310 --> 00:21:02,760
this design say that you can have multiple components
contribute into the i roll processing

279
00:21:02,760 --> 00:21:09,460
of geometry and it so cooperating within one framework so

280
00:21:09,980 --> 00:21:13,880
the way this works is that we have this
idea that points in apart line

281
00:21:13,880 --> 00:21:18,260
so examples would be vertex processing
stage where you wanna be able to

282
00:21:19,000 --> 00:21:23,000
make some it's you want to build on the people
processing of probable it but

283
00:21:23,000 --> 00:21:29,820
introduce some additional transformations for example
you can provide a small snippet of code which

284
00:21:29,820 --> 00:21:35,200
is using the G L of cell shading language
to insert into one of these

285
00:21:35,200 --> 00:21:38,270
have points in a can either replace that whole

286
00:21:38,730 --> 00:21:42,010
section replace any people processing

287
00:21:42,520 --> 00:21:46,630
or complete and or pen so that it
can cooperate without science

288
00:21:47,110 --> 00:21:50,240
and similarly for fractal processing like and set to

289
00:21:52,290 --> 00:21:53,970
and that supplied to

290
00:21:56,660 --> 00:21:58,530
and looking up textures and there are

291
00:21:58,960 --> 00:21:59,960
places as well

292
00:22:03,750 --> 00:22:06,930
clipping lots of applications once we have to restrict

293
00:22:07,470 --> 00:22:14,490
the range where they want to restrict where
the influence of drawing within the frame

294
00:22:14,490 --> 00:22:14,950
buffer

295
00:22:15,790 --> 00:22:18,240
to a certain to D regions and

296
00:22:19,970 --> 00:22:26,340
so if in cover you can click to ask align rectangles
transform rectangles this interactive

297
00:22:26,340 --> 00:22:31,610
a battery primitives to D pass describe
with fancy is awesome lines

298
00:22:33,030 --> 00:22:37,820
and similar to the matrix that we consider
the you have seen rockies cases where

299
00:22:37,820 --> 00:22:41,470
you want to be able to start these on top
of each other is interesting

300
00:22:41,470 --> 00:22:48,250
trough and effectively region is the intersection
of all of that is the company push

301
00:22:48,250 --> 00:22:49,150
regions

302
00:22:53,730 --> 00:23:01,610
rectangle patching especially when it comes to user
interface is a currently very dependent on

303
00:23:01,610 --> 00:23:04,880
using tech should rectangles as the

304
00:23:06,380 --> 00:23:12,750
so building block of most interfaces and because
gpus are not really very effective a

305
00:23:12,750 --> 00:23:17,870
practising very tiny primitives one of time
just to send a couple of triangles for

306
00:23:17,870 --> 00:23:20,640
what within separate draw close is

307
00:23:20,990 --> 00:23:26,140
is not and make good utilisation
of the of the G your hardware

308
00:23:26,770 --> 00:23:27,420
so it

309
00:23:27,760 --> 00:23:32,640
with this there is the if you well within
certain limitations i for instance with

310
00:23:32,640 --> 00:23:35,710
if you little your textures into atlas textures

311
00:23:37,760 --> 00:23:42,680
so they can all be referenced as part
of one two like one month one

312
00:23:42,680 --> 00:23:43,280
primitive

313
00:23:44,190 --> 00:23:48,240
and if you limit yourself to certain
types of clipping then in a lot of

314
00:23:48,240 --> 00:23:55,890
cases actually couple can batch almost like whole
scenes of rectangles into a single goal

315
00:23:55,890 --> 00:23:56,770
cools

316
00:23:58,100 --> 00:23:59,430
it's quite useful

317
00:24:02,250 --> 00:24:05,970
so don't have a bunch of optional sup libraries
that come with problem as well

318
00:24:06,580 --> 00:24:12,530
i mean for instance we have come up
anger which enables us to rend text

319
00:24:12,910 --> 00:24:14,910
laid out with that anger make you know i

320
00:24:15,400 --> 00:24:21,170
we have hope a which provide a test
like to have a teapot so describing

321
00:24:21,170 --> 00:24:26,180
shakes with bessie is lines and curves
and being able to get a retains object

322
00:24:26,730 --> 00:24:32,530
representing that estimation of that and being able
to redraw that without incurring repeated incurring

323
00:24:32,530 --> 00:24:34,430
the cost a test selecting that geometry

324
00:24:35,610 --> 00:24:37,590
how would you nist two thousand is to

325
00:24:38,090 --> 00:24:40,250
easily integrate a just

326
00:24:40,620 --> 00:24:45,970
regular gas to carried into the a couple
application and managing the state

327
00:24:47,270 --> 00:24:47,990
between nice

328
00:24:48,480 --> 00:24:49,290
to it you know it's

329
00:24:50,590 --> 00:24:55,700
i would use T is a recent addition
which i i'm speedier integration

330
00:24:56,050 --> 00:24:59,590
so couple based on the G stream a framework

331
00:25:02,270 --> 00:25:06,580
so now ago three some of the much more recent
things that we've been developing

332
00:25:06,580 --> 00:25:11,130
just say you know idea of where the focus
is a and where it's going

333
00:25:12,290 --> 00:25:18,340
so that's the yes i thanks to find
a at the beginning of this year

334
00:25:18,340 --> 00:25:21,520
we introduced a couple frame info right you know i

335
00:25:21,970 --> 00:25:28,240
and it's this is about being up to get asynchronously
extra information about frame is

336
00:25:28,240 --> 00:25:31,280
completed so for instance when we went to remove

337
00:25:32,120 --> 00:25:35,470
also possible frame of the impostor to be displayed

338
00:25:36,080 --> 00:25:40,520
and it takes some time before that can
post a response and gets that frame

339
00:25:40,520 --> 00:25:45,110
actually displayed on to the monitor and
we'd like to know too well what's the

340
00:25:45,110 --> 00:25:49,380
time stamp when that really hit the display
and get that but we have location

341
00:25:49,380 --> 00:25:53,270
so that it can be a bit smarter
about our rest is animations

342
00:25:53,700 --> 00:25:59,280
based on the prediction or when that frame
is really gonna hit the physical display

343
00:25:59,280 --> 00:26:01,450
see you have these

344
00:26:03,190 --> 00:26:03,570
i think

345
00:26:05,270 --> 00:26:13,060
thanks to kind of stay in for contributing
offence compensate pi two call this allows

346
00:26:13,060 --> 00:26:18,140
us to insert marcus into the come on stream
that was sending to the G

347
00:26:18,140 --> 00:26:18,500
P A

348
00:26:19,620 --> 00:26:23,350
so that we can have a bunch of what that
we're interested in knowing when

349
00:26:23,350 --> 00:26:25,370
the G is finish processing this way

350
00:26:26,000 --> 00:26:30,140
since when that work is finished then
we can get a call back into the

351
00:26:30,140 --> 00:26:31,870
application to be able to

352
00:26:32,230 --> 00:26:36,940
i respond to that and the use case they
had this was for video integration

353
00:26:36,940 --> 00:26:38,870
where they wanted to be have to make sure that

354
00:26:39,950 --> 00:26:46,990
but the gpu had finish any something the need
to do a certain textures before

355
00:26:46,990 --> 00:26:51,360
was handed back to the video decoder
library to avoid conflict

356
00:26:55,600 --> 00:27:00,150
thanks to i mean a man a lot of one of the interns so we've

357
00:27:00,150 --> 00:27:06,630
been working with recently and saxony a lot
that's the supporting i'll at this work

358
00:27:07,420 --> 00:27:09,390
for G S T

359
00:27:10,070 --> 00:27:14,180
on speedier integration to couple and it's it works

360
00:27:14,780 --> 00:27:20,110
particular well with to pay particular attention
to making sure that it works nicely with

361
00:27:20,110 --> 00:27:25,100
the state i the eyes and with multi
texturing side it is a lot of

362
00:27:25,100 --> 00:27:26,670
freedom to

363
00:27:27,680 --> 00:27:34,370
i will all kinds of your own custom affects
and things that will be involved

364
00:27:34,370 --> 00:27:39,200
in a rendering of a video frame so if
you wanted to do from processing

365
00:27:39,200 --> 00:27:44,810
like be saturating contrast brightness that
kind of thing and trade is you don't wanna

366
00:27:44,810 --> 00:27:49,080
have intimated rents we listing so you need
a cooperative system to allow you to

367
00:27:49,080 --> 00:27:50,310
combine these effects

368
00:27:50,610 --> 00:27:51,360
one

369
00:27:55,900 --> 00:28:00,990
and as you have the use cases this
was for project called break sure

370
00:28:01,680 --> 00:28:02,800
mention that

371
00:28:05,780 --> 00:28:07,450
so what you have is

372
00:28:07,960 --> 00:28:12,620
another thing that were exploring at the moment
there's a project that where this using

373
00:28:12,620 --> 00:28:20,120
couple that i'm working on who rate which
is i you are rendering engine and

374
00:28:20,120 --> 00:28:28,490
provides interactive tooling for designers for improving
the web design where were exploring more advanced

375
00:28:28,490 --> 00:28:32,860
uses of the G P are in the context
if you i development and it's

376
00:28:32,860 --> 00:28:41,210
we're interested in supporting a number of homes and
even we're interested in exploring supporting

377
00:28:41,210 --> 00:28:42,470
web applications

378
00:28:43,040 --> 00:28:46,880
it's an expiration price my remember
where i will be possible and okay

379
00:28:49,640 --> 00:28:51,730
so what's next

380
00:28:52,730 --> 00:28:56,940
so something that i always stripe in the way that

381
00:28:58,650 --> 00:29:03,800
in terms of maintaining the project and driving
a project for this is ensuring that

382
00:29:03,800 --> 00:29:06,860
the feature what we develop

383
00:29:07,350 --> 00:29:12,960
it's really driven by the projects work the requirements
of projects are actually using so

384
00:29:12,960 --> 00:29:17,800
we don't wanna be planning architecture astronauts
just coming up with fun stuff like that

385
00:29:17,800 --> 00:29:22,110
we wanna actually have a reason why we develop
any particular feature so the ounce

386
00:29:22,110 --> 00:29:27,690
really this question is to consider
the people using the cover like my

387
00:29:29,580 --> 00:29:32,940
the for new uses a couple will take it and you directions

388
00:29:34,920 --> 00:29:39,220
so some of the current users a couple that implements it

389
00:29:39,820 --> 00:29:44,660
we have a lot to obviously are the do the first user couple

390
00:29:45,050 --> 00:29:51,330
and it's even today the that's a influencing
certain things for instance the high dpi

391
00:29:51,330 --> 00:29:55,750
stuff so i guess they will need to make
some small changes to the called

392
00:29:55,750 --> 00:29:58,670
tango at are to consider a

393
00:29:59,850 --> 00:30:01,950
the size of clips that we tool

394
00:30:03,820 --> 00:30:08,730
but there is a special use case of a couple
especially when we consider the

395
00:30:08,730 --> 00:30:10,030
recent web two wraps

396
00:30:10,320 --> 00:30:13,220
name show that way to support and i'm show

397
00:30:14,000 --> 00:30:18,720
and that the bonds a bunch of the feature
well as well in kabul

398
00:30:19,930 --> 00:30:24,280
well who is not something i'm working
on activity at the moment but it so

399
00:30:24,280 --> 00:30:27,840
i wanted to mention it just because
i did put quite a bit of work

400
00:30:27,840 --> 00:30:32,270
into this a few years ago and it was
an interesting project it really do

401
00:30:32,270 --> 00:30:33,610
that should drive quite a lot of

402
00:30:34,570 --> 00:30:36,020
thank you think over the time

403
00:30:36,660 --> 00:30:41,380
and this was adding a gpu acceleration back
into card was taking a different approach

404
00:30:41,380 --> 00:30:45,740
to carry G L and are generally have said
making some different tradeoffs

405
00:30:47,060 --> 00:30:52,190
but it did some interesting things to do if
retaining the translations of parts and

406
00:30:52,940 --> 00:30:57,540
trying to be a little bit okay well about
using the fix function possibly gpu

407
00:30:57,540 --> 00:30:58,590
for gradients and

408
00:30:58,830 --> 00:31:00,220
the be a bit more efficient

409
00:31:03,150 --> 00:31:06,480
i would say much about you best "'cause"
i guess not many people here about

410
00:31:06,480 --> 00:31:12,130
that but you know robert's writer back and for E best the

411
00:31:13,290 --> 00:31:13,520
i

412
00:31:14,870 --> 00:31:18,470
this is like a couple years ago we played
around this is yet not really

413
00:31:18,470 --> 00:31:23,900
got serious use case but it was interesting
the time because and there's actually some

414
00:31:23,900 --> 00:31:29,250
slightly nifty things that you best dates to
do with matching actually which we were

415
00:31:29,250 --> 00:31:30,080
interested

416
00:31:31,790 --> 00:31:32,140
"'cause"

417
00:31:33,250 --> 00:31:33,450
so

418
00:31:34,410 --> 00:31:40,680
and so a much more recent projects that
working on this week which i mentioned

419
00:31:40,680 --> 00:31:44,940
just briefly it's a okay and i don't
hide for this project to be quite

420
00:31:44,940 --> 00:31:48,970
a big driver a couple going forward actually

421
00:31:49,730 --> 00:31:55,750
that mission here is to really explore in the context
of user interface development how

422
00:31:55,750 --> 00:32:00,270
we can use more features of the G
U and how we can also optimized

423
00:32:00,270 --> 00:32:08,530
the web fly between design is prototyping but
at the moment without many constraints this

424
00:32:08,530 --> 00:32:11,370
to the technology used in the end and

425
00:32:13,020 --> 00:32:15,010
creating interactive tools

426
00:32:16,540 --> 00:32:21,910
the hell optimize are what are even connecting
we to sort of devices i network

427
00:32:21,910 --> 00:32:22,240
and such

428
00:32:22,640 --> 00:32:23,210
things

429
00:32:23,880 --> 00:32:24,640
and

430
00:32:25,430 --> 00:32:26,020
so

431
00:32:26,550 --> 00:32:27,220
right about that

432
00:32:28,030 --> 00:32:28,890
big driver

433
00:32:31,040 --> 00:32:36,520
so those of the project striving that's night
it sort of update for the projects

434
00:32:37,820 --> 00:32:43,890
and so i'm entrance it's in it if anyone's
interested in this kind of thing

435
00:32:43,890 --> 00:32:47,420
graphics processing and it's especially a

436
00:32:48,400 --> 00:32:52,710
why and this audience in the context
of user interface development

437
00:32:54,220 --> 00:32:58,980
i'd love to invite people to learn more about the G P A

438
00:32:59,810 --> 00:33:05,300
and contribute to call i've either directly
or through downstream projects

439
00:33:05,720 --> 00:33:09,340
and creating a more that downstream projects and we

440
00:33:10,560 --> 00:33:11,610
we called wants

441
00:33:12,140 --> 00:33:17,450
so join us about join the mailing list get
involved in discussions during this and

442
00:33:17,450 --> 00:33:18,580
i have see we

443
00:33:19,290 --> 00:33:24,040
created a channel for call dedicate the corpus
the other day about time really just

444
00:33:24,040 --> 00:33:24,780
the program

445
00:33:28,240 --> 00:33:31,990
trying to send a message on again off
together and say for us on better

446
00:33:31,990 --> 00:33:36,270
if you just want to i project and there's a website now

447
00:33:36,860 --> 00:33:40,450
find what you what you will we we're
gonna probably try and i mean it

448
00:33:40,450 --> 00:33:44,050
but the labour office i dare easy

449
00:33:44,690 --> 00:33:45,470
which will time

450
00:33:46,300 --> 00:33:49,760
nine what to make it as easy as possible

451
00:33:53,530 --> 00:33:54,100
so

452
00:33:55,140 --> 00:33:55,800
that i'm sorry

453
00:33:56,510 --> 00:33:57,350
any questions

454
00:34:06,830 --> 00:34:08,120
gonna task

455
00:34:09,080 --> 00:34:10,850
the this building

456
00:34:19,230 --> 00:34:21,520
what this piece to me

457
00:34:22,960 --> 00:34:25,210
well are you use the

458
00:34:26,120 --> 00:34:31,940
even if you're using name show the patching
that it provides a would make it

459
00:34:31,940 --> 00:34:32,940
more question

460
00:34:33,440 --> 00:34:34,990
it's gonna you to better

461
00:34:39,670 --> 00:34:40,880
any if they have

462
00:34:41,280 --> 00:34:44,320
that's really might want to use it i
mean talk to provide the facts for

463
00:34:44,320 --> 00:34:49,280
example to be saturate colours and if any of those we use

464
00:34:52,450 --> 00:34:53,320
single that

465
00:34:54,450 --> 00:34:59,640
so those changes all search about we
don't need to do anything on top of

466
00:34:59,640 --> 00:35:02,300
it to reduce power consumption for example

467
00:35:02,830 --> 00:35:03,220
well it

468
00:35:03,860 --> 00:35:06,330
it's is a magical you know

469
00:35:06,710 --> 00:35:07,840
well there's a

470
00:35:08,220 --> 00:35:10,070
there's a lot that went into

471
00:35:11,030 --> 00:35:15,120
the patching for instance which
is the main thing i guess that

472
00:35:15,650 --> 00:35:21,070
think things like mention anything using that's
are gonna take advantage of there's quite a

473
00:35:21,070 --> 00:35:24,610
few things that need to come together to
make that works not just having support

474
00:35:24,610 --> 00:35:25,990
a that's textures that so

475
00:35:26,350 --> 00:35:31,230
whole bunch of hassle to support other
stuff like being able to expand from i

476
00:35:31,230 --> 00:35:35,020
have a an embedded open G L E S
device and it only supports non

477
00:35:35,020 --> 00:35:39,840
power to text is a and there's tons
of gpus arnie support that kind of

478
00:35:39,840 --> 00:35:40,360
limited

479
00:35:40,740 --> 00:35:46,380
actually a pretty so we have a high level
textures in couple where we can

480
00:35:46,380 --> 00:35:50,980
slide sections that when you have limited
hardware so that you don't have to care

481
00:35:50,980 --> 00:35:55,750
about that because the you i just want to
draw rectangles with images that have

482
00:35:55,750 --> 00:36:01,050
a battery sizes and not have to figure
out how to slice that stuff up

483
00:36:01,050 --> 00:36:03,410
to be of the map to some

484
00:36:04,060 --> 00:36:05,230
limited hard website

485
00:36:06,060 --> 00:36:07,480
it's quite a few things that

486
00:36:08,590 --> 00:36:09,660
really make job

487
00:36:10,480 --> 00:36:11,900
something like show

488
00:36:12,920 --> 00:36:13,350
easier

489
00:36:15,030 --> 00:36:18,440
does also help a lot with the stuff like video

490
00:36:19,580 --> 00:36:20,820
i feel like that

491
00:36:21,760 --> 00:36:25,960
well the code you see stuff is actually
gonna be used but not the G

492
00:36:25,960 --> 00:36:32,210
S T a line also data that so if
you're using that then it would

493
00:36:32,210 --> 00:36:36,310
be involved in video right it's also gonna
and a bunch of things now they're

494
00:36:36,310 --> 00:36:39,260
not the G S T could never do we always which it is

495
00:36:40,260 --> 00:36:44,100
no we didn't really think you very
carefully what we originally right

496
00:36:45,090 --> 00:36:50,880
okay so especially that idea of being able
to come should be have multiple components

497
00:36:50,880 --> 00:36:57,420
contributed effects videos that at the moment
there is no cooperative system to allow so

498
00:36:57,420 --> 00:36:57,530
you

499
00:36:58,230 --> 00:37:01,670
different G stream elements to contribute to that right

500
00:37:01,980 --> 00:37:05,800
for video tape or something like cheese
that might want to start a bunch of

501
00:37:05,800 --> 00:37:12,970
affects together you at them i mean you'd be
doing that by accumulating multiple ranges

502
00:37:13,300 --> 00:37:14,130
to trying to you

503
00:37:14,760 --> 00:37:18,260
those kinds affects a certain form of power
efficiency point to be if you want

504
00:37:18,260 --> 00:37:21,810
to have multiple of facts about the video
did not make a big difference and

505
00:37:21,810 --> 00:37:25,390
that's just the right way to do it it's
just that without co operative system

506
00:37:25,390 --> 00:37:26,070
for prime contracts

507
00:37:26,770 --> 00:37:28,220
that's a difficult problem

508
00:37:30,700 --> 00:37:34,710
so it is a nice one it's a recent development
the logistic stuff we needed

509
00:37:34,710 --> 00:37:36,520
to be have to support video effect

510
00:37:36,990 --> 00:37:37,510
and rate

511
00:37:40,070 --> 00:37:42,910
i think that'll be interesting to see if people to pick up

512
00:37:51,210 --> 00:37:51,320
and

