You can custom own post by writing shader text. For post processing, program first render 3d scene to a texture, then set this rendered texture to all six texture stages (stage0 - stage5); then for every post, apply it's material to draw a 2d screen rectangle cover full viewport.
You can introduce new texture to shader:
first define a texture variable: texture tTX0; then set it to a stage: Texture = <tTX0>;
You can use vertex shader, the vertex FVF of screen rectangle is XYZRHW | DIFFUSE | TEX4.
You can get viewport description by the preset
vector _vecViewport; // viewport description ( vp.X, vp.Y, vp.Width, vp.Height )
The default texture address mode for stage0 is Clamp, and Wrap for other stages.