i
i
i
i
i
i
i
i
3.3. The Evolution of Programmable Shading 35
Shader Model to distinguish hardware with different shader capabilities.
The GeForce 3 supported vertex shader model 1.1 and pixel shader model
1.1 (shader model 1.0 was intended for hardware that never shipped). Dur-
ing 2001, GPUs progressed closer to a general pixel shader programming
model. DirectX 8.1 added pixel shader models 1.2 to 1.4 (each meant for
different hardware), which extended the capabilities of the pixel shader
further, adding additional instructions and more general support for de-
pendent texture reads.
The year 2002 saw the release of DirectX 9.0 including Shader Model 2.0
(and its extended version 2.X), which featured truly programmable vertex
and pixel shaders. Similar functionality was also exposed under OpenGL
using various extensions. Support for arbitrary dependent texture reads
and storage of 16-bit floating point values was added, finally completing
the set of requirements identified by Peercy et al. in 2000 [993]. Limits
on shader resources such as instructions, textures, and registers were in-
creased, so shaders became capable of more complex effects. Support for
flow control was also added. The growing length and complexity of shaders
made the assembly programming model increasingly cumbersome. For-
tunately, DirectX 9.0 also included a new shader programming language
called HLSL (High Level Shading Language). HLSL was developed by
Microsoft in collaboration with NVIDIA, which released a cross-platform
variant called Cg [818]. Around the same time, the OpenGL ARB (Archi-
tecture Review Board) released a somewhat similar language for OpenGL,
called GLSL [647, 1084] (also known as GLslang). These languages were
heavily influenced by the syntax and design philosophy of the C program-
ming language and also included elements from the RenderMan Shading
Language.
Shader Model 3.0 was introduced in 2004 and was an incremental im-
provement, turning optional features into requirements, further increas-
ing resource limits and adding limited support for texture reads in vertex
shaders. When a new generation of game consoles was introduced in late
2005 (Microsoft’s Xbox 360) and 2006 (Sony Computer Entertainment’s
PLAYSTATION
R
3 system), they were equipped with Shader Model 3.0–
level GPUs. The fixed-function pipeline is not entirely dead: Nintendo’s
Wii console shipped in late 2006 with a fixed-function GPU [207]). How-
ever, this is almost certainly the last console of this type, as even mobile de-
vices such as cell phones can use programmable shaders (see Section 18.4.3).
Other languages and environments for shader development are available.
For example, the Sh language [837, 838] allows the generation and combi-
nation [839] of GPU shaders through a C++ library. This open-source
project runs on a number of platforms. On the other end of the spectrum,
several visual programming tools have been introduced to allow artists
(most of whom are not comfortable programming in C-like languages) to