Direct3D Mobile on Windows Mobile 5.0 Devices

I've been testing some of the retail Windows Mobile 5.0 devices 3D performance. I have found when the proper driver is included with the device, the performance is good enough to successfully develop and run a casual game.  However these drivers do vary from device to device and some care will need to be taken to accommodate each.  

Devices running on the XScale chip without a dedicated GPU have remarkably quick 3D performance due to a good software driver.  The performance is directly related to the speed of the processor.  I ran my tests on a XScale device with a processor running at 400mhz.  This class of device provides enough throughput to run a game like PocketJongg and runs sprite based games at an acceptable 30 frames per second. 

The Dell x50v and x51v include the Intel 2700G GPU. This GPU provides great performance, but comes with a cost.  Lighting performance can be substandard to the point where its not usable. If you're going to use lighting test on the x50v or x51v first.  To see a bit of code that demonstrates this performance just run the lighting sample included in the MSDN documents at https://msdn2.microsoft.com/en-us/library/ms181020.aspx.  There are also substantial  issues with clipping.  To see this in action run the billboard sample from the MSDN documents at https://msdn2.microsoft.com/en-us/library/ms181015.aspx.  To the Dells credit, it does run a simple sprite game at 60 frames per second and also runs PocketJongg.  If you work around its limitations, the Dell x50v and x51v provide the best render performance.

HTC has been releasing deices based on TI's OMAP chip.  Unfortunately the devices in the field today contain the D3DM reference driver, not the OMAP software driver.  The reference driver renders in seconds per frame.  Devices containing the reference driver are completely useless for running games.  This will not be the case with new OMAP based devices as this is in the process of being fixed with an OMAP optimized software driver.  We should see OMAP devices capable of playing 3D games later this spring.  There may also be ROM updates available to flash up the devices in the field around the same time.

Identification

You may need to identify the D3DM driver and configure the game accordingly.  For instance, if you detect the reference driver you may not want the game to run, or you may detect the Intel 2700 driver and not include lighting. Below is some sample code for detecting the the driver.

//--------------------------------------------------------------------- //THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY //KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE //IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A //PARTICULAR PURPOSE. //---------------------------------------------------------------------

using System;
using System.Windows.Forms;
using Microsoft.WindowsMobile.DirectX;
using Microsoft.WindowsMobile.DirectX.Direct3D;

namespace DisplayD3DMDriver
{
    class Class1 : Form
    {

    static void Main()
    {
        try
        {
            AdapterListCollection al = Manager.Adapters;
            string driver = al.Default.Information.DriverName.ToString();

            string message;

            switch (driver)
            {
                case "d3dmref.dll":
                    message = "Software Reference Driver";
                    break;
                case "D3DM TI3D Driver":
                    message = "OMAP Software Driver";
                    break;
                case "PowerVR D3DMobile HAL":
                    message = "PowerVR GPU";
                    break;
                case "D3DMXSC50PB.DLL":
                    message = "XScale Software Driver";
                    break;
                default:
                    message = driver;
                    break;
             }

                MessageBox.Show(message);

        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }

    }

    }
}