This past weekend I've been working on optimizing my game Positron for release on Windows Phone 7. I found a few major flaws in the rendering which I fixed and meant that performance increased drastically, so much so that I can now render the game at full 800x480 resolution (was previously rendering to a reduced resolution of 500x300).
Unfortunately however the first generation HD7 I have just isn't quite fast enough to render at that same resolution and push all the polygons I'm throwing at the GPU. So, I started to wonder if there was any way in which I could detect the speed of the device, or what 'generation' of device was running the game.
After a little playing around I found out that my Lumia 800 has an Adreno205 GPU and the HD7 has the much older Adreno200 GPU, so I set about finding information on the GPU in the phone to see if this information was exposed.
I found a few IDs in the GraphicsAdapter class which seem to be what I'm looking for but I only have the results from two phones to base my conclusion on. What I need now is for more people to test out my little GPUcaps.xap on their Windows Phones to see if the same device IDs are returned when people have Adreno200 or Adreno205 devices.
If you have a Developer Unlocked Windows Phone, please spare a minute to help me out:
1. Download
http://martincaine.com/files/xaps/GPUcaps.xap.
2. Install and run it on your phone.
3. Reply below with the make and model of your phone and the two IDs printed to screen.
Please note that these IDs are not personal in any way to yourself and only identify the GPU type and revision that is contained within your Windows Phone. If I get enough samples to conclude that the different Adreno devices always return consistent IDs I can then put in a check for this in my code and make the older devices default to a lower quality version of the game (either through reducing resolution, texture sizes or geometric complexity).
Thanks!
Martin
If you found this post helpful please leave a comment below:
Martin Caine / 2012-07-23 19:48:20
Nokia Lumia 800
Device ID: 29232
Subsystem ID: 517
Martin Caine / 2012-07-23 20:44:34
HTC HD7
Device ID: 34384
Subsystem ID: 512
Maurizio Tatafiore / 2012-07-23 20:59:49
Samsung Omnia 7
Device ID: 34384
Subsystem ID: 512
Jeff Brown / 2012-07-24 08:03:04
HTC Trophy
Device ID: 34384
Subsystem ID: 512
Angus Cheng / 2012-07-24 08:17:52
HTC HD7
Device ID: 34384
Subsystem ID: 512
Martin Caine / 2012-07-24 10:27:42
Thanks to my friend Simon:
HTC Titan
Device ID: 29232
Subsystem ID: 517
Nokia Lumia 800
Device ID: 29232
Subsystem ID: 517
Nokia Lumia 900
Device ID: 29232
Subsystem ID: 517
Samsung Omnia 7
Device ID: 29232
Subsystem ID: 517
That last one is very interesting, Omnia 7 is a first generation device but has an Adreno205 GPU! It still does only have a 1Ghz processor however so the newer devices like the Lumia 800 and Titan will still be faster.
Overall this looks pretty much definitive now. I'll likely add a check in to my game like the following:
if( graphics.GraphicsDevice.Adapter.SubsystemID
Antoine Cloutier / 2012-11-22 15:51:00
Thanks for the info! Knowing which Adreno GPU a device has allows me to optimise the MultiSampleCount value of my app.
Here are results for some other 1st generation devices, so as to add further confidence to the interpretation of DeviceID / Subsystem ID. Both are known to have Adreno 200 GPUs.
HTC Surround
Device ID: 34384
Subsystem ID: 512
Dell Venue Pro
Device ID: 34384
Subsystem ID: 512
I realise that XNA has somewhat been obsoleted with Windows Phone 8, but has anyone queried those GPU Caps on some newer devices (WP8 specifically)?
On a somewhat related note, has anyone managed to retrieve the CPU Speed / number of cores of a device programmatically? In my specific case, a higher clock rate (from the 800 MHz base line) would allow me to reduce the audio latency of my app, which would result in a much better experience for the user. Since I don't want to resort to using home-made benchmarks to guess the CPU speed, I suppose I'll have to tune my app for the lowest common denominator. :-(