Graphics processing unit (GPU) shaders have been proposed for visualization as an extension of the Open Graphics Library (OpenGL). Using non-graphics data-parallel computing (which distributes data across multiple parallel processors) could produce an effective general-purpose GPU (GPGPU) approach, but this requires recasting a data-parallel problem as a pixel-parallel problem.
Bailey introduces compute shaders that manipulate GPU-based data to implement OpenGL pipelining. These shaders use the OpenGL shading language (GLSL) and its programming aspects. Figures 1 and 2 show how compute shaders render data using round-robin program execution to allocate shader storage buffer objects (SSBO) and fill them, respectively. The SSBO implementation differs from the way OpenGL was previously used, facilitating two-way transfer of the data. This adds a new feature to OpenGL, which will expand the use of GPUs for data-parallel visualization techniques such as particle advection and isosurfaces.
The paper compares programming constructs and the implementation of compute shaders with the use of open computing language (OpenCL) to manipulate GPU-based data in a round-robin fashion. The author suggests using OpenCL for large GPU data-parallel computing applications and compute shaders for simpler applications. Figure 3 presents the shader storage buffer objects and the syntax of the GLSL representation. Figure 5 shows the process of invoking the compute shaders before the rendering begins. The paper also introduces several built-in read-only variables available to compute shaders.
As an example of the application of a compute shader to data-parallel visualization, the paper describes the first-order visualization of particle advection including both OpenCL source code and visualization results. When the author tested the code with more than one million particles on an NVIDIA GeForce GTX 480 GPU, he obtained the best performance of 1.3 gigaparticles/second when the problem was partitioned into a 3D array of 64 work groups.
The author presents the theoretical OpenGL and compute shader aspects very well, illustrated with programming constructs wherever applicable, descriptive figures for precise understanding, and some supporting information about particle systems. He describes the advantages of the proposed GLSL shader language, the potential of GPGPUs, and the performance results of compute shaders.