Table of Contents

1. Summary
2. Newest Version
3. Demo
4. Compilation
5. Interface Documentation
6. Design & Technology
7. License Conditions
8. Bugs & Feature Requests
9. Credits & Acknowledgements

1. Summary

swShader is a near-DirectX 9 compatible software renderer using soft-wiring technology and MMX/SSE assembly optimizations.

2. Newest Version

This is an alpha version. Please check http://sourceforge.net/projects/sw-shader for newer versions. You can also look in the CVS repository for the last version tagged as stable or release.

3. Demo

An executable is provided in the package, but it is highly recommended to try to build the newest version yourself. For compilation information look below. Execute the application at your own risk (for more precise disclaimer information please refer to LGPL.txt).

The demo requires Windows 98/XP and a Pentium II compatible processor. A Pentium III compatible processor is highly recommended for its vector operations. Pentium II and Athlon - Thunderbird processors will use an emulation mode which is much slower. DirectX 7 is required and your graphics card should be DirectDraw 7 compatible. No 3D hardware acceleration required!

4. Compilation

The library was developed with Visual C++ .NET 2003 and has project and workspace files for this compiler included. Should you have any problems compiling the code with this compiler, please mail me at nicolas@capens.net. Project files for other compilers might be included but I can't give you much support for them. For Visual C++ 6.0 the Processor Pack is required for compiling the inline SSE code.

5. Interface Documentation

Because I strive for near-compatibility with DirectX shaders, the interface also shows lots of similarities. With a good knowledge of DirectX and 3D graphics theory, the use of swShader should be mostly self-explanatory. The whole interface is exposed via the Renderer class in Renderer/Renderer.hpp.

More documentation will be added at an appropriate time. Please report problems so I know what needs attention.

6. Design & Technology

Interpreters for shaders are horribly slow because of the thousands of control statements and the redundant memory accesses. It is also often not optimized with SIMD instructions which can boost performance by a factor of about four. swShader solves these problems by compiling shader instruction to optimized x86 instructions. The control statements can be eliminated by compiling the shader for a specific render state, and storing it in a cache.

swShader is powered by a run-time assembler called SoftWire, also written by Nicolas Capens. For the latest version of SoftWire please check http://sourceforge.net/projects/softwire. It features run-time intrinsics, which allows to conveniently convert any shader instruction as an x86 assembly block. It is possible to do register allocation and peephole optimizations without multiple passes. In the future, automatic sheduling could be added.

More documentation will be added at an appropriate time. Please report problems so I know what needs attention.

7. License Conditions

All swShader header, source and library files are Copyright (C) 2002-2003 Nicolas Capens.

Only non-commercial or educational use of swShader is allowed. For details please contact Pierre Renaux, Alias25 CTO, at prenaux@alias25.org. To license swShader technology please contact me at nicolas@capens.net. In all other cases, the LGPL applies.

These license conditions are temporary.

8. Bugs & Feature Requests

swShader is a work-in-progress, so every kind of feedback is welcome, good or bad. I'm also always willing to help you out if you don't get something working. Contact me via e-mail at nicolas@capens.net or report problems on the sourceforge project page.

9. Credits &Acknowledgements

Special thanks to:

- Pierre Renaux, Alias25 CTO. Thank you very much for the learnfull and rewarding experiences.
- Alec Panovici, creator of the CppCC parser generator (http://cppcc.sourceforge.net/).
- Chris Hecker, author of the Perspective Texture Mapping articles (http://www.d6.com/users/checker/misctech.htm).
- The Independent JPEG Group, creator of libjpeg. For details please refer to libjpeg/README.
- Twilight Prophecy SDK. Very helpfull for writing some of the utility classes.
- Everyone at www.flipcode.com who has helped me directly or indirectly to make this project possible.
- Anyone who reported bugs or suggested useful features: "nop", "Eoin"...

If you believe this list is incomplete or incorrect, please contact me and I'll rectify it immediately!

Copyright (C) 2002-2003 Nicolas Capens - nicolas@capens.net