Direct3D
Direct3D is the graphics programming interface that sits between Windows software and the raw power of a graphics card. For most of computing history, getting a program to draw a triangle on screen meant writing different code for every brand of hardware. Direct3D changed that bargain. It promised a single interface that could talk to any graphics card, offloading the heavy lifting of three-dimensional rendering to dedicated silicon.
Three questions follow from that promise. How did a small startup's medical imaging tool end up as the backbone of PC gaming? Why did game developers nearly reject it in favor of a rival API before it was even finished? And how does a piece of software that began as a thin translation layer eventually grow to manage everything from pixel shading to raytracing, from desktop PCs to Xbox consoles? The answers run through more than three decades of graphics hardware history and a few pivotal decisions that could easily have gone the other way.
In 1992, Servan Keondjian, Doug Rabson, and Kate Seekings founded a company called RenderMorphics. Their product, a 3D graphics API named Reality Lab, was built for medical imaging and CAD software, not for games. Microsoft bought RenderMorphics in February 1995, bringing the entire staff on board to build a 3D graphics engine for Windows 95.
The first version of Direct3D shipped with DirectX 2.0 on the 2nd of June, 1996, and then again with DirectX 3.0 on the 26th of September, 1996. Those early releases carried forward the architecture RenderMorphics had already built. Direct3D offered both an "immediate mode" low-level API and a "retained mode" scene graph API, both derived from Reality Lab's second release.
The retained mode turned out to be a poor fit for game developers. Only two games that sold a significant volume, Lego Island and Lego Rock Raiders, were ever built on it. Game developers wanted direct control over hardware; the retained mode stood in the way. Microsoft dropped further retained mode updates after DirectX 3.0.
Direct3D's early immediate mode used a programming model called the execute buffer. Microsoft hoped hardware vendors would process these buffers directly, allocating them in video memory and letting the GPU parse and execute them without CPU involvement. The idea was forward-looking, but the reality was that execute buffers were considered extremely awkward to program.
The friction was serious enough that developers called on Microsoft to abandon Direct3D entirely and adopt OpenGL as the official 3D API for games, as it already was for workstation applications. Microsoft declined. Rather than switch to OpenGL, the team chose to keep improving their own API, partly to compete with OpenGL and partly to take on proprietary alternatives like 3dfx's Glide.
The answer came in December 1996, when a team in Redmond took over the immediate mode while the original London-based RenderMorphics team continued work on retained mode. The Redmond team introduced the DrawPrimitive API, which eliminated the need for execute buffers entirely and made Direct3D feel much more like Glide or OpenGL to write. The first beta of DrawPrimitive shipped in February 1997, and the finished version arrived with DirectX 5.0 in August 1997.
DirectX 6.0, released in August 1998, added multitexturing, stencil buffers, and optimized geometry pipelines for x87, SSE, and 3DNow! instructions. It also introduced a licensing arrangement where Microsoft included vendor-specific hardware features in the API in exchange for an early market advantage for the contributing vendor. S3 texture compression entered the API this way, renamed DXTC for the purpose. A bump mapping technique from TriTech came in through the same route.
DirectX 7.0 arrived in September 1999 and introduced the .dds texture format along with hardware transform and lighting acceleration, a capability first available on PC hardware with Nvidia's GeForce 256. Hardware vertex buffers represented, by the source's account, the first substantive improvement over OpenGL in DirectX history. Even so, the fixed-function multitexture pipeline had grown so complicated to program that the team recognized a new model was needed.
DirectX 8.0, released in November 2000, provided it. Programmable vertex and pixel shaders let developers write code that ran directly on the GPU without worrying about the underlying hardware state. It was the first major departure from the OpenGL-style fixed-function model, where drawing is controlled by a complicated state machine. DirectX 8.0 also absorbed the last remaining DirectDraw API calls, making Direct3D the single rendering API across the platform.
Direct3D 9.0 arrived in December 2002, adding the High Level Shader Language for floating-point texture formats, Multiple Render Targets, and texture lookups inside vertex shaders. It became one of the longest-lived versions in the API's history, remaining the baseline for games well into the following decade.
The jump to Direct3D 10 was bound to Windows Vista and introduced a fundamental shift in how hardware compatibility worked. Earlier versions tracked supported features through "capability bits," a vendor-by-vendor list of what each card could do. Direct3D 10 replaced that with a mandatory minimum standard: if a card called itself Direct3D 10 compatible, it had to support the full feature set, no exceptions. The geometry shader stage was new, allowing geometry to be generated entirely on the GPU rather than handed in from the CPU.
The timing caused friction. Direct3D 10 hardware was rare when Vista launched, and the massive existing base of older graphics cards meant the first Direct3D 10 games still shipped with Direct3D 9 fallback paths. Games such as Company of Heroes, Hellgate: London, and Crysis all carried both render paths. The DirectX 10 SDK became available in February 2007, and Direct3D 10.1 followed with its runtime shipping alongside Windows Vista SP1 in mid-March 2008. By June 2008, the only Direct3D 10.1 hardware available was ATI's Radeon HD 3000 and HD 4000 series.
Direct3D 11 was released as part of Windows 7. Microsoft first presented it at Gamefest on the 22nd of July, 2008, and demonstrated it at the Nvision 08 technical conference on the 26th of August, 2008. AMD previewed working DirectX 11 hardware at Computex on the 3rd of June, 2009.
The headline addition was tessellation, a technique for subdividing low-detail geometry into finer meshes at runtime, increasing visible polygon counts without requiring artists to store high-polygon assets. But the more lasting engineering change was multithreaded rendering. For the first time, developers could submit rendering work to the same Direct3D device from multiple CPU threads simultaneously, letting multi-core processors drive the GPU more efficiently.
Direct3D 12 lowered the abstraction layer further than any previous version. Its lead developer Max McMullen described the goal as achieving "console-level efficiency" and improved CPU parallelism. The mechanism was a shift in responsibility: instead of the driver managing GPU resources on the application's behalf, developers now controlled memory allocation, resource binding, and command submission directly.
In Direct3D 11, commands traveled from CPU to GPU one by one in sequence, bottlenecked by the speed at which the CPU could issue them. Direct3D 12 replaced that model with command lists, self-contained packages of work that the GPU could consume without waiting on additional CPU input. Bundles within those lists could be reused across frames, reducing redundant work. Descriptor heaps and tables let developers pre-allocate frequently used resources for fast GPU access.
DirectX Raytracing arrived with Windows 10 version 1809, the October 2018 Update. Shader Model 6.0 shipped with the Windows 10 Creators Update in April 2017, and DirectX 12 Ultimate, which bundled raytracing, mesh shaders, variable-rate shading, and sampler feedback into a single tier called 12_2, came with Windows 10 version 2004 in 2020. Microsoft also released experimental Direct3D 12 support for Windows 7 SP1 in 2019, delivered as a NuGet package.
Direct3D was designed for Windows, but a parallel ecosystem grew to run it elsewhere. DXVK is an open-source Vulkan-based translation layer for Direct3D 8 through 11 that enables Windows games to run on Linux via Wine. Valve's Proton project, which powers game compatibility on the Steam Deck, uses DXVK as a core component.
Several DXVK forks addressed earlier API versions: D7VK covered Direct3D 3, 5, 6, and 7, while D8VK added Direct3D 8 support before being merged into the main DXVK project with version 2.4, released on the 10th of July, 2024. D9VK brought Direct3D 9 support and was folded into DXVK on the 16th of December, 2019. For Direct3D 9 specifically, Gallium Nine offers a different approach, running Direct3D 9 applications on Linux without any translation layer at all, aiming for near-native performance.
For Direct3D 12, the vkd3d library translates calls to Vulkan and is included in Valve's Proton. The Wine project also maintains WineD3D, which translates Direct3D to OpenGL and can run on Windows itself under certain conditions. Taken together, this ecosystem means that a game written against Direct3D's various versions can run on hardware and operating systems its designers never anticipated.
Common questions
What is Direct3D and what is it used for?
Direct3D is a graphics API for Microsoft Windows, part of the DirectX family. It is used to render three-dimensional graphics in performance-sensitive applications such as games, and it uses hardware acceleration when a compatible graphics card is present.
Who created Direct3D and when was it first released?
Direct3D grew out of a 3D graphics API called Reality Lab, developed by Servan Keondjian, Doug Rabson, and Kate Seekings at a company named RenderMorphics. Microsoft acquired RenderMorphics in February 1995, and the first version of Direct3D shipped with DirectX 2.0 on the 2nd of June, 1996.
What was the main competition to Direct3D in the 1990s?
Direct3D's main competitors were OpenGL, developed by SGI and now maintained by the Khronos Group, and 3dfx's Glide API. Microsoft and SGI attempted to merge Direct3D and OpenGL under a project called Fahrenheit in the 1990s, but that effort was eventually cancelled.
What major change did Direct3D 8.0 introduce?
Direct3D 8.0, released in November 2000, introduced programmable vertex and pixel shaders, allowing developers to write custom GPU code instead of relying on a fixed-function rendering pipeline. It also absorbed DirectDraw, making Direct3D the single rendering API for both 2D and 3D on Windows.
What is the difference between Direct3D feature levels and API versions?
Feature levels define minimum sets of hardware capabilities a graphics card must support, using underscores as delimiters (for example, 11_0). API versions refer to the runtime and its features, using dot notation (for example, Direct3D 11.4). Feature levels allow a single API version to run across a range of hardware generations.
Can Direct3D games run on Linux?
Yes. DXVK is an open-source Vulkan-based translation layer for Direct3D 8 through 11 that allows Windows games to run on Linux via Wine; it is used by Valve's Proton project. Direct3D 12 support on Linux is provided by the vkd3d library, also included in Proton.
All sources
188 references cited across the entry
- 1webConfiguring Depth-Stencil FunctionalityMicrosoft — August 19, 2020
- 2webRenderStateManager.UseWBufferMicrosoft — November 6, 2009
- 3webTexture Blending (Direct3D 9)Microsoft — January 6, 2021
- 4webGeometry Blending (Direct3D 9)Microsoft — January 6, 2021
- 5webHLSLMicrosoft — August 4, 2021
- 6webEffects (Direct3D 11)Microsoft — June 11, 2021
- 7webDirectX Software Development Kit, October 2006Microsoft
- 8webWindows Advanced Rasterization Platform (WARP) Guide – WARP Architecture and PerformanceMSDN — October 11, 2022
- 12webVertex Shaders and Pixel ShadersDom Penfold — 16 January 2002
- 14webDirectX 9.0c End-User Runtime2007-10-17
- 15webQube Soft Management Teamqubesoft.com — 2017-04-04
- 16webJoining the Multimedia PartyJeff Prosise — May 16, 1995
- 17webBuilding a Scene Using Retained Mode Direct3DNigel Thompson — August 1996
- 18webDirectXOtto Berkes — April 12, 2015
- 19webWhat happened to DirectX 4?Raymond Chen — Microsoft — 2004-01-22
- 20webPress Release-Microsoft Meltdown (February 1997)Microsoft Corporation — 1997-02-18
- 21webPress Release-Microsoft Meltdown (July 1997)Microsoft Corporation — 1997-07-22
- 22webGet Fast and Simple 3D Rendering with DrawPrimitive and DirectX 5.0Ron Fosner — Microsoft Systems Journal
- 23webDirect3D 7 Immediate Mode Framework Programming 3: Multitexturinggamedev.net — 2000-05-29
- 24webMicrosoft Ships Final Release of DirectX 6.0Microsoft — 1998-08-07
- 25webMicrosoft Ships DirectX 6.1Microsoft — 3 February 1999
- 26webBill Gates April 1997 Talisman UpdateMicrosoft — 1997-05-05
- 27webDDS (DirectDraw Surface format)MSDN — August 19, 2020
- 28newsDirectX 7: due July 99March 1999
- 29webMicrosoft Announces Release of DirectX 8.0Microsoft — 9 November 2000
- 31webDirectX 8 Graphics and Video: A Fresh Startgamedev.net — 2000-11-30
- 32webDirect3D 9 GraphicsMSDN
- 33webWriting HLSL Shaders in Direct3D 9MSDN
- 34webHLSL in Direct3D 9.0
- 35webMultiple Render Targets (Direct3D 9)MSDN
- 38webDirect3D 9Ex ImprovementsMSDN
- 39webGraphics APIs in WindowsMSDN — August 2009
- 40webThe role of the Windows Display Driver Model in the DWM2006-04-02
- 41webAPI Features (Direct3D 10)MSDN
- 42webDirect3D Retained Mode removed from Windows VistaMicrosoft Support — March 17, 2009
- 43webDirectX Software Development KitMicrosoft — 2007-02-02
- 44webResource Types (Direct3D 10)MSDN
- 45webAPI Layers (Direct3D 10)MSDN
- 46webCNet News
- 47webCommon-Shader CoreMicrosoft — June 30, 2021
- 48webGeometry Shader FeaturesMicrosoft — August 23, 2019
- 49webShader StagesMicrosoft — October 11, 2016
- 50webWhat Direct3D 10 is all about – Additional ImprovementsTom's Hardware — 2006-11-08
- 51webDirect3D 10.1 FeaturesMSDN
- 52webMicrosoft Presents DirectX 10.1 Details at SIGGRAPHExtremeTech — 2007-08-07
- 53webDirect3D 10.1 FeaturesMSDN — January 6, 2021
- 55webD3D10_FEATURE_LEVEL1 enumerationMSDN
- 56webDirect3D feature levelsMSDN
- 57webDirect3D 11 FeaturesMSDN
- 58webGamefest 2008 PresentationsMicrosoft
- 59webNvision 08 Tech PresentationsNvidia
- 60webDirectX Software Development Kit, November 2008Microsoft — 2008-11-07
- 61webAMD shows off world's first DirectX 11 GPUEngadget — 2009-06-03
- 62webDirect3D Feature LevelsChuck Walbourn — June 20, 2012
- 63webIntroduction to the Direct3D 11 Graphics Pipeline - Presentation from GameFest 2008Microsoft — 2008-08-27
- 64webDirect3D 11 on Downlevel HardwareMSDN
- 66webDirect3D feature levelsMSDN
- 67webUsing ATI hardware tessellation in DX92008-07-14
- 71webNew Resource TypesMSDN
- 72webDepth BiasMSDN
- 73webD3D11_RASTERIZER_DESC1 structureMSDN
- 74webShader Model 5MSDN
- 75webTessellation OverviewMicrosoft — September 16, 2020
- 77webDescription of the Platform Update for Windows Server 2008 and the Platform Update for Windows VistaSupport.microsoft.com — 2012-10-02
- 78webThe Platform Update for Windows Vista – DirectX Developer Blog – Site Home – MSDN BlogsBlogs.msdn.com — 2009-09-10
- 79webDirect3D 11.1 FeaturesMSDN
- 82webDirect3D 11.1 FeaturesMSDN
- 83webDXGI 1.2 ImprovementsMSDN
- 84webWDDM 1.2 featuresMSDN
- 85webWindows Display Driver Model Enhancements in Windows Developer PreviewMSDN — 2011-09-13
- 86webScalar Types
- 87webIntel's Haswell IGP to Feature DirectX 11.1, Increased Professional Application SupportAnandTech — 2011-08-05
- 88webDirectX Graphics – Platform Update for Windows 7MSDN — 2012-11-14
- 89webDirectX 11.1 and Windows 7November 13, 2012
- 90webDirectX programmingMSDN
- 91webDirect3D 11.2 FeaturesMSDN
- 93webWindows 8.1 Feature Guide – DirectX programmingJune 26, 2013
- 94webWhat's New in Direct3D 11.2Bennett Sorbo — June 26, 2013
- 95webDXGI 1.3 ImprovementsJune 26, 2013
- 99webMassive Virtual Textures for Games: Direct3D Tiled ResourcesCharles Hollemeersch, Matt Sandy — June 26, 2013
- 100webDirect3D 11.2 FeaturesJune 26, 2013
- 101webMSDN BlogsMSDN
- 103webRaising the Bar with Direct3DOctober 14, 2013
- 104webMicrosoft officially turns down MantleOctober 16, 2013
- 106webRendering (Direct3D 12 Graphics) - Win32 appsDecember 30, 2021
- 107webMicrosoft Details Direct3D 11.3 & 12 New Rendering FeaturesRyan Smith — 18 September 2014
- 108webThe NVIDIA GeForce GTX 980 Review: Maxwell Mark 2Ryan Smith — 18 September 2014
- 109webDirectX 11.3 New Features Outline – Tiled Resources – Typed UAV LoadsSeptember 19, 2014
- 110webD3D11_CONSERVATIVE_RASTERIZATION_TIER enumeration22 February 2015
- 111webDirect3D 11.3 Features28 March 2015
- 114webIntel Developer Zone
- 116inlinefirst two minutes of
- 117webA closer look at DirectX 12 – The Tech Report – Page 3March 31, 2014
- 119webShader Model 5.1 - Win32 appsNovember 20, 2019
- 121webDirectX 12 will also add new features for next-gen GPUsMarch 21, 2014
- 123webTechnical Library
- 124webPipelines and Shaders with Direct3D 12 - Win32 appsstevewhims — 2021-12-30
- 125webRoot Signatures Overview - Win32 appsstevewhims — 2023-02-06
- 127webMulti-Adapter
- 128webPorting DirectX 12 games to Windows 7August 21, 2019
- 129webDirectX-Specs
- 131inlineHLSL Shader Model 6.0
- 135webSoftware Rasterizer for the Microsoft DirectX 9.0 Software Development Kit (SDK)Microsoft — 2005-08-01
- 137webGraphics Pipeline
- 138webInput-Assembler StageNovember 4, 2020
- 139webVertex Shader Stage
- 140webTessellation StagesSeptember 16, 2020
- 141webGeometry Shader StageMay 24, 2021
- 142webStream-Output StageNovember 4, 2020
- 143webRenderStatesNovember 6, 2009
- 144webRasterizer StageNovember 4, 2020
- 145webPixel Shader StageAugust 19, 2020
- 146webOutput-Merger StageMay 24, 2021
- 147webDirect3D 11.1 Features - Win32 appsAugust 19, 2020
- 148webD3D11_FORMAT_SUPPORT enumerationMSDN
- 149webD3D11_FORMAT_SUPPORT2 enumerationMSDN
- 150webHardware Tiers - Win32 appsDecember 30, 2021
- 151webD3D12_FEATURE - Win32 appsFebruary 14, 2023
- 152webIntroduction to a Resource in Direct3D 11 - Win32 appsOctober 6, 2021
- 153webIntroduction to Resource Binding in Microsoft DirectX 12Wolfgang Engel
- 155webShows
- 158webWindows 10 Versus Linux: 6 Steam Games Benchmarked On Intel's Hades Canyon NUCJason Evangelho — March 1, 2019
- 159citationVulkan-based D3D11 and D3D10 implementation for Linux / Wine: doitsujin/dxvkPhilip Rebohle — 2019-04-03
- 160citationCompatibility tool for Steam Play based on Wine and additional components: ValveSoftware/ProtonValve — 2019-04-03
- 161citationWinterSnowfall/d7vkWinterSnowfall — 2026-03-13
- 162webD7VK Aims To Deliver Direct3D 7 Atop VulkanMichael Larabel — 2025-11-07
- 163webNew project brings strong Linux compatibility to more classic Windows gamesKyle Orland — 2025-11-10
- 164webD7VK 1.5 Released With Direct3D 3 Now Implemented Over VulkanMichael Larabel — 2026-03-11
- 165webD8VK GitHub repositoryGitHub
- 166webD9VK GitHub repositoryGitHub
- 167webProton Re-Based To Wine 4.11, Adds D9VK Direct3D 9, Better CPU Utilization & DXVK 1.3Michael Larabel — July 30, 2019
- 169citationBuild Gallium Nine support on top of an existing WINE installation: iXit/wine-nine-standaloneiXit Group — 2019-04-03
- 170webUbuntu 18.10 Adds Gallium Nine Support, Latest Mesa 18.2.2Joey Sneddon — October 10, 2018
- 171citationWineHQ - vkd3dDirect3D 12 — 2019-04-03
- 172webVkd3d 1.0 Released
- 173webValve's Proton Offers Branch With VKD3D For Direct3D 12 Over VulkanMichael Larabel — August 23, 2019
- 175webWineD3DOnWindows – The Official Wine WikiWiki.winehq.org — 2013-06-02
- 176webD3DX 11 ReferenceMSDN
- 177webLiving without D3DXMSDN
- 178webEffect-Compiler ToolMicrosoft — August 19, 2020
- 179webSpherical Harmonics Math
- 180webEffects 11
- 183webDirectX Tool Kit
- 184webUVAtrlas
- 185webDXUT for Win32 Desktop UpdateMSDN
- 188webFurther RenderingNicole Claro — April 1995
- 189webDirect Machine Learning (DirectML)Microsoft Docs
- 190webDirectMLMicrosoft Docs