Below are some projects on which I am/was working on in my spare time (and therefore I can provide source code). Some stuff, which I'm doing at work, is here as videos.

AsyncPCG: General-purpose PCG solver for GPUs

Description:

C++ library that solves a system of linear algebraic equations on GPU using the preconditioned conjugate gradients algorithm. Solver operates entirely on GPU, the results are transferred to CPU asynchronously.

Highlights:

Downloads (NVIDIA videocard is required to run binaries):


PCG for Playstation 3

Description:

Preconditioned conjugate gradients on SPU. Only matrix-vector multiplication is done at the moment.

Highlights:

Downloads:


Yet Another BRDF Viewer

Description:

The program renders surfaces using an arbitrary BRDF. The key element of the program is the method for obtaining BRDF: BRDF is precomputed for a set of directions and the values are stored in a lookup table; four-dimensional table is used since an anisotropic BRDF is a function of four variables. Texel fetch from 4D-texture can be implemented using pixel shaders 1.4, thus it is actually possible to use arbitrarily complex BRDFs within the first shader model framework.

When an object is illuminated using an environment map (image-based lighting), prefiltered environment maps technique can be used to approximate correct reflections. The program can prefilter environment maps by approximating arbitrary BRDF as a series of cosine lobes.

In 2002, only a few GPUs supported pixel shaders 1.4; I have implemented a software renderer. Software renderer emulates pixel shaders, thus the resuting picture is identical to the one produced by hardware-accelerated renderer.

Highlights:

Downloads:


Pixel shader assembly language translator

Description:

There is no common way in OpenGL to program the hardware that supports only the first shader model (i.e. the hardware that does not support ARB_fragment_program). This tool converts DirectX 8/9 pixel shader assembly language into the C++ code that performs corresponding OpenGL states setup via IHV's propietary- or ARB-extensions. For example, consider this pixel shader written in assembly 1.4. The translator can generate corresponding ATI_fragment_shader code for ATI videocards (e.g. Radeon 8500), and ARB_fragment_program code for NVIDIA videocards.

Highlights:

Downloads: