Tuesday, January 08, 2013 4:12 PM
I began porting a Windows 8 app to Windows Phone 8 (which has some differences in implementation) and saw that despite having a DirectX11 video card I don't have the feature set 11_1 as this is not the latest generation of video cards so it doesn't have 11.1 support (It's a GTX 560 Ti). BUT on the Windows Phone 8 emulator I get the feature level 11_1 which is odd. Another oddity is the shaders from the samples are compiled on feature level 9_3 while on Windows 8 RT the minimum feature set required for apps to run on all devices is 9_1. I'm now wondering if the minimum feature set found on a windows phone 8 device is 9_3 or 9_1 since I can't select any other shader target from the hlsl compiler settings.
I'd like someone that owns a Windows Phone 8 device to share the details on what feature set it supports as I haven't been able to google this kind of info anywhere.
Tuesday, January 08, 2013 4:54 PM
All Windows Phone 8 devices are the same when it comes to Direct3D. They are all Feature Level 9.3.
See Direct3D for Windows Phone 8 for more information, including details on the Differences In Game Development Between the Phone and the Desktop.
- Proposed As Answer by Dave Hunt (ProfEclipse)Banned Tuesday, January 08, 2013 4:54 PM
Tuesday, January 08, 2013 5:04 PM
Windows Phone 8 supports Direct3D 11.1 API targeting hardware feature level 9.3.
Wednesday, January 09, 2013 2:55 PM
Ok, so basically ALL Windows Phone 8 devices will have feature level 9_3 ?
Then why does the simulator give me a feature level 11_1 ? I know it "simulates" but going over my the feature set of my Desktop GPU seems like a slip from whoever wrote the emulator.
Because my code was made to run from feature level 9_1 to 11_0 I have some results in the simulator and then I suppose I will have different results on real devices because of the 9_3. This is kinda awkward :|
- Edited by Ciprian Stanciu Wednesday, January 09, 2013 3:07 PM
Wednesday, January 09, 2013 3:43 PM
Yes. This is documented at Direct3D Feature Level 9_3 for Windows Phone 8:"Caution:
If an app creates a Direct3D graphics device and requests a feature level higher than 9_3, the device will be successfully created on the emulator. However, when the app is run on the phone, it will not be able to create a Direct3D graphics device with a feature level higher than 9_3, so some code that requires higher feature level functionality could work on the emulator but not work on a physical device. Because of this, be sure to test your D3D-specific code using a Windows Phone 8 device. Optionally, when you create a new Direct3D project, modify Direct3DBase.cpp to remove all feature levels except 9_3 from the array of D3D_FEATURE_LEVEL values supplied in the pFeatureLevel parameter to the D3D11CreateDevice function. This will ensure that you always get a feature level 9_3 device, even when running on the emulator."
- Marked As Answer by Ciprian Stanciu Wednesday, January 09, 2013 5:36 PM
Wednesday, January 09, 2013 5:35 PM
I still don't get it why the emulator doesn't do the capping by itself ? Why do I have to manually code the restriction to 9_3 ?
Is there a possibility that in the future (let's say in a year), we are going to have Windows Phone 8s with feature level 10 and above so I can leave my 10+ code in for when that time comes ?
Wednesday, January 09, 2013 8:52 PM
The emulator uses the WARP software rasterizer, which is a superset of all possible hardware and thus supports all Direct3D feature levels.
Higher D3D feature levels are strict supersets of lower ones, so if your app works with feature level 9.3 (which is has to in order to run on WP8 devices) you might as well always just request a 9.3 device.