I'm a professional game developer from Wakefield, England, working for TickTock Games.
I'm a married father of five and I am also the director and lead programmer of Retroburn Ltd.
Martin 'Bytrix' Caine
All round web guy, games programmer and musician.
emailfacebooktwittermessengersteamxboxliveretroburn
Tags
2013 3d alphalabs amazon apple archivirtual asynchronous battlefield bad company 2 ben 10 bepu beta blackmagic design blog blue marble bootcamp borderlands bsp calibration charity charvel childsplay comments competition content tracker counter-strike crash csgo css3 cycling dear esther deferred deus ex develop conference direct x discipline documentation doom 3 bfg dr bott eidos elite force email deliverability eurogamer expo facebook focus fresnel game development game horizon game republic games gaming geoip global offensive grid guitar half-life 2 hawken hd7 hobbyist htc humble indie bundle imac indie indie trials indietrials intensity pro ip-countryside iron man 3 jamulus rift jquery kids kinect launch conference left 4 dead live lost mac mac osx manhacks mass effect 2 matrox maya minecraft mirrors edge montreal morrowind movies museum of the microstar music mxo2 mini mysql nausea network networking nokia normal mapping obj oculus rift omnitrix ouya pedal for pounds php physics playstation suite port25 portal portal 2 positron posters powermta project aedra project euler promotion properties proton pulse ps vita ps4 psn racer reddit rendering retroburn game studios reviews rift racer riftracer roadkill roller coaster shadow racers sharks shoct skyrifters snds space cadet spam trap star trek steam storage super stock sd1 fr team fortress 2 tesselating tesselation texture editor thunderbird thunderclap ticktock games tiga track builder track bulder trials tv twitter uk ultimatrix usergroup vequencer video vireio visual assist visual studio vorpx voucher vr vr cinema war thunder warren web windows 8 windows 8.1 windows phone 7 workbench wp7 wp7dev xbla xblig xblig network xbox xbox live indie games xna xnaukug xperia play zombies on the holodeck
Archive
Links
Web
XNA
Games
Email Deliverability
Monday, July 23rd 2012 / XNA

Detecting device generation of Windows Phone handsets

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:
 
Comments
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. :-(
7