This SIGGRAPH 2004 paper by Buck et al. presents Brook for GPUs, a system for general-purpose computation on programmable graphics hardware. Brook extends C to include simple data-parallel constructs, enabling the use of the GPU as a streaming coprocessor. The paper presents a compiler and runtime system that abstracts and virtualizes many aspects of graphics hardware. In addition, the paper provides analysis of the effectiveness of the GPU as a compute engine compared to the CPU, to determine when the GPU can outperform the CPU for a particular algorithm. The paper evaluates the system with five applications, the SAXPY and SGEMV BLAS operators, image segmentation, FFT, and ray tracing. For these applications, the Brook implementations perform comparably to hand-written GPU code and up to seven times faster than their CPU counterparts. (Brook for GPUs: Stream Computing on Graphics Hardware. Ian Buck, Tim Foley, Daniel Horn, Jeremy Sugerman, Kayvon Fatahalian, Mike Houston, and Pat Hanrahan. To appear at SIGGRAPH 2004.)
TyphoonLabs has released version 1.3 of the OpenGL Shader Designer, an integrated development environment for GPU fragment and vertex shaders in GLSL (the OpenGL shading language). Key features include plugins for vertex attributes (tangents, binormals, etc.), textures (noise, volumes, etc.), real-time preview with multiple light sources, full syntax highlighting and “intellisense” for GLSL, and much more! (OpenGL Shader Designer 1.3)
ShaderTech.com is a new site that’s focused on real-time shader development, providing numerous resources such as articles, forums, books, tools, and more. Because there are now several very capable high-level shading languages in active use by developers, ShaderTech aims to support the entire GPU development community regardless of shader language.
This SIGGRAPH 2004 paper by McCool et al. describes a “Shader Algebra”, Sh’s system for manipulating shaders (functional composition, specialization, etc.) and doing stream programming. Sh has recently added operators to combine shaders and to apply shaders to streams. Sh now also manages buffers, enabling more convenient general-purpose stream processing. Stream processing is supported on both the GPU and on the CPU (using just-in-time compilation in both cases). The operators, in conjunction with the optimizer, glue shaders, and special “manipulator” support functions, can support a variety of useful operations including shader specialization, redundancy elimination, and I/O adaptation. (Shader Algebra preprint and talk preview.)
The Cg Toolkit allows developers to write and run shader programs using a wide variety of hardware platforms and graphics APIs. This release introduces several significant new features:
- Interfaces, a language construct that facilitates the creation of
general, reconfigurable Cg programs
- Unsized arrays
- Parameter instances may be created and shared between multiple programs
- Parameters may be marked as compile-time constants, leading to more efficient compiled code
- Support for x86 Linux (Red Hat 7.1 or later etc) and Mac OS X Panther
Be sure to check out the CgReleaseNotes and CgManualAddendum in the documents package for full details. (NVIDIA Cg Toolkit 1.2)
Brook for GPUs is an active research project at the Stanford University Computer Graphics Lab to explore general-purpose computing on modern programmable graphics hardware. BrookGPU is a compiler and runtime implementation of the Brook stream programming language which provides an easy, C-like programming environment for today’s GPU. The beta version of Brook for GPUs is now available for download at the link below. Brook requires no graphics or GPU programming experience, and supports both ATI Radeon 9500+ and NVIDIA GeForce FX /Quadro FX hardware, using both DirectX and OpenGL APIs. BrookGPU has a complete fallback CPU implementation. (Brook for GPUs.)
Sh is a metaprogramming language for programmable GPUs, developed at the University of Waterloo. From the “About Sh” page: “A high-level language allows programming GPUs with familiar constructs and syntax, without worrying about the details of the hardware. Sh is such a high-level language. It offers the convenient syntax of C++ and takes the burden of register allocation and other low-level issues away from the programmer. This allows GPU programs to be written much quicker and makes porting such programs extremely simple.” Sh is an open-source project hosted on SourceForge http://libsh.sourceforge.net.
This paper by Bill Mark et. al describes the Cg high-level graphics hardware programming language and the associated run-time system. The paper details the rationale behind the decisions made in the design of the language. (Cg: A system for programming graphics hardware in a C-like language. Bill Mark, R. Steven Glanville, Kurt Akeley, and Mark J. Kilgard. To appear in the proceedings of SIGGRAPH 2003.)
This paper describes the use of standard C++ to define a high-level shading language directly in the API. The language is nearly indistinguishable from a special-purpose shading language, yet it simplifies implementation, and permits more direct interaction with the specification of textures, parameters, and attributes. (Shader Metaprogramming. Michael D. McCool, Zheng Qin, and Tiberiu S. Popa. SIGGRAPH/Eurographics Graphics Hardware Workshop, September 2-3, 2002, Saarbruecken, Germany, pp. 57-68.)