AMD Radeon HD 3800: ATI Strikes Back

Direct3D 10.1: What's New

Let's be clear right from the start; the new things brought by this new API aren't revolutionary. Direct3D 10 was a big makeover and as always with such endeavors, there are small errors. Thus Direct3D 10.1 must be seen as an incremental update, correcting, thanks to time and distance, small holes in the previous API, and bringing a few add-ons in order to erase some of the restrictions that still existed.

All the improvements may be summed up in three categories:

  • Stricter specifications in order to limit discrepancies between multiple implementations
  • A handful of new features
  • A clear focus on rendering quality and more precisely, antialiasing

Stricter Specifications

Microsoft has taken advantage of Direct3D 10.1 to make its API even more orthogonal by cancelling particular situations; hence it is now compulsory to support FP32 textures' filtering, while it was only optional in Direct3D 10 (though all Direct3D 10 GPUs from both manufacturers were already supporting it anyway). In a similar fashion, blending in 16 bits integer buffers is now obligatory when its implementation was only a choice with Direct3D 10.

Microsoft has also strengthened specifications with regard to computational precision, whether in blending or in-shaders operations. Thus, many operations (addition, subtraction, multiplication and division) are now in line with the IEEE-754 norm, which, one must admit, isn't really exciting for gamers, but will surely please researchers fond of GPGPU.

New Features

Microsoft managed to be reasonable when it came to the new API add-ons. Developers are still assimilating the new features brought by Direct3D 10 and figuring what they can really do with them. It was, therefore, out of question to drown them every year under the flow of new add-ons.

First of all, we find Cube Map Arrays. With Direct3D 10, Microsoft had introduced Texture Arrays, tables of textures that could be indexed directly in the shaders. At first, Texture Arrays resemble 3D textures, which have been around for a long time, but practically, their behavior is very different. Ergo, when accessing an element of a 3D texture, a filtering occurs between the different layers, which is normal as a 3D texture is voluminal. On the contrary, textures stocked in a table may not have any connection between them. Consequently there isn't any filtering between neighboring elements. Furthermore, when using mipmapping, a 3D texture is divided by 2 according to its 3 dimensions, which isn't the case with Texture Arrays; if the different textures composing it see their size decreasing, the size of the table remains the same.

Direct3D 10.1 generalizes those Texture Arrays by adding support for Cube Maps tables whereas, until now, only 1D and 2D texture tables were supported.

CubeMap arrays

Shader Core wise, Direct3D 10.1 introduces Shader Model 4.1 which brings a couple of new things like the Gather-4, which is another name for Fetch-4 (introduced with ATI's previous generation of cards). To quickly refresh your memory, this instruction allows retrieving 4 unfiltered elements of a single-channel texture with just one texture fetch, which permits a more efficient implementation of personalized filters in shaders.

Fetch4

Another instruction added to Shader Model 4.1 enables it to recuperate the level of detail (mipmap level) during a texture sampling. Microsoft has also upgraded certain limits, especially the number of vertex shaders' input and output elements as we go from 16 vectors of 128-bit (4 floating simple precision) to 32.

D3D 10.1 Pipeline

With regard to blending, we've already mentioned the new supported format: Int. 16, but it's not the only new thing; Direct3D 10.1 now enables specification of independent blending modes during a simultaneous rendering in more than one buffer (MRT: Multiple Render Targets).