Going Deeper: The DX11 Compute Shader and OpenCL/OpenGL

Many developers are excited about the added flexibility of the Compute Shader (also referred to as the CS). This addition to the pipeline steps further from a render-centric API and enables more general purpose algorithms. We see added flexibility in both the type of operations that can be preformed on data and the type of data that can be operated on.

In other pipeline stages, we see limitations imposed that are designed to speed up execution that get in the way of general purpose code. Although we can shoehorn general purpose algorithms into a pixel shader program, we don't have the freedom to use data structures like trees, sharing data between pixels (and thus threads) is difficult and costly, and we have to go through the motions of drawing triangles and mapping solutions onto this.

Enter DirectX11 and the CS. Developers have the option to pass data structures over to the Compute Shader and run more general purpose algorithms on them. The Compute Shader, like the other fully programmable stages of the DX10 and DX11 pipeline, will share a single set of physical resources (shader processors).

This hardware will need to be a little more flexible than it currently is as when it runs CS code it will have to support random reads and writes and irregular arrays (rather than simple streams or fixed size 2D arrays), multiple outputs, direct invocation of individual or groups of threads as per the programmer's needs, 32k of shared register space and thread group management, atomic instructions, synchronization constructs, and the ability to perform unordered IO operations.

At the same time, the CS loses some features as well. As each thread is no longer treated as a pixel, so the association with geometry is lost (unless specifically passed in a data structure). This means that, although CS programs can still use texture samplers, automatic trilinear LOD calculations are not automatic (LOD must be specified). Additionally, depth culling, anti-aliasing, alpha blending, and other operations that have no meaning to generic data cannot be performed inside a CS program.

The type of new applications opened up by the CS are actually infinite, but the most immediate interest will come from game developers looking to augment their graphics engines with fancy techniques not possible in the Pixel Shader. Some of these applications include A-Buffer techniques to allow very high quality anti-aliasing and order independent transparency, more advanced deferred shading techniques, advanced post processing effects and convolution, FFTs (fast Fourier transforms) for frequency domain operations, and summed area tables.

Beyond the rendering specific applications, game developers may wish to do things like IK (inverse kinematics), physics, AI, and other traditionally CPU specific tasks on the GPU. Having this data on the GPU by performing calculations in the CS means that the data is more quickly available for use in rendering and some algorithms may be much faster on the GPU as well. It might even be an option to run things like AI or physics on both the GPU and the CPU if algorithms that always yield the same result on both types of processors can be found (which would essentially substitute compute power for bandwidth).

Even though the code will run on the same hardware, PS and CS code will perform very differently based on the algorithms being implemented. One of the interesting things to look at is exposure and histogram data often used in HDR rendering. Calculating this data in the PS requires several passes and tricks to take all the pixels and either bin them or average them. Despite the fact that sharing data is going to slow things down quite a bit, sharing data can be much faster than running many passes and this makes the CS an ideal stage for such algorithms.

A while back we took a look at OpenCL, and we know that OpenCL will be able to share data structures with OpenGL. We haven't yet gotten a developer's take on comparing OpenCL and the DX11 CS, but at first blush it seems that the possibilities opened up for game developers and graphics processing with DX11 and the Compute Shader will also be possible with OpenGL+OpenCL. Although the CS can be used as a general purpose hardware accelerated GPU computing interface, OpenCL is targeted more at that arena and its independence from Microsoft and DirectX will likely mean wider adoption as a GPU compute language for general purpose tasks.

The use of OpenGL has declined significantly in the game developer community over the last five years. While OpenCL may enable DX11 like applications to be written in combination with OpenGL, it is more likely that this will be the venue of workstation applications like CAD/CAM and simulations that require visualization. While I'm a fan of OpenGL myself, I don't see the flexibility of OpenCL as a significant boon to its adoption in game engines.

Drilling Down: DX11 And The Multi-Threaded Game Engine So What's a Tessellator?
Comments Locked

109 Comments

View All Comments

  • bobjones32 - Saturday, January 31, 2009 - link

    Derek, Vista has been out for only 2 years. Take a look at XP's first two years and it was a phenomenal disaster comparatively. How people forget its far more significant performance and driver compatibility issues, and of course the Blaster worm, is totally beyond me.

    Just look at some of the nightmares: http://community.winsupersite.com/blogs/paul/archi...">http://community.winsupersite.com/blogs...8/06/30/...

    Business uptake? Initial consumer uptake? Driver support? Gaming speed? Security? Compatibility? Vista's first two years have been incredibly successful compared to XP's first two years.

    The difference? In 2001, sensationalist blogging making mountains out of molehills and purporting endless false perceptions without significant evidence wasn't nearly as popular. Apple's ads that only fed into peoples' ignorance only helped that false perception grow.
  • Zoomer - Monday, February 2, 2009 - link

    Compare XP to 98SE.
    Now compare Vista to XP.

    We have to take things in context.
  • CvP - Saturday, January 31, 2009 - link

    TOTALLY AGREE.

    well said.
  • Goty - Saturday, January 31, 2009 - link

    So the gist of this comment (Derek's) is that Vista doesn't suck, but you still say, "Vista sucks."

    I'm confused now.

    Anyhow, I personally agree with the other people in the section that say Vista is a great operating system. I installed it in January of '07 and the only change I've made is to move from Business to Ultimate (thanks to the fact that I was using an ATI video card at the time and the fact that they didn't slack off on their driver development).
  • DerekWilson - Saturday, January 31, 2009 - link

    Actually, that's an apt statement.

    Vista is currently something it was not initially. This made it "suck" in the hearts and minds of many people at the start, damaging the Windows brand and frustrating users. While, as I said, those issues are largely gone post SP1. This impacted Microsoft's ability to inspire confidence in the industry that everyone would eventually move to a platform that ran DX10, whether or not the OS eventually got to a stable place.

    In spite of this, I use Vista: I have 6GB of RAM and I'm interested in DX10 for the sake of DX10 personally. I'm a bit of a technologist and I like things for the sake of the thing, really, but that doesn't mean that MS didn't drop the ball in their delivery of Vista.
  • just4U - Wednesday, February 4, 2009 - link

    What made it suck in the hearts and minds of many people was the refusal to move away from what they allready knew. Changing your operating system has always brought alot of grumbling from the majority... but it's even more overstated with XP which has been around and in wide use far longer then previous Microsoft Operating systems.

    The beta form of Vista I found to be buggy as hell.. But ofcourse I was testing it on a 1800+ Tbird with 1G of ram. Later when I adopted it (before sp1) it was fine with very few problems. I'd even go as far as saying way way less then what XP had at launch.
  • CvP - Saturday, January 31, 2009 - link

    and XP was much better *when* it was released?!
    until XPsp1, it was a piece of shit.
    until XPsp2, it wasn't worth switching to XPsp2.


    and all those lack of driver etc..it was not MS's fault.
  • poohbear - Saturday, January 31, 2009 - link

    "calling it like it is"? i have vista64 premium and i much prefer it to win XP. I have the hardware to run it flawlessly ofcourse, and in that context it's anything but "sucks". would never go back to XP, so please vista has come a looooooong way and doesnt need superfluos opinions like this in 2009.
  • mechBgon - Saturday, January 31, 2009 - link

    Derek, if you take a look at Valve's monthly user survey, the ratio of Vista to WinXP users is now at about 1 to 2.1 and climbing by the month. That's not what I'd call "rejection of Vista." I think you've been reading The Inq too much :)

    As for your remark about Vista being a "WinME," I disagree. WinXP was the WinME of this era; it was basically Win2000 with a few bonus features, like WinME was a makeover of Win98SE. Once WinXP SP2 was released, *then* WinXP actually had some real merit over Win2000 in the security department, but that was late in the game.

    Vista, however, is a paradigm shift, a watershed in Windows history. Stuff is not run at Admin level by default anymore, and never will be again. Pulling that off without breaking 80% of the existing software in the world was an amazing accomplishment that involved virtualizing the Registry and file system (a little-known facet of UAC, as it happens).


    This is another misguided factoid:

    "MS recognized that they had a problem and implemented and extended again and again downgrade options to Windows XP for customers who were unsatisfied with Vista."

    Well heck, OEM Windows XP Pro comes with downgrade rights to run Win98 or WinME. It's not a backpedalling measure, nor a confession that WinME is better than WinXP. That's normal Microsoft policy so customers can license the current OS but use the previous version, temporarily or permanently, for whatever reason.

    There will be downgrade rights with the appropriate versions of Windows 7, too.
  • suryad - Thursday, February 5, 2009 - link

    I am not so sure you can just take Valve's survey which is just predominantly consisting of gamers as a good statistic. Thats just my 2 cents. An OS is not just meant for gaming...sure thats a good amount of Vista users in the survey but what about the rest of the people who are not gamers? I am pretty confident that most people who are on Vista and are on the Steam survey are/were sold by the appeal of DX 10 and next generation gaming and graphics and all that.

Log in

Don't have an account? Sign up now