I have a vertex shader that outputs high dynamic range data for a pixel shader that outputs pixels to a HDR render target (e.g. G16R16F). Data coming into the vertex shader has a high dynamic range and data going out must have high dynamic range.
According to the ASM shader documentation in DirectX SDK April 2006, a hardware implementation is not required to supply more than 8 bits of unsigned precision for a pixel shader color input register. Presumably, this also applies to a vertex shader color output register.
I have verified experimentally that certain NVidia hardware does indeed have about 8 bits of dynamic range for pixel shader color input registers. Certain ATI hardware seems to have a much higher dynamic range for pixel shader color input registers, although I can't blame NVidia for sticking to the letter of the specifications.
So, I'm wondering what the recommended way to communicate HDR data from a vertex shader to a pixel shader is, if there is a recommended way. I have tried using texture coordinate registers (which are in no way being used to communicate texture coordinates), and that seems to work well on both NVidia and ATI hardware. Does anybody have a strong opinion on the best way to do it
I should stress that my current algorithm (using texture coordinate registers to output HDR data from the vertex shader) works, but I'd like to have some confidence that it's robust enough to work on a variety of hardware.
thanks for any opinions
Tom

High dynamic range output from Vertex Shader