Во-первых, не все оборудование поддерживает D3DFMT_A8.
Теперь, если предположить, что ID3DXSprite не захватывает слишком большую часть конвейера, тогда просто написать пиксельный шейдер следующим образом:
sampler2D input : register(s0);
float4 pixelShader(float2 uv : TEXCOORD) : COLOR
{
return tex2D( input , uv.xy).aaaa;
}
Шейдер просто считывает значение в текстуре и просматривает его по всем каналам.