Sm is a software GPU simulator written at the University of Waterloo. It implements a software version of a programmable GPU pipeline based on a packet stream architecture. It is geared particularily towards scalable parallelizability in the context of a distributed memory system. It is modular, and designed to allow the selective replacement of modules with hardware simulations or limited hardware implementations.
Sm has a C function call interface similar to OpenGL, but with more generic vertex attribute management. It supports assembly shader programs with a per-instruction function call interface. Shader programs are currently implemented with a machine language interpreter. The sm backend makes calls to this interface to set up shader programs. It can also construct equivalent C++ code, and we plan to replace the interpreted shader programs with custom-compiled Sm modules for higher performance in the near future. Attributes in Sm are bound to shader input by order alone and have no special semantic meaning. Therefore, they are simply set up in Sm in the order they appear in Sh programs. Originally, Sm and Sh were two halves of one system, and the attribute management systems in particular are designed to be compatible.
At the time of writing, the Sm backend is out of comission, as it has not yet caught up with the newer buffer-management architecture in Sh. However, it has been fully functional in the past, and only this aspect needs to be brought up to date. Thus the backend may well be revived by the time this book reaches publication.
Note: This manual is available as a bound book from AK Peters, including better formatting, in-depth examples, and about 200 pages not available on-line.