Q: how to avoid unpleasant surprises?
A: make sure you explicitly select feature level 9.3, even when running in the emulator.
Starting with the Windows Phone Direct3D App project template, open up Direct3DBase.cpp, find this code in the CreateDeviceResources method: D3D_FEATURE_LEVEL featureLevels =
and change it to: D3D_FEATURE_LEVEL featureLevels =
Tada! Now you will be using 9.3 in the emulator, the same as on actual device hardware.
Right above this code, notice how the template turns on D3D11_CREATE_DEVICE_DEBUG only if the _DEBUG define is set? This enables extra validation to give more useful error messages if you make a mistake in your D3D API usage. But that validation is not free, so we only enable it in debug builds.