Rage3D Assassin's Creed - First DX10.1 Title?
By Alex 'Morgoth Bauglir' Voicu - reviews@rage3d.com
April 16th, 2008

[ Print ] - [ Close ]

Assassin's Creed - First DX10.1 Title?

Altair has a well kept secret

Assassin's Creed is a title that needs little introduction. Benefiting from ambitious marketing efforts, an intriguing gameplay idea, the expertise of an experienced developer like Ubisoft Montreal and the charm of Jade Raymond, the game was prone to land with a splash. It has been generally well received, and gamers seem to enjoy being in the shoes of a medieval assassin. Graphically speaking (remember, that's our primary focus here), it employs an advanced engine, with both a DX9 and a DX10 pathway, with the DX10 one being faster according to Ubi. Albeit a little on the undertextured side, it's certainly nice looking and rather well performing with some caveats we'll soon discuss.

If AC's only peculiarities were limited to the above, you'd be entitled to wonder why we're writing a separate sneak-peek about it, as there are quite a few games who share the same characteristics. In a moment, you'll see that quite probably there's something that Altair has brought to the table that's extremely unique...and we're not talking about his extensive arsenal.

One of those "What the....?!?" moments

As soon as we finally got our copy of AC, we got around to...playing it, of course (what, did you think we started testing right away?). As it were, between two separate sessions, Service Pack 1 got uninstalled. Intent on resuming our trek through the Kingdom of Heaven, we were quite surprised to notice that performance got perceivably worse on our 3870X2 using rig, in spite of the only different thing being the lack of SP1 (all other available updates were installed after uninstalling SP1). Since SP1 was never proven to be the ultimate performance enhancer, it was quickly discarded as the possible reason for the sudden loss of performance. After quite a bit of useless tinkering trying to figure out what went wrong, whilst going through some whitepapers these two slides seemed to suggest an unexpected yet obvious answer:

 Directx10.1-Enabling breakthrough graphics on the ATI Radeon HD3800 series pg.3
Directx10.1-Enabling breakthrough graphics on the ATI Radeon HD3800 series pg.3
 Directx10.1-Enabling breakthrough graphics on the ATI Radeon HD3800 series pg.9
Directx10.1-Enabling breakthrough graphics on the ATI Radeon HD3800 series pg.9
 S3 Graphics DX10.1 Architecture for Chrome 430/440 Processors pg.3
S3 Graphics DX10.1 Architecture for Chrome 430/440 Processors pg.3

That was the thing we were missing, the one aspect of SP1 that might explain the performance delta: it introduces DX10.1, and the X2 is a 10.1 part. As seen above, DirectX in its latest incarnation brings some nifty features that might translate into better AA performance and quality-we were seeing both with SP1 installed. Could it be that AC is the first title to support DX10.1?If that is the case, why was it not actively advertised? Since it seemed we had an enigma on our hands, there's was no easy way out other than to investigate it.


Testing methods and system used
Testing methods and system used

Finally, a short description of the system that was used for conducting the tests:

All other drivers were used in their latest available incarnations.

Since AC doesn't have an inbuilt test, we'll be using FRAPS 2.9.4, with the same average of three 3 minute runs method that we used in our main review of the 3870X2. The run consists of going from the portcullis of Al Mualim's tower through Masyaf out the gates to where the horses are placed.

There's also an issue with the drivers used: they currently don't have a Crossfire profile for AC. This means that by default no scaling is experienced. Since this is a sneak-peek, we'll make an exception from our rules and make use of renaming the game's executable. After testing, we've found that renaming AssassinsCreed_Dx10.exe to COJ_DX10.exe produces the best results for the DX10 pathway, whilst for the DX9 one you should rename AssassinsCreed_Dx9.exe to fear.exe. Probably, by the time we test AC as part of our benchmarking suite, ATi will have released updated drivers that contain proper profiles.


SP1 vs no SP1 comparison on the 3870X2
SP1 vs no SP1 comparison on the

We took our first step on the path of enlightement by comparing the performance of single and dual X2s with SP1 installed/uninstalled (or, if you will, with DX10.1 installed/uninstalled):

Assassin's Creed Average
Assassin's Creed Average
 Assassin's Creed Minimum
Assassin's Creed Minimum
 Assassin's Creed Maximum
Assassin's Creed Maximum

16X Anisotropic filtering is enabled through the CCC for all tests (a peculiarity of AC is that it doesn't enable AF in-game when ran in its DX10 mode), with Anti-Aliasing being either off or 4 sample(the equivalent of setting Multisampling=2 in the game's .ini file, as for the 1920x1200 resolution we're using the game doesn't allow toggling AA from its menu).

Looking at the numbers, the difference that SP1 makes with AA jumps out as being quite significant. If our assumption that this is due to AC taking advantage of DX10.1 proves to be incorrect, it would be most interesting to find out what could cause such a consistent advantage. Oddly, the QuadCF configuration refused to run with AA enabled without SP1 installed, crashing the game in spite of our best efforts. Whilst our renaming trick seems to do a fine job for 2 GPUs, it's not adequate for QuadCF:

 Assassin's Creed Scaling
Assassin's Creed Scaling

The benefits of going dual X2 are very limited here-you gain more from the switch to SP1/DX10.1 than from getting a second graphics card. This is hardly surprising, as for more than 2 GPUs finer profiling is needed, which means that until ATi releases a proper profile there's little love for QuadCF users.

Let's see the exact impact the installation of SP1/usage of DX10.1 has:

Assassin's Creed impact of DX10.1 vs DX10 on the 3870X2
Assassin's Creed impact of DX10.1 vs DX10 on the 3870X2

If the benefits without AA are negligible, once we enable 4X AA we see an almost 20% advantage from using DX10.1(yep, we're fairly certain that's what's happening, so from here on we'll opt to use that formulation rather than the SP1/NO SP1 one-that being said, if we're proven to be wrong in our assertion, we'll happily admit it). For all intents and purposes, this is something to write home about.

Since you guys are gifted with inquisitive minds, such feeble proof would hardly have been enough-you could easily say that there's some magic mojo other than DX10.1 at play here. In order to verify the validity of our claim that AC is the first DX10.1 supporting title, we had to test on a SM4.0 only card and see if there was some other mechanism hidden within SP1 that increased AC's performance.


A blast from the past

Luckily, a system containing a 2900XT was available. Since gutting it in order to get the card into the main testing rig was not possible, we simply took the testing to it. The configuration used for the 2900 testing was the following:

Same rules apply here:16X AF forced through the CCC, with AA being either 0 or 4 sample, controlled through the game's .ini. We've used the same benchmarking run. We've maintained the exe renaming in order to alleviate possible variation from that source.

Assassin's Creed Average 2900XT
Assassin's Creed Average 2900XT
 Assassin's Creed Minimum 2900XT
Assassin's Creed Minimum 2900XT
 Assassin's Creed Maximum 2900XT
Assassin's Creed Maximum 2900XT
 Assassin's Creed impact of DX10.1 vs DX10 on the 2900XT
Assassin's Creed impact of DX10.1 vs DX10 on the 2900XT

Lo and behold: the 2900XT seems impervious to the presence or absence of SP1. It behaves identically in either scenario (the variation present is well within the margin of error of FRAPS based testing). This is in line with what we were expecting, and comes to support the contention that AC makes use of DX10.1 and that's what makes the 3870X2 perform considerably better with SP1 installed.

There's a final supporting argument - check out these pictures:

AA as seen on the 3870X2 with SP1 installed
AA as seen on the 3870X2 with SP1 installed
AA as seen on the 2900XT/3870X2 without SP1
AA as seen on the 2900XT/3870X2 without SP1
AA disabled
AA disabled

In the above pictures you're looking at the lower part of a headband that goes over the player's visage as he enters the Animus (buy the game in order to find out more about the Animus). With either the 2900XT or the 3870X2 without SP1, that particular area seems to receive no AA, in spite of the rest of the screen being properly AAed. Once SP1 is installed on the 3870X2 sporting system, the edge gets properly antialiased, whilst on the 2900XT installing SP1 has no effect. This sends us back to the ATi Whitepaper we quoted, which suggested that quality benefits can be brought on with DX10.1 support.


Closing Thoughts

Altair has certainly come bearing gifts-based on what we've seen above, it seems rather clear that Assassin's Creed is the first title to implement DX10.1. We cannot help but wonder why this isn't actively advertised, as it would be a major bullet point in proving the game's technical prowess.

We contacted Thomas Bruckschlegel, the maker of 3DAnalyze, to obtain a tool that allows the grabbing of shaders so that we could actually take a peek at what's happening. Sadly, in spite of Thomas being both helpful and quick to reply, this wasn't possible; here is what he had to say:

"Hi Alex, sorry for the delay, but I have bad news. Assassin's Creed is using the following api for creating shaders:"

*HRESULT **CreatePixelShader(* *const void* */pShaderBytecode/*,* *SIZE_T* /BytecodeLength/*,* *ID3D10PixelShader* **/ppPixelShader/ *)*;

"so basically, they have no hlsl shaders in it (compiling hlsl on fly while loading takes a lot of time, so that's the simple reason), at least Assassin's Creed - the byte code is useless, without a decompiler which translates it into asm code. there is no such tool atm, because Microsoft has no publicly available bytecode specs for shaders 4.x. So I am sorry, I can't help you."

Armed with this knowledge, we went and asked ATi about it, since they're probably in the best position to know whether or not the new API is actually implemented. Here's what they had to say:

"Ubisoft are at the forefront of technology adoption, as showcased with the fantastic Assassin’s Creed title. In this instance our developer relations team worked directly with the developer and found an area of code that could be executed more optimally under DX10.1 operation, thus benefiting the ATI Radeon HD 3000 Series."

It seems we were right after all!

The impact that DX10.1 has is quite frankly greater than expected. A 20% improvement in AA performance is very impressive. GPU refreshes have been built around lesser gains. Based on the game's behavior it's possible that Ubi are doing their own Custom Resolve in order to get HDR correct AA, and are also taking advantage of the full access to MSAA buffers DX10.1 brings in order to get both better quality and better performance, but without an official statement we'd rather refrain from speculating further.