An accelerator or coprocessor is a processing unit that performs a specific task or series of tasks in less time than the main processor, in addition to doing so taking up much less space and consumption than using a general-purpose processor. for that.
In GPUs, what comes closest to a general purpose GPU are the computational units where shader programs run, but some graphics tasks are performed by specialized units.
Fixed function units on a GPU
To understand how graphics are rendered, we have to understand that it works like a factory that produces in different stages, think of the different triangles that make up the scene in a bun that is molded and baked until it reaches the final packaging, but at the instead of a bun what we have is a picture on the screen.
There are two types of steps in a GPU, some are performed through a shader program in Compute Units or SM, others use fixed function units. The process is led by the control processors which are the units that move data through the GPU in the various stages of the graphics pipeline.
Each GPU unit, whether it is a fixed function or a compute unit, receives input data which is processed by a program. In the case of accelerators or fixed function units, what they do is apply a program that already has firmware that was installed by the GPU manufacturer.
Fixed function units in a GPU
Here we make a list of the most common and most used fixed function units in a GPU.
Without them, it would be the computing units via shader programs that would have to perform these tasks, requiring a larger chip and consuming more energy.
Fixed functional unit for rasterization
They are responsible for taking the triangles and turning them into fragments, which involves projecting them onto the camera to turn them into a group of pixels that the GPU will then need to colorize.
It is one of the most complex stages of 3D graphics and its implementation in the form of a dedicated accelerator is what led to the birth of 3D graphics cards.
Fixed functional unit for texture filtering
It is normally located in the computing unit, connected to the data cache, its job is to apply the bilinear and trilinear anisotropic filter. It is based on taking multiple pixel samples to do its job.
All contemporary GPUs use texture units grouped 4 by 4, with 16 connections to the data cache, allowing you to apply the bilinear filter at 100% texturing rate, the trilinear filter at 50% and the anisotropic 25 %.
They are also combined with the calculation units to run Pixel or Fragment Shader programs, from which the values of the textures are manipulated.
Fixed function unit for tessellation
It’s responsible for doing what we call surface subdivision, which involves dividing the vertices of a model into several different vertices without losing its original shape.
The tessellation unit works before the raster unit and is a double-edged sword because excessive tessellation is unnecessary on very distant objects and can cause a bottleneck with the raster unit.
On the other hand, more advanced tessellation units can apply displacement mapping, which is the generation of geometry in a model from a displacement map, and even generate particles.
It is responsible for eliminating the superfluous geometry of the scene, that is, the one that is too small, is hidden by another element that prevents its visualization or is outside the scene.
Your job is to remove the triangles that meet these three requirements from the screen list.
The Raster OutPut or ROP is a unit in charge of generating the image buffers, so it is a unit that can write directly to VRAM, although in more contemporary GPUs it can do so on the L2 cache and in the case of Tiles. Renderers do this in internal memory of the GPU itself.
It works in two stages during the pipeline, the first in the rasterization phase where it generates the Z-Buffer, an image buffer that indicates how far each element in the scene is from the camera. The second after texturing where it generates the color buffers in RGBA format.
Spoke intersection unit for ray tracing
This is the unit in charge of calculating the intersection of rays with surfaces in Ray Tracing, we have in Hardzone a tutorial on its operation, you can find it like “How and how do RT Cores for Ray Tracing work?“