Sadly, XNA Beta 2 does not let you use vertex shaders without pixel shaders... If you are targetting GF2, GF4MX or Radeon 7xxx old hardware, here is a workaround:
bool [ ] verifiedCanDraw ;
fi = device.GetType ( ).GetField ( "_verifiedCanDraw" , BindingFlags.NonPublic | BindingFlags.Instance );
verifiedCanDraw = ( bool [ ] ) ( ( fi.GetValue ( device ) ) );
for ( int i = 0 ; i < verifiedCanDraw.Length ; i++ )
{
verifiedCanDraw [ i ] = true;
}
Will XNA users get a fix for this

Vertex Shaders without Pixel Shaders
David Krmpotic
- We want a .Net 2.0 compatible framework and there is no other choice. ( so far )
- We want XBOX compatibility.
- We want PC support, of course...
On the Windows platform, there is absolutely no good technical reason to restrict XNA to run only on high end hardware. The implementation is based on DX9c, which can handle old hardware. We perfectly know that when we implement a VS 1.1 assembly shader with no PS, this will not render on the XBOX: We have alternate rendering paths for the xbox and hi-end hw on the PC)
We do that so that our game will have a much larger potential customer base and we do this because experience has proven many time that this simply translate into more revenue.
Madix_t
XNA simply isn't meant to be used on graphics hardware below shader model 2.0 (for 360) or 1.1 (windows). If your intention is purely to target windows, then you would be better served with Managed directx 9.
dmyers
Why blocking rendering paths for old hardware Why, why why
donkaiser
If you are targetting hardware that doesn't have pixel shaders, you shouldn't be using XNA. It's part of the system requirements.
jdrawmer
Your answer is Fair enough I guess.
The XNA team isn't very large and doesn't (unfortunately) have unlimited resources. XNA also isn't written to cater for commercial developers at this time. While you can sell your XNA games on windows. You will not be able to do so on 360.
I also take your point about the .net 2.0 framework. If this wasn't an issue I would say use managed DX 9 and forget XNA for now, or at least create a seperate XNA version of your product, to test it's usability etc. etc. on 360.
Ultimately i don't think XNA is going to be right for you based on the changes you want made to it. These are changes that would go against what the framework is designed for and the market it is targetted at. The aim is to make the framework as easy as possible to use (within reason). Your changes would require users to have a more intimate knowledge of the hardware they were targetting and ultimately make things more complex. The documentation would have to mention that you can create vertex shaders without pixel shaders. That you would need to enable feature x to use fx files. Create your device using command y if you didn't want feature z etc. etc.
As things stand now you simply specify the back buffer size and your done with your graphics device setup. No ifs buts or maybes about it. Near total abstraction.
kaizen
So what Why artificially blocking alternate rendering paths on the Windows platform This is an absolute business non-sense. Each time you increase your target hw requirements, you loose customers.
MS: Please remove testing the PS presence in the final release or even better completely remove it. It brings so little anyway...
Troy Lundin
Business decisions like this have many, many inputs only one of which is how many customers you will lose be removing backwrds compatibility. Somehow Microsoft seem to have done pretty well in the graphics API business decisions in the past even though many people argue, like you, that dropping APIs will just lose customers.
Feel free to start your own company and produce a competing graphics API which will target all of those customers. Maybe after you see a test matrix that covers 100 graphics cards and 4 different driver versions for each of them you will have a change of heart.
paulchsu
All of our graphics API is based around shaders. Our SpriteBatch implementation uses shaders internally, as does our Model class, and there is no way to render graphics of your own without shaders because we do not expose any of the old fixed function API from DX9.
Partly we did this for Xbox compatibility, but also partly for simplicity and clarify. Moving forward, the whole graphics industry is moving to shaders. Most of the install base today already has shader hardware, and this will grow even more over time, so it seemed like a bad idea to saddle a brand new and forward looking API with a tonne of complexity to support something that is becoming less and less relevant all the time.
TA123
XNA does not support hardware without pixel shaders. You may be able to trick this into working for some cases, but this is not reliable and not recommended!
manick312938
logx
If backward compatibility is an issue, then it would make more sense to use managed directx 9. The XNA team have never made any secret of the fact that this is an api that requires shaders and does not work with non-shader hardware.