[INSERT GAME] by 5%

This is an interesting post and one that comes from a little research and looking into the changes made in Windows 8.1 mainly to DirectX 11.2 (which is only with Windows 8.1).   Video card manufactures, they have a tough job they are each trying to get every ounce of performance from their games for each respective card.  Sure the flagships can handle most things but there are elements within a game that go only so far for optimisation and the rest are in the hands of the gods.

image

You see information like this from Nvidia and AMD with each release of their video card drivers.  Most gamers will eagerly download one of those drivers if they are playing a game and see one of theirs has a performance increase.

Ever wonder HOW they can improve performance in a game they didn’t write.  A couple of ways these is done.

I am sure that the way that a lot of people might think, and they would be right is they optimise their code on the chip.  They optimise their code paths increase performance by removing bottle necks, that perhaps certain games, using certain processes within DirectX or OpenGL use.

They optimise their driver, this is the layer that talks to the card hardware, using the WDDM1 (or WDM2 if it is Windows XP). 

Once upon a time, before DirectX, games would write code that directly talked to the cards, this caused so many issues as, certainly back in the day there heaps of video card makers, ones using ISA, VESA Local Bus, PCi interfaces and what worked with one card didn’t work with others.  Windows 95, changes this to a certain degree an created a protected mode.  At its core, Windows was still sitting on top of DOS to a point.  When your PC started DOS would start and then like Windows 3.1, Windows 95 loaded the difference ideally was Windows 95 provided a more consistent and safer way of accessing all the elements you used without needing to go into such low levels, like the OS kernels would.

This change created an increased level of abstraction for game developers, they were used to writing for the hardware direct and now Windows 95 was having all sorts of issues letting them.  Microsoft released the first version of DirectX for Windows 95 (though not released with the OS) which game developers a way to get the resources they needed without needing to know the code for the cards.  It didn’t take off right away but due to the popularity of Windows games using DirectX grew until now it is just the standard,

So, with that little history lesson out of the way, these drivers provide the hooks to which DirectX can communicate with.  The Chipset manufacturers are the ones writing the code to access the hardware (and they should since they know their card the best).  The developers only need to call to DirectX and the rest is taken care of.  So, if the element that talks directly to the card is optimised this should improve performance and if they look at how games call the DirectX libraries and what information they are passing to it, these can help improve performances across the board.

Another way they improve things is an interesting one and is specific for a game, which is why the games listed aren’t smaller and more often than not they are new games.  Here is a crude example of what I am talking about.

brick texture 09

This is a crude texture I made.  On disk its size is 1 MB, not big and certainly in the way textures are copied it enables a more efficient way than have many, many, many textures being copied.  So, what they do, is look at the repeating patterns of textures and work out ways that they can be reduced but maintain visual fidelity (so compression is only viable if it is a lossless compression).

So, is there a way to reduce the size of this, which originally is 962 x 694.  Sure, depending on the nature of the texture, its size can be reduced, maintain the visual fidelity.  I am not a texture artist and what I have done is crude and is only an example.  But I decided to cut down the size of the texture.

This texture will not possibly wrap proper and if it does I would be a miracle worker since it took me all of about 2 minutes to do.  But it shows my point.

BricksMike

This is expanded in size just for comparison, now, I have also used a different compression method, a lossy compression JPG to show the changes that can be made and the fidelity loss considered so minor it would take hard core people with expensive equipment to even detect that there a small loss in quality.

This image is 840 x 323 and is 158 KB on disk.  So, this one texture than COULD, if I was a professional texture artists looking at improving the performance could make it better (and the texture aspect ratio would be identical if they reduce the size of it by a certain fact, 16 or 32 or something that enables them to better utilise card resources.) but it is ONLY an example.  So, this one texture would in game give me the same net result in quality but improve loading and display because of the size to load and the physical size.

So, once they have found these textures, fixed them, they will then ship them with the driver package, which is why they are so large.  They don’t do it to every texture, there are some they can’t improve and others they can.  Textures perform better if they are certain sizes that can fix evening on memory page boundaries.  Texture artists should take some of these things into account but their brief would be to create a brick texture, they would have the concept art to use as a reference and they would be told the size.  They would provide a wonderful texture that looks great, they might be ordered to provide changes if it was obviously a performance issue but that is for the developers to worry about.

So, how is it I cam to this point when looking at Windows 8.1 and DirectX 11.2 changes.  Well it would seem, DirectX 11.2 is going to have an ability to enable dynamic texture scaling to enable an all-round performance boost, when scaling factors are known it enables better use as these can be set up on the get go, but there is also a fall back to a simple linear scaling mechanism if this isn’t known.

Though having this scaling ability in DirectX enables times when games need those improvements but aren’t seeing the love, if a video card has excess cycles, the scaling will enable a better experience, but in the end will this change what the driver makers do? Possibly, knowing that they might not need to perform these tasks like they used to might help free resources up to work on other improvements.  In the end though the card makers are wanting their card to play the best, selling advantage, knowing that a game like Battlefield 4 will look and play better on an NVidia card or AMD card will give the card a selling feature, especially when trying to push their new cards.

So, I have decided to go down a path I never truly intended to go down when I first started typing, but suffice to say, I think I have managed to get across what I wanted to, just degraded my performance significantly by adding too many words, I think I might need some word optimisation to help increase my blog performance.

1.  Windows Display Driver Model (this is used for Windows Vista an higher)
2.  Windows Driver Model (Windows XP and lower)

Advertisements

Posted on November 1, 2013, in Article and tagged . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: