Not sure what it could be - unless the FVF for the primitive conflicts with something such as the COUNT2. You shouldn''t need to use the project flag - that just does a W divide so you can do projections.
A couple of general hints for D3D coding I''ve picked up over the years which might help:
1. When your program starts up initialise *EVERY* state to a *known* value - NEVER trust the defaults. For example you may have never set D3DRS_DITHERENABLE in your code, although the docs tell you its default is FALSE, the driver could be old or bugged and may set it to TRUE, or worse may just leave it at what the previous app set it to. So a state you *haven''t* set could be causing conflicts!
2. Always disable the alpha pipe at the *same* stage as the colour pipe - i.e. DON''T do the following:
stage 0, colorarg1 = blah
stage 0, colorop = blah
stage 0, colorarg1 = blah
stage 0, alphaarg1 = blah
stage 0, alphaop = blah
stage 0, alphaarg1 = blah
stage 1, colorarg1 = blah
stage 1, colorop = blah
stage 1, colorarg1 = blah
stage 1, alphaop = disable
stage 2, colorop = disable
Instead, keep the alpha pipe alive until the the colour ops have finished. You can do something like SelectArg1 to do that.
My personal hunch after FVF flags, buffer creation flags etc for your validate failure is #1 above - states set to undefined values causing problems.
Failing that:
1. Try this on the Reference Rasterizer.
2. If it works on RefRast, have a word with the developer relations people of the graphics chip manufacturer - it could be a driver bug or a subtle restriction. Getting them an .exe where this is reproducable will help them confirm any problems (I usually modify one of the SDK samples when I need to send a repro to them).
3. If it fails on RefRast, there is still an issue with the states you''re setting.
--
Simon O''Connor
Creative Asylum Ltd
www.creative-asylum.com