Earlier GPUs generally included two types of shader hardware, with the
vertex shaders having considerably more instructions than the simpler
pixel shaders. This lowered the cost of implementation of the GPU as a whole, and allowed more shaders in total on a single unit. This was at the cost of making the system less flexible, and sometimes leaving one set of shaders idle if the workload used one more than the other. As improvements in
fabrication continued, this distinction became less useful.
ATI Technologies introduced a unified architecture on the hardware they developed for the
Xbox 360.
Nvidia quickly followed with their
Tesla design. AMD introduced a unified shader in card form two years later in the
TeraScale line. The concept has been universal since then. Early shader abstractions (such as Shader Model 1.x) used very different instruction sets for vertex and pixel shaders, with vertex shaders having much more flexible instruction set. Later shader models (such as Shader Model 2.x and 3.0) reduced the differences, approaching unified shader model. Even in the unified model the instruction set may not be completely the same between different shader types; different shader stages may have a few distinctions. Fragment/pixel shaders can compute implicit texture coordinate gradients, while geometry shaders can emit rendering primitives. == Unified shader architecture ==