[ Print Article! ]

GeForce FX and DirectX 9 Half-Life 2 Performance
August 29, 2004

Summary: Thanks to Valve Software we now have a new method for forcing the Source engine's DirectX 9 path on GeForce FX hardware. Today we present to you our first-ever GeForce FX DX9 Source engine benchmarks as well as the complete feature lists for every version of DirectX as well as instructions on how to enable DX9 on the GF FX in your CS: Source beta. What are some of the feature differences? For instance, Valve adds supersampling to provide soft shadows for DirectX 8.1, while DX8.0 shadows are sharp. In this article we go over all the eye candy features in Half-Life 2, including which cards support them. See how your card stacks up, and how GeForce FX performs and looks in DX9 in this article!


IntroductionPage:: ( 1 / 9 )

In our “GeForce FX and Half-Life 2: DirectX 8 Only?” article, we discovered that not only does GeForce FX hardware default to DirectX 8, FX cards wouldn’t run Valve’s DirectX 9 path even when DX9 was specified in the console.

It turns out that the console command we used “mat_dxlevel 90” doesn’t work properly with GeForce FX cards. Instead, Valve recommended we use the switch “-dxlevel 90” at the command line to force GeForce FX cards to run the DirectX 9 path. Armed with this knowledge, we set out to re-run our benchmarks and take new screenshots with GeForce FX running the video stress test in DirectX 9. Valve was also kind enough to provide a listing of the differences between the various APIs. We’ll get started with the feature descriptions of each path first:

Feature usage in DirectX paths
Feature
DirectX 7
DirectX 8
DirectX 9
Radiosity-Based Diffuse Bump Mapping
No
World, Displacements
World, Displacements, Viewmodel, Static Props, Dynamic Props, Non-Player Characters (NPCs)
Specular Bump Mapping
No
World, Displacements, Viewmodel, Static Props, Dynamic Props, NPCs (Reduced quantity than DirectX 9)
World, Displacements, Viewmodel, Static Props, Dynamic Props, NPCs
Detail Props (Procedurally-placed grass, rocks, etc. based on material)
No
Only near
Out further
Dynamic Shadows
Blobby
Sharp render-to-texture
Soft render-to-texture
Static Props (instanced models)
Medium Level-of-Detail (LOD) Some removed, No decals
High LOD
High LOD
Specularity
No
Yes (limited usage)
Yes
Dynamic Refraction
No
Yes (limited usage)
Yes
3D Skybox
Yes
Yes
Yes
Water
Transparent Textures
Pretty nice (with volumetric fog)
Damn nice (with volumetric fog)
Cameras/Monitors
In scene (if render targets are supported)
In scene
In scene
Volumetric Effects (Any smoke or fog)
Sparse
Yes (per-pixel lit)
Yes (per-pixel lit
Shader Function
Fixed-function (hardware T&L)
Assembly Vertex/Pixel Shaders (VS1.1, PS1.1-PS1.4)
DX9 HLSL Vertex/Pixel Shaders (VS2.0, PS2.0)
Displacement Maps (Terrain, cave walls, etc)
Medium res
Mid-to-High res (with diffuse and specular bump-mapping)
Full-res (with bump diffuse and specular bump mapping
Texture Resolution
Medium (256x256)
High (512x512)
High (512x512)
Texture Variety
Low
Full
Full


DirectX 7 path

Half-Life 2’s DirectX 7 path includes NVIDIA’s GeForce 256, GeForce 2 series, GeForce2/4 MX, and nForce, and the RADEON 7xxx series (with RADEON 9100 IGP and MOBILITY RADEON 9000/9100 defaulting to the DirectX 7 path as well).

  • Screen space effects are really simple.
  • No model decals
  • No detail props
  • No refractive water
  • Reduced decal visibility distance
  • No bumpmaps
  • Reduced model LODs
  • Reduced material mip level

    DirectX 8 path

    Among the cards included in the DirectX 8 path are GeForce4 Titanium series (including GeForce4 Go), GeForce FX 5200/5600/5700, and GeForce FX Go 5600/5700 series.

  • On some cards with poor fillrate, bumpmaps may be turned off in some scenes that use a lot of bumpmaps. At the moment, this is true for the GeForce4 Ti 4200 but we've worked with Nvidia to come up with a solution to reactivate bumpmaps on the 4200.
  • Water by default is refractive but does not have local specular.
  • Water has a hard edge when it meets the shore, volumetric fog is used for this. Its per vertex screen space effects are better than DirectX 7, but still simple.
  • Shadows are render-to-texture but are not supersampled to make them
    look softer.

    DirectX 8.1 path

    Cards that use the DirectX 8.1 path include RADEON 8500/9100, RADEON 9000/9200, GeForce FX 5800/5900.

  • Water by default is refractive but does not have local reflections. If you activate local reflections on this card, it will occur in one pass as opposed to happening in 2 passes on DX8.0, which will make it cheaper from a fillrate perspective.
  • As in DX8.0, water has a hard edge when it meets the shore, volumetric fog is used for water. Its per vertex screen space effects are better than DX7, but still simple.
  • Shadows are render-to-texture and are supersampled to make them look
    softer.

    DirectX 9 path

    Graphics cards that use the DX9 path include GeForce 6800 series, GeForce 6600 series, RADEON 9500/9600, RADEON X300/X600 series, RADEON X800 series, RADEON 9700/9800, MOBILITY RADEON 9600/9700, and MOBILITY RADEON 9800

  • Water by default is refractive with local reflections from world geometry.
  • Water refraction realistically refracts the geometry beneath the water (when looking into the water) based on the depth of the geometry in DX9.
  • There is a special water rendering feature which smooths out the shorelines which reduces water refraction in areas with shallow water.
  • There is a gradual blend from water to shore volumetric fog (for water) its per pixel screen space effects (post effects) are more complex.
  • Shadows are render-to-texture and are supersampled to make them look
    softer.
  • Certain displacements use blended bumpmaps instead of a single bumpmaps (for example, displacements that blend between sand and rocks).

    Notes

    The main highlights we take from this is that DirectX 7 lacks bump mapping. DX7 users will also miss out on refractive water and detail props like strands of grass and rocks. Valve also mentions the use of 256x256 textures and reduced level of detail on models (with no decals).

    DirectX 8 adds bump maps, but they may be turned off in some cases with lower-end DX8 cards, which don’t have the fill rate to provide fluid frame rates. Valve also includes detailed props, but only when you approach them. You’ll also get better-looking water, with some light refraction included, and higher res 512x512 textures. With DX8.1, Valve uses the same water reflection model by default (a non-local specular solution that doesn't reflect world geometry), and when activated, a one-pass local specular solution that adds world geometry reflections to water. (This takes 2 passes in the DX8.0 path.) Shadows are also supersampled in DirectX 8.1.

    In the DirectX 9 path, Valve ups the ante with water. World geometry is added to the water’s reflection by default, Valve also mentions smoothing out the shorelines. If you played a lot of Far Cry, you probably noticed the harsh transitions that occurred when waves met the shore, this feature should help this. Valve also adds radiosity-based (physically correct) bump mapping to static props (items that are placed by the developer, such as desks, chairs, crates, barrels) and dynamic props and NPCs. Shadows have soft edges, with full resolution displacement maps used for areas like cave walls. You could see this in the screenshots from the original article.



    Image qualityPage:: ( 2 / 9 )

    GeForce FX DirectX 8.1 vs. DX9

    Before we show you the GeForce FX DX9 shots, lets first go over the DirectX 8.1 screenshots we took in the previous article. All screenshots are taken with 4xAA/8xAF:

    [image]

    <% print_image("01"); %><% print_image("02"); %><% print_image("03"); %>
    <% print_image("04"); %><% print_image("05"); %><% print_image("06"); %>

    And now, GeForce FX with DirectX 9:

    [image]
    <% print_image("07"); %><% print_image("08"); %><% print_image("09"); %>
    <% print_image("10"); %><% print_image("11"); %><% print_image("12"); %>

    Based on our screenshots, the enhanced DX9 water we just mentioned on the first page has apparently taken a complete disappearing act when run on GeForce FX, it’s completely transparent! This is likely a bug in the DX9 path that pops up with GeForce FX. We can however, see the full resolution displacement mapping in use along the cave walls:



    GeForce FX 5950 Ultra DX8.1




    GeForce FX 5950 Ultra DX9.0


    Here’s the original DX9 shot we took of the same wall with GeForce FX 5950 using the “mat_dxlevel 90” console command:



    Incorrect GeForce FX 5950 Ultra DX9.0


    As you can see, there’s a significant difference between the displacement maps used in DirectX 9 versus DirectX 8.1. The full resolution displacement maps used in the DX9 path don’t have the exaggerated look of 8.1 (although some of you in the comments preferred 8.1). When we compare the new GeForce FX DX9 scene above with RADEON 9800 XT, we can confirm that we’re now running with the DX9 path properly enabled:



    RADEON 9800 XT DX8.1




    RADEON 9800 XT DX9.0


    Next let’s see how the different paths and cards look in de-dust with Counter-Strike: Source.



    Counter-Strike screenshotsPage:: ( 3 / 9 )




    Shadows

    The first aspect we wanted to explore in Counter-Strike: Source are the soft shadows supported in the DirectX 8.1 and DirectX 9 paths. If you recall the chart on page 1, shadows in the DX8.1 and DX9 paths are supersampled to give them softer edges than DX8.0 shadows. Dust isn’t the best map for this, but we were still able to find a good test sample:

    [image]

    <% print_image("13"); %><% print_image("14"); %><% print_image("15"); %>
    <% print_image("16"); %><% print_image("17"); %><% print_image("18"); %>

    Although this is a pretty simple test case, it isn’t hard to see the softer shadow cast on the terrorist in this batch of screenshots with the DX8.1 and DX9 paths on both ATI and NVIDIA hardware:



    GeForce FX 5950 Ultra DX8.0




    GeForce FX 5950 Ultra DX8.1


    Displacement maps

    We provided screenshots of the full resolution displacement maps in the video stress test screenshots on the previous page, but we wanted to explore the topic again in Counter-Strike: Source. Our next test area comes from outside the middle area in dust:

    [image]

    <% print_image("19"); %><% print_image("20"); %>
    <% print_image("21"); %><% print_image("22"); %>
    <% print_image("23"); %><% print_image("24"); %>
    <% print_image("25"); %><% print_image("26"); %>

    The output of the GeForce FX 5950 Ultra and RADEON 9800 XT looks pretty similar in both the DirectX 8.1 and DirectX 9 paths; spotting one card from another would be difficult if we removed the captions from the screenshots:



    GeForce FX 5950 Ultra DX8.1




    RADEON 9800 XT DX8.1




    GeForce FX 5950 Ultra DX9




    RADEON 9800 XT DX9


    Based on the screenshots we’ve collected, we’re 100% confident that the GeForce FX 5950 Ultra is indeed running Source’s DX9 path. But before we get into the performance comparison, we took a few miscellaneous screenshots in dust:

    [image]
    <% print_image("27"); %><% print_image("28"); %>
    <% print_image("29"); %><% print_image("30"); %>
    <% print_image("31"); %><% print_image("32"); %>
    <% print_image("33"); %><% print_image("34"); %>



    System setupPage:: ( 4 / 9 )

    AMD Athlon 64 3800+

    ASUS K8V Deluxe

    1GB OCZ PC3200 EL Platinum Rev2

    ATI RADEON 9800 XT
    ATI RADEON 9600 XT
    CATALYST 4.8

    eVGA e-GeForce FX 5950 Ultra
    eVGA e-GeForce FX 5700 Ultra
    eVGA e-GeForce FX 5600 Ultra
    PNY Verto GeForce 6800 GT
    ForceWare 61.77

    DirectX 9.0c

    Windows XP with Service Pack 1

    60GB Western Digital Special Edition with 8MB cache

    Benchmarks

    Half-Life 2 Video stress test
    Counter-Strike: Source beta



    Trilinear filtering/AA disabledPage:: ( 5 / 9 )

    Half-Life 2 VST – Direct3D








    4xAA/8xAFPage:: ( 6 / 9 )

    Half-Life 2 VST – Direct3D







    Counter-Strike: Source performancePage:: ( 7 / 9 )

    Counter-Strike: Source – Direct3D







    CS: Source 4xAA/8xAFPage:: ( 8 / 9 )

    Counter-Strike: Source – Direct3D








    ConclusionPage:: ( 9 / 9 )

    Once DirectX 9 is enabled, GeForce FX cards took a significant performance hit in our testing. For GeForce FX 5700 Ultra and 5600 Ultra, we witnessed performance declines of up to 2.5 times running the DirectX 8.1 path in a couple of cases with the video stress test. In comparison, RADEON 9600 XT’s worst-case scenario was a performance decline of 23% at 1600x1200 with 4xAA and 8xAF. On the high-end cards, GeForce FX 5950 Ultra performance dropped by a factor of two once the DirectX 9 path was enabled (versus RADEON 9800 XT’s 10-27%). Essentially, enabling the DX9 path with GeForce FX cards knocks your frame rate in half with Valve’s video stress test, the performance dropoffs are sometimes even worse for GeForce FX in Counter-Strike: Source beta. Just take a look at the trilinear benchmarks on page 7. It isn’t pretty for GeForce FX at 1024x768 and 1280x1024 with the DX9 path enabled.

    Based on this data, we can’t fault Valve for running GeForce FX cards in DirectX 8.0/8.1 mode by default. If the frame rate isn’t high enough to ensure seamless gameplay, gamers tend to get frustrated. After all, no one enjoys playing a slideshow.

    NVIDIA, on the other hand, argues that the video stress test isn’t reflective of real world gameplay in Half-Life 2. In order to assess performance of Half-Life 2, there’s no substitute better than the game itself. As the video stress test is largely based on the Techdemo from ATI’s Shader Day event last year and not one of the gameplay demos such as City17 or Bugbait, the video stress test has little to do with Half-Life 2 performance, and nothing to do with other games based on the Half-Life 2 engine.

    In fact, NVIDIA claims that Source Engine-based games with geometry instancing and shader model 3.0 pixel and vertex shaders will be faster on NVIDIA’s current generation, GeForce 6800 hardware than on ATI X800. We also know that NVIDIA will be releasing its next ForceWare driver early next month, although doubling performance in one driver release is highly unlikely (especially when you’re dealing with hardware as old as GeForce FX).

    Whatever the case, it’s refreshing to see that DX9 can indeed be enabled on GeForce FX hardware. While all current indications suggest that GeForce FX users won’t want to play Half-Life 2 in this mode, it’s good to have that option available. No one likes being forced to do something, especially when you’re talking about a graphics card you spent your hard-earned money on. By providing the DX9 path via command line or console, Valve keeps the casual gamers who know nothing about their hardware happy, while enthusiasts can tweak settings to their heart’s content. As we said in our original article, it’s a win-win scenario for everyone involved.

  • © Copyright 2003 FS Media, Inc.
    [ Print Article! | Close Window ]