1
00:00:00,000 --> 00:00:03,280
And most of you will know that you can build your own PC.

2
00:00:03,280 --> 00:00:07,480
But have you ever thought about building your own graphics card at home?

3
00:00:07,480 --> 00:00:11,800
Sounds absolutely crazy, but one guy actually did this recently.

4
00:00:11,800 --> 00:00:16,920
Software engineer Dylan Berry has put together a fully assembled prototype he calls Fury

5
00:00:16,920 --> 00:00:21,920
GPU. And we sat down with him to find out exactly how he pulled this off.

6
00:00:21,920 --> 00:00:29,120
The heart of the Fury GPU design is a custom Zinc Ultra Scale Plus FPGA from Xilinx, which

7
00:00:29,120 --> 00:00:35,960
is now an AMD brand. And if you're not sure what an FPGA is, it stands for Field Programmable Gate Array.

8
00:00:35,960 --> 00:00:41,120
Essentially, it's a device that you can configure to be more specialized for certain applications,

9
00:00:41,120 --> 00:00:45,760
as opposed to a more typical desktop CPU that's designed in a more general way so it can run

10
00:00:45,760 --> 00:00:53,240
many different types of applications. The FPGA does include a small ARM processor that can run Linux, but the rest of it can

11
00:00:53,240 --> 00:00:58,880
be programmed to render graphics with a hardware description language, or HDL, which tells

12
00:00:58,880 --> 00:01:04,960
the FPGA how to actually organize its internal circuitry, small cells that can accept many

13
00:01:04,960 --> 00:01:12,120
different types of logic functions. Using his knowledge of graphics engineering, Berry was able to build an architecture optimized

14
00:01:12,120 --> 00:01:17,540
for graphics rendering, a process that took over three years, starting from simply getting

15
00:01:17,540 --> 00:01:22,800
an image on a screen, then building in support for drawing polygons, applying textures, and

16
00:01:22,800 --> 00:01:30,480
blending textures together. Because commercial GPU designs are trade secrets, Berry had to completely start from scratch

17
00:01:30,480 --> 00:01:35,600
instead of using a current GPU as a starting point, explaining why it took so long.

18
00:01:35,600 --> 00:01:40,720
But once the FPGA is completed, you of course need an actual board to install it on so it

19
00:01:40,720 --> 00:01:46,800
can act as a functional graphics card, since, you know, you can't just insert a bare FPGA

20
00:01:46,800 --> 00:01:51,040
into a regular motherboard. I mean, you can, it just, you're not gonna have a good time.

21
00:01:51,040 --> 00:01:56,840
Therefore, Berry also designed Fury GPU's board, a process he said took around one month

22
00:01:56,840 --> 00:02:01,440
and involved thinking carefully about how to lay components out on the board.

23
00:02:01,440 --> 00:02:07,080
Details like trace length were very important, as the various traces that feed the PCIe connector

24
00:02:07,080 --> 00:02:11,000
need to be very similar in length to help with signal integrity.

25
00:02:11,000 --> 00:02:15,200
Placement of these traces was also important to avoid crosstalk, you don't want them

26
00:02:15,200 --> 00:02:19,160
too close together, and he also had to consider what kind of power supplies to put on the

27
00:02:19,160 --> 00:02:25,160
card, as the FPGA itself needs a different voltage compared to the display outs.

28
00:02:25,160 --> 00:02:30,880
After Berry got his board design right, he then sent the files off to a PCB fab in China

29
00:02:30,880 --> 00:02:33,960
and got back, well, some PCBs.

30
00:02:33,960 --> 00:02:38,880
But keep in mind, these were only boards, meaning that to get a working graphics card,

31
00:02:38,880 --> 00:02:45,200
he had to install over 400 individual components such as capacitors and resistors himself,

32
00:02:45,200 --> 00:02:48,400
which of course involved lots of tedious soldering.

33
00:02:48,400 --> 00:02:53,080
Selling and testing the hardware itself took Berry around another two months, but at the

34
00:02:53,080 --> 00:02:57,520
end, he had a card that wasn't too different looking from some graphics cards from the

35
00:02:57,520 --> 00:03:03,720
1990s, but with modern display outs and PCI Express X4 support.

36
00:03:03,720 --> 00:03:09,000
And although current commercial graphics cards typically use X16, Fury GPU gets away with

37
00:03:09,000 --> 00:03:14,160
X4, as it moves far less data than the GPU you probably have in your desktop rig.

38
00:03:14,480 --> 00:03:19,520
We're talking less than one megabyte per frame, as it was designed with mid-90s games

39
00:03:19,520 --> 00:03:25,720
in mind. But even a perfectly executed piece of hardware is useless without the right software.

40
00:03:25,720 --> 00:03:31,120
Like any graphics card, Fury GPU needs some kind of driver in order to run.

41
00:03:31,120 --> 00:03:34,400
Berry said it took him about four months to get the drivers to work.

42
00:03:34,400 --> 00:03:40,200
Windows typically requires drivers to use an architecture called WDDM, and that requires

43
00:03:40,200 --> 00:03:44,760
support for hardware features you'd only find in mass-produced GPUs, such as support

44
00:03:44,760 --> 00:03:53,120
for modern versions of Direct 3D. To get around this, the Fury GPU driver is designed such that Windows instead sees it

45
00:03:53,120 --> 00:03:58,240
as a kernel mode display-only driver, which basically means that it will consider Fury

46
00:03:58,240 --> 00:04:04,360
GPU as being a simpler device that just displays an image instead of doing any actual rendering.

47
00:04:04,360 --> 00:04:11,080
However, the driver itself can switch modes and allow the GPU to actually render frames,

48
00:04:11,080 --> 00:04:15,480
so it kind of tricks Windows into thinking it's just showing the desktop when it's

49
00:04:15,480 --> 00:04:19,000
actually showing the game you're playing.

50
00:04:19,000 --> 00:04:26,120
Gamecheats Enabled The final product uses a custom API that's similar to Vulkan, and Berry was able to modify

51
00:04:26,120 --> 00:04:32,280
the renderer for the original Quake from 1996, getting it to run at 720p at around 60 frames

52
00:04:32,280 --> 00:04:37,640
per second. Unfortunately, it doesn't yet support modern shaders, which would allow for more lighting

53
00:04:37,640 --> 00:04:40,720
effects and other kinds of eye candy we're all used to today.

54
00:04:40,720 --> 00:04:46,440
Berry told us that shader support may be coming in the future, but FPGAs have their limits

55
00:04:46,440 --> 00:04:51,900
compared to mainstream GPUs, as they sacrifice performance for customizability.

56
00:04:51,900 --> 00:04:57,840
We may also see other games from the mid-90s get ported over to the Fury GPU, but can you

57
00:04:57,840 --> 00:05:01,360
actually get your hands on a Fury GPU and play games on it?

58
00:05:01,360 --> 00:05:06,760
I'm sure you're asking. We made it clear that this is mostly a passion project, and that he doesn't have plans

59
00:05:06,760 --> 00:05:12,160
to produce the Fury GPU for sale, especially as it's a continual work in progress that's

60
00:05:12,160 --> 00:05:16,800
currently being operated in a full development environment, so it's not like you can just

61
00:05:16,800 --> 00:05:21,280
slot it into your Windows PC, install the drivers, and have everything work flawlessly.

62
00:05:21,280 --> 00:05:26,640
Still, it's a super cool testament to what you can accomplish with enough time, effort,

63
00:05:26,640 --> 00:05:33,480
and patience with a soldering iron. Thanks for watching. If you liked the video, check out our other video on how CPUs and GPUs are different.

64
00:05:33,480 --> 00:05:37,120
Comment below with video suggestions, and don't forget to subscribe and follow TechWiki.

65
00:05:37,120 --> 00:05:41,520
You've watched a couple of other videos and you didn't do that, so don't forget.
