Blog Archives

SWTOR and Graphics – Part 2

As a follow on from Part 1. I will delve into some detail about DirectX and is missing or not included when running the game in Windows Vista and Windows 7 since this performance increase only affects those with native DirectX 10 or 11.

This is a short one and to me is that essential middle ground.  I am not going to recommend anything that will upset your computer, or do anything like over-clocking FSB or internal GPU elements.  I have seen a numerous number of items regarding this, the over-clocking and to me, the risk to too great for the benefits.  Not to mention, not all chips or cards can be over-clocked, especially older cards and I am just trying to help everyone get the best performance.  Since the minimum specs for this game is for a ATI X1800, nVidia 7800 or Intel 4100 Integrated or better.  Now since I am running it on a machine that exceeds those minimum specs and I used to have frame-rates that would be jumping all over the place.

I will go through and clarify a few things as there is a lot of information about what I am going to state.

SWTOR was initially developed using DirectX 9, but was later improved for DirectX 11.  DirectX is a funny beast, certainly DirectX 9 was a common and very stable base for all games.  Vista introduced DirectX 10 and then Windows 7 replaced it with DirectX 11.  Vista supports DirectX 10 but from memory DirectX 11 is available for Windows Vista, if you have automatic updates turned on you may have received this but as it was an Optional update, it might still be sitting in the list of optional updates.  See below;

Updates

This shows the update selected that contains DirectX 10 for Windows Vista.  If you feel you may have missed it see Update for Windows Vista (KB971512) you will need to have a genuine Windows product as I believe it requires validation before it can be downloaded or it performs the validation before you install it.

  Let us work out what version of DirectX you are running.

  1. Click Start | Run
  2. Type “dxdiag” without the quotes and press Enter.

image

The information in this dialog isn’t really important.  What it is asking if you want the DirectX diagnostic utility to check the drivers are digitally signed and these signatures match that of the WHQL (which is Microsoft Windows Quality Labs).  All this is saying is the drivers are marked properly and they aren’t some dodgy ones, which can happen if people want to do different things with the device than initially intended1.

Click No.

image

This machine has DirectX 9

image

This is Windows Vista and it is running DirectX 10.  I will not be showing anything on this machine as it is a virtual machine and I was using it only for showing DirectX 10.

image

The above just shows the same machine, but after the platform update it is running DirectX 11.

And just for completeness DirectX 11 on Windows 7.

image

Knowing the version of DirectX install on your system is not really what this is about, since you want to make sure you have the latest version of DirectX running.  That said, if you are running Windows XP SP3 you can only run DirectX 9.0c, but the game still works.  It is possible that your game has less frame-rate issues than people running Vista or Windows 7, despite them having a more advanced Windows or DirectX version.

So, Where am I heading with all of this.  Interesting I ask myself this.  But I am going with this to help you know what the developers did under the covers.  Now, Windows Vista and also Windows 7 include several flavours of Direct3D.  It has Direct3D, Direct3D 9Ex and Direct3D 10 (Windows 7 has Direct3D 11).  So what, well the purpose of these is to maintain compatibility with applications written for DirectX 9 on machines that do not have it installed in full. But it is the DirectX 9Ex that we are interested in.  It is a version of Direct3D written for the Windows Display Driver Model (WDDM). 

From my understanding SWTOR uses DirectX9 for graphics and uses the latest version of whatever is on the machine for other elements, networking, audio  and the like.  But on clean install machines of Windows Vista and Windows 7, it will be using the Direct3D 9Ex.

I was hoping for a short one, but it seems that I will be going into more detail.

Direct3D 9 in Windows XP sits nicely on the DirectX Runtime, which then does calls to the XP Driver Model (the D3D versions) to perform all requests.  Looking at the information provided by Chuck Walbourn8 it shows that with Windows Vista and the WDDM things have changed somewhat.  Like Direct3D 9, it calling the DirectX runtime, the it is then the Runtime that is going some things in order to talk to the WDDM, because of this difference in the driver model hence why any Direct3D 9 calls go through Direct3D 9Ex.

Get to the point.  Well, I am, but the point I am getting to is, Direct3D 9Ex is being used for the graphics rendering.  So what of, DirectX 10 or 11.  This is where the main issue sits.  There are some DirectX 9 functionality that is not implemented in DirectX 9Ex, therefore, the DirectX 10 or 11 calls, will emulate this functionality within the DirectX runtime.  This is where the performance hit is taken.  The call, the runtime knowing the call, forwarding it to the new version, performing the task, passing it back.  One might not think that this is all that much of an overhead.  But when applications like games are updating, hundreds of times a second, rendering frames, 60 or so times a second, this is a lot of computation in just one second.  And if this call is made several times in each of those updates, then the hit really explodes.

What do we do?

This is a sort of unofficial fix for it, and even BioWare who can’t openly endorse it their tech support has said it will improve things if done.  Note this will only work on Windows Vista or Windows 7.  We need to install DirectX 9.  But I might hear some people saying I have already installed DirectX 9.  But if you used the Web Installer, you installed enough to get everything working, but not everything and it is the everything that we need.

Go here – DirectX End-User Runtimes (June 2010) – This will link to the full redistribution package and when installed it will install everything.  On Windows Vista and Windows 7, it should install everything, because it will look at what has been installed previously and then install what is missing and update what is old.  If you have run the web installer, it will update anything that is old and also include missing items.  The Web installer will not do this.  To keep the amount to download to a minimum I am under the belief the web installer doesn’t install everything.

DirectX End-User Runtime Web Installer – It has a note in the Additional information that many people may miss.

Note that the DirectX Runtime (Direct3D, DirectInput, DirectSound) is not part of this package as it is included as part of the Windows operating system, and therefore cannot be installed or uninstalled. Updating the DirectX Runtime is achieved by installing the latest Service Pack or obtaining a newer version of Windows.

So it does show that this isn’t the full kit.  And it is the addition stuff for the Direct3D runtime that we need.

Does this give you performance boost.  Yes and No.  What I have found it gives you is more consistent frame-rate across the board but I have noticed that an overall increase in the average performance of the frame-rate too.

I have noticed there are still times of very poor performance.  This fix, doesn’t really address this issue, though it does help it, it is such a minor increase that it is barely worth mentioning.  When is performance problems bad, on the respective fleets when there are large populations, the frame-rate will drop.  Go to the hanger deck and you will find it improves.  Go to another ship it also improves.  The problem is the number of people it needs to render, or update, send network packet everything that is done in the game is done here, more so because of the close proximity of people, it might be the server the client or a combination of both.  BioWare are aware of this. 12

References

  1. Microsoft Support, Article ID: 971644.  Platform Update for Windows Vista
  2. Microsoft Support, Article ID: 971512.  Windows Graphics, Imaging, and XPS Library
  3. Microsoft Download (26 October 2009).  Update for Windows Vista (KB971512)
  4. Wikipedia, (22 August 2012).  DirectX Wikipedia
  5. Microsoft Corporation (September 2006).  The Windows Vista Developer Story: DirectX
  6. Windows Dev Centre.  Direct3D 9Ex Improvements
  7. Windows Dev Centre. A Roadmap for DirectX
  8. Walbourn, Chuck (March 2008). Graphics APIs in Windows 
  9. Microsoft MSDN. DirectX for Windows Vista
  10. SWTOR forum (12 January 2012).  Directx 11 FPS issues
  11. Presentation from Gamefest 2010 (7 June 2010).  DirectX 11 Technology Update
  12. SWTOR Forum – Customer Service (20 January 2012).  A Note on General Performance Issues

* To this there was an issue with the SoundBlaster Audigy2 and their 64bit drivers.  It wouldn’t produce 5.1 surround sound, despite the settings.  This was a known issue to SoundBlaster but someone got sick of it and updated the drivers themselves to fix this bug.  They issued it and told people about it.  I installed it and it worked.  But, if I would click Yes on this dialog, it would mention that the drivers I have installed are different to the ones WHQL have registered.  So there might be instances where you might want to check this.