WEBVTT

00:00:00.000 --> 00:00:03.280
And most of you will know that you can build your own PC.

00:00:03.280 --> 00:00:07.480
But have you ever thought about building your own graphics card at home?

00:00:07.480 --> 00:00:11.800
Sounds absolutely crazy, but one guy actually did this recently.

00:00:11.800 --> 00:00:16.920
Software engineer Dylan Berry has put together a fully assembled prototype he calls Fury

00:00:16.920 --> 00:00:21.920
GPU. And we sat down with him to find out exactly how he pulled this off.

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

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.

00:00:35.960 --> 00:00:41.120
Essentially, it's a device that you can configure to be more specialized for certain applications,

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

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

00:00:53.240 --> 00:00:58.880
be programmed to render graphics with a hardware description language, or HDL, which tells

00:00:58.880 --> 00:01:04.960
the FPGA how to actually organize its internal circuitry, small cells that can accept many

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

00:01:12.120 --> 00:01:17.540
for graphics rendering, a process that took over three years, starting from simply getting

00:01:17.540 --> 00:01:22.800
an image on a screen, then building in support for drawing polygons, applying textures, and

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

00:01:30.480 --> 00:01:35.600
instead of using a current GPU as a starting point, explaining why it took so long.

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

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

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.

00:01:51.040 --> 00:01:56.840
Therefore, Berry also designed Fury GPU's board, a process he said took around one month

00:01:56.840 --> 00:02:01.440
and involved thinking carefully about how to lay components out on the board.

00:02:01.440 --> 00:02:07.080
Details like trace length were very important, as the various traces that feed the PCIe connector

00:02:07.080 --> 00:02:11.000
need to be very similar in length to help with signal integrity.

00:02:11.000 --> 00:02:15.200
Placement of these traces was also important to avoid crosstalk, you don't want them

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

00:02:19.160 --> 00:02:25.160
card, as the FPGA itself needs a different voltage compared to the display outs.

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

00:02:30.880 --> 00:02:33.960
and got back, well, some PCBs.

00:02:33.960 --> 00:02:38.880
But keep in mind, these were only boards, meaning that to get a working graphics card,

00:02:38.880 --> 00:02:45.200
he had to install over 400 individual components such as capacitors and resistors himself,

00:02:45.200 --> 00:02:48.400
which of course involved lots of tedious soldering.

00:02:48.400 --> 00:02:53.080
Selling and testing the hardware itself took Berry around another two months, but at the

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

00:02:57.520 --> 00:03:03.720
1990s, but with modern display outs and PCI Express X4 support.

00:03:03.720 --> 00:03:09.000
And although current commercial graphics cards typically use X16, Fury GPU gets away with

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.

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

00:03:19.520 --> 00:03:25.720
in mind. But even a perfectly executed piece of hardware is useless without the right software.

00:03:25.720 --> 00:03:31.120
Like any graphics card, Fury GPU needs some kind of driver in order to run.

00:03:31.120 --> 00:03:34.400
Berry said it took him about four months to get the drivers to work.

00:03:34.400 --> 00:03:40.200
Windows typically requires drivers to use an architecture called WDDM, and that requires

00:03:40.200 --> 00:03:44.760
support for hardware features you'd only find in mass-produced GPUs, such as support

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

00:03:53.120 --> 00:03:58.240
as a kernel mode display-only driver, which basically means that it will consider Fury

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.

00:04:04.360 --> 00:04:11.080
However, the driver itself can switch modes and allow the GPU to actually render frames,

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

00:04:15.480 --> 00:04:19.000
actually showing the game you're playing.

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

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

00:04:32.280 --> 00:04:37.640
per second. Unfortunately, it doesn't yet support modern shaders, which would allow for more lighting

00:04:37.640 --> 00:04:40.720
effects and other kinds of eye candy we're all used to today.

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

00:04:46.440 --> 00:04:51.900
compared to mainstream GPUs, as they sacrifice performance for customizability.

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

00:04:57.840 --> 00:05:01.360
actually get your hands on a Fury GPU and play games on it?

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

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

00:05:12.160 --> 00:05:16.800
currently being operated in a full development environment, so it's not like you can just

00:05:16.800 --> 00:05:21.280
slot it into your Windows PC, install the drivers, and have everything work flawlessly.

00:05:21.280 --> 00:05:26.640
Still, it's a super cool testament to what you can accomplish with enough time, effort,

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.

00:05:33.480 --> 00:05:37.120
Comment below with video suggestions, and don't forget to subscribe and follow TechWiki.

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.
