Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
(Redirected from Direct3D)
DirectX
Information
Type Application programming interface family
Developer Microsoft
Operating System Windows
Website https://learn.microsoft.com/en-us/windows/win32/directx


DirectX is a family of application programming interfaces and supporting libraries from Microsoft for graphics, audio, input and other multimedia tasks on Windows. Direct3D is its three-dimensional graphics API; DirectX also includes components for two-dimensional drawing, text, audio and mathematical operations. The name DirectX therefore covers more than the rendering interface alone.[1]

For virtual reality and augmented reality, Direct3D can render the images supplied to an XR system. OpenXR defines separate interfaces for the session, view poses, frame timing and submission to the runtime. Its Direct3D 11 and Direct3D 12 extensions connect an application's graphics device to that runtime. Microsoft documents native DirectX development as an alternative to using engines such as Unity or Unreal Engine.[2][3][4]

Reviewed 12 October 2026. Independently checked the cited API and OpenXR documentation, release dates, DirectX tools, Windows Mixed Reality removal notice, and the bounded foveated-rendering findings from the Guenter paper and Patney project abstract and supplement. About review dates.

API family

The components have different responsibilities. A Direct3D renderer may use other DirectX libraries, but those libraries do not all perform three-dimensional rendering.[1]

Component Responsibility
Direct3D Three-dimensional graphics and GPU rendering.[1]
Direct2D Hardware-accelerated two-dimensional geometry, bitmaps and text.[1]
DirectWrite Text layout and rendering, including Unicode text and outline fonts.[1]
DXGI Graphics adapter and display-mode enumeration, resource sharing, and presentation to windows or monitors. It is used by Direct3D 10, 11 and 12.[5]
XAudio2 Audio processing and mixing. Microsoft identifies it as the replacement for DirectSound.[1]
XInput Controller input. Microsoft's component overview also directs newer input development toward GameInput.[1]
DirectXMath SIMD-based vector and matrix mathematics.[6]
DirectStorage APIs for storage operations used in game asset loading.[6]
DirectML A low-level machine-learning API that follows the Direct3D 12 programming style.[1]

High-level shader language (HLSL) describes programmable graphics and compute shaders. Microsoft introduced it with DirectX 9. Shader code supplies operations for stages such as vertex processing, pixel shading and compute, while the application configures the graphics pipeline and its resources.[7]

History

By September 1996, DirectX 3.0 grouped DirectDraw, Direct3D, DirectSound, DirectInput and DirectPlay. Microsoft's release announcement described a common interface to specialized multimedia hardware, reducing the need for applications to address individual hardware implementations. The component set and development tools subsequently changed; the 1996 list is a historical description, rather than a list of interfaces recommended for every new application.[8][1]

Date or period Development
Windows 8 era DirectX headers, libraries and tools became part of the Windows software development kit, replacing the separate DirectX SDK as the main development package.[9]
20 March 2014 Microsoft announced DirectX 12, describing a Direct3D model with command lists, pipeline state objects and descriptor-based resource binding.[10]
29 July 2015 DirectX 12 became available with the release of Windows 10.[11]
19 March 2020 DirectX 12 Ultimate was announced as a feature bundle comprising DirectX Raytracing 1.1, variable rate shading, mesh shaders and sampler feedback.[12]
April 2021 Microsoft published the Agility SDK workflow, allowing applications to ship an appropriate Direct3D 12 core runtime alongside the application.[13]
26 February 2026 Microsoft announced retail availability of Shader Model 6.9 with Agility SDK 1.619, alongside additional Direct3D 12 features.[14]

Graphics programming model

Direct3D 11

A Direct3D 11 device creates resources and exposes graphics capabilities. A device context sets pipeline state and issues rendering commands. Each device has an immediate context that sends work toward the driver; deferred contexts record command lists for later execution, supporting command preparation on multiple threads. The device interface is free-threaded, but an individual context must be used by one thread at a time.[15]

Direct3D 12

Direct3D 12 gives the application more responsibility for work submission, memory use and synchronization. Applications record command lists, submit them to command queues, bind resources through descriptors, and use pipeline state objects to specify combinations of rendering state. Microsoft's documentation describes it as an API for developers familiar with graphics programming, threading, CPU/GPU synchronization and resource-state transitions.[16]

Resource barriers describe transitions between uses of a resource, such as writing it as a render target and reading it as a shader resource. The application tracks these states, whereas Direct3D 11 handles much of this tracking in the driver.[17] Fences serve a related but different purpose: their signal and wait operations coordinate progress between the CPU and GPU, or between graphics, compute and copy queues. An application must arrange those dependencies before reusing resources that are still in use.[18]

Feature levels and capabilities

A feature level describes a defined set of GPU functionality. It does not measure rendering speed. Direct3D 12 supports devices at several feature levels, and applications can query optional capabilities with CheckFeatureSupport. Consequently, the installed DirectX runtime, the device's feature level and the shader model used by a program are separate compatibility considerations.[19][7] A renderer using an optional DirectX 12 Ultimate feature must also account for hardware that does not implement the complete bundle.[12]

Integration with XR runtimes

Graphics devices and runtime images

OpenXR's Direct3D graphics extensions specify how an application connects its rendering objects to a session. Before creating the session, the application queries the runtime's graphics requirements. These identify a Windows graphics adapter by its locally unique identifier (LUID) and specify a minimum feature level. The application creates compatible Direct3D objects and passes them through the appropriate graphics binding.[3][4]

Interface Requirements query Objects supplied to the OpenXR session
Direct3D 11 xrGetD3D11GraphicsRequirementsKHR A Direct3D 11 device in XrGraphicsBindingD3D11KHR.[3]
Direct3D 12 xrGetD3D12GraphicsRequirementsKHR A Direct3D 12 device and command queue in XrGraphicsBindingD3D12KHR.[4]

The runtime supplies swapchain images, which the application obtains through xrEnumerateSwapchainImages. It renders into those images using its graphics device. This differs from ordinary window presentation through DXGI: the XR runtime receives composition layers and manages their presentation to the headset.[3][5][20]

The Direct3D 12 extension also defines resource-state requirements. On a successful xrWaitSwapchainImage, a color image is in render-target state and a depth image is in depth-write state. Before releasing an image, the application must restore the required state and make the image available for reads and writes on the command queue supplied at session creation. Ignoring this contract can produce undefined behavior.[4]

Frame timing and view poses

OpenXR separates rendering commands from the frame loop. Its guide describes three central calls:[20]

Call Role
xrWaitFrame Paces the application and returns a predicted display time.[20]
xrBeginFrame Marks the start of work for the frame.[20]
xrEndFrame Submits the composition layers for presentation.[20]

The application locates views for the predicted display time, renders from those poses and submits matching poses with its projection layer. A mismatch can impair reprojection and make the virtual scene appear unstable. Rendering also has to meet the runtime's timing. For example, at a 90 Hz refresh rate, one display interval is about 11.1 milliseconds.[20]

Stereo rendering and image stability

Stereoscopic rendering produces separate views for the eyes. Microsoft's native holographic rendering example uses a two-slice texture array and stereo instancing: a draw call renders instances with different view matrices, directing output to the corresponding array slice. In that implementation, support for setting SV_RenderTargetArrayIndex from the vertex stage is queried; a geometry shader provides a fallback. These details describe Microsoft's holographic Direct3D implementation, rather than a universal requirement for all OpenXR devices.[21]

Microsoft's OpenXR guidance for HoloLens 2 likewise describes sharing color and depth texture arrays between the eyes and using instanced rendering. It recommends submitting a depth buffer through XR_KHR_composition_layer_depth to improve hologram stability on that device. Its guidance also distinguishes additive display blending from opaque display blending and calls for correct handling of swapchain color formats. These choices depend on the display and runtime, not merely on selecting Direct3D 11 or 12.[22]

Performance and rendering research

Variable rate shading

Direct3D 12 variable rate shading (VRS) lets a renderer perform one pixel-shader invocation for a group of pixels, with finer shading retained elsewhere. Tier 1 provides control per draw call; Tier 2 adds per-primitive and screen-space image control and ways to combine the rates. Applications query support through D3D12_FEATURE_D3D12_OPTIONS6. Microsoft's documentation identifies lens-distortion-aware rendering as one VR application. VRS provides control over shading work; an application still needs its own policy for selecting regions and rates, including any use of gaze data.[23]

Foveated rendering studies

Foveated rendering reduces rendering detail away from the viewer's gaze. Guenter and colleagues' 2012 paper Foveated 3D Graphics used three nested gaze-centered layers, with decreasing resolution away from the center, combined with antialiasing and temporal reconstruction. The authors reported a five- to six-fold speedup under their tested desktop-display conditions. The study used a 1920 by 1080 desktop display and eye tracking, so that result does not establish a general performance gain for head-mounted displays or for every Direct3D renderer.[24] The Microsoft Research project later released implementation code with dependencies on the legacy DirectX SDK, providing a concrete connection between this rendering research and DirectX development.[25]

Patney and colleagues' 2016 paper Towards Foveated Rendering for Gaze-Tracked Virtual Reality examined perceptual problems in peripheral rendering, including loss of contrast and temporal artifacts. Their work combined contrast preservation with techniques for stable foveated images and included desktop and head-mounted display experiments. The supplementary material reports four participants in each of its two emulated-foveation setups. These experiments support attention to perceptual quality as well as rendering cost; they do not demonstrate a fixed speedup for DirectX, VRS or arbitrary XR hardware.[26][27]

Profiling

PIX timing captures expose CPU work, GPU work and command-queue execution. They can also show the delay between CPU submission and GPU execution, helping identify where latency arises. Captures and application event markers let developers investigate an actual workload rather than infer its speed from the API version or feature level alone.[28][19]

Development tools and compatibility

The Windows SDK supplies DirectX headers and libraries. Microsoft's SDK guidance distinguishes current development from projects that still depend on deprecated D3DX utility libraries or the June 2010 SDK.[9] The DirectX tool collection includes DirectX Shader Compiler (DXC), which compiles HLSL to DirectX Intermediate Language (DXIL), PIX, capability inspection tools and graphics helper libraries.[6]

The Agility SDK separates the Windows Direct3D 12 loader from the Direct3D 12 core implementation. An application can opt into and distribute a supported core runtime beside its executable. This still requires a compatible operating-system loader and graphics driver; packaging a runtime does not supply missing GPU features.[13][19] This graphics runtime is distinct from the OpenXR runtime to which an XR session connects.[4]

For diagnosis, dxdiag reports the DirectX version in its System tab and can save device and driver information. Microsoft directs users to Windows Update for DirectX updates appropriate to their Windows version.[29] Older games may require legacy runtime DLLs, but installing those components does not replace the core DirectX version already included with Windows.[30]

Windows Mixed Reality status

Microsoft's native rendering documentation includes the earlier Windows Mixed Reality holographic API, which uses HolographicSpace and HolographicFrame. The rendering page identifies that API as legacy and directs new native development to OpenXR. Its examples remain useful for understanding that implementation's stereo rendering and predicted camera poses, but do not establish current operating-system support for Windows Mixed Reality.[2][21]

Microsoft removed Windows Mixed Reality from Windows 11 version 24H2, including Mixed Reality Portal and Windows Mixed Reality for SteamVR. Its published transition schedule states that existing devices can continue working with Steam through November 2026 while remaining on Windows 11 version 23H2, after which the listed support and updates end. That schedule concerns the retired XR platform; DirectX development continued separately, including the February 2026 Direct3D 12 release announcement.[31][14]

See also

References

  1. ↑ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 "DirectX graphics and gaming". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/directx. Retrieved 2026-10-12.
  2. ↑ 2.0 2.1 "Native development overview". Microsoft Learn. 2021-10-19. https://learn.microsoft.com/en-us/windows/mixed-reality/develop/native/directx-development-overview. Retrieved 2026-10-12.
  3. ↑ 3.0 3.1 3.2 3.3 "XR_KHR_D3D11_enable". Khronos Group, OpenXR specification source. https://github.com/KhronosGroup/OpenXR-Docs/blob/main/specification/sources/chapters/extensions/khr/khr_d3d11_enable.adoc. Retrieved 2026-10-12.
  4. ↑ 4.0 4.1 4.2 4.3 4.4 "XR_KHR_D3D12_enable". Khronos Group, OpenXR specification source. https://github.com/KhronosGroup/OpenXR-Docs/blob/main/specification/sources/chapters/extensions/khr/khr_d3d12_enable.adoc. Retrieved 2026-10-12.
  5. ↑ 5.0 5.1 "DXGI". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3ddxgi/dx-graphics-dxgi. Retrieved 2026-10-12.
  6. ↑ 6.0 6.1 6.2 "DirectX Landing Page". DirectX Developer Blog. https://devblogs.microsoft.com/directx/landing-page/. Retrieved 2026-10-12.
  7. ↑ 7.0 7.1 "High-level shader language (HLSL)". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl. Retrieved 2026-10-12.
  8. ↑ "Microsoft Ships DirectX Version 3.0". Microsoft Source. 1996-09-25. https://news.microsoft.com/source/1996/09/25/microsoft-ships-directx-version-3-0/. Retrieved 2026-10-12.
  9. ↑ 9.0 9.1 "Where is the DirectX SDK?". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/directx-sdk--august-2009-. Retrieved 2026-10-12.
  10. ↑ D3D Team (2014-03-20). "DirectX 12". DirectX Developer Blog. https://devblogs.microsoft.com/directx/directx-12/. Retrieved 2026-10-12.
  11. ↑ Bryan Langley (2015-07-29). "Windows 10 and DirectX 12 released!". DirectX Developer Blog. https://devblogs.microsoft.com/directx/windows-10-and-directx-12-released/. Retrieved 2026-10-12.
  12. ↑ 12.0 12.1 Shawn Hargreaves (2020-03-19). "Announcing DirectX 12 Ultimate". DirectX Developer Blog. https://devblogs.microsoft.com/directx/announcing-directx-12-ultimate/. Retrieved 2026-10-12.
  13. ↑ 13.0 13.1 Jacques van Rhyn (2021-04-20). "Getting Started with the Agility SDK". DirectX Developer Blog. https://devblogs.microsoft.com/directx/gettingstarted-dx12agility/. Retrieved 2026-10-12.
  14. ↑ 14.0 14.1 "Announcing Shader Model 6.9 Retail and New D3D12 Improvements". DirectX Developer Blog. 2026-02-26. https://devblogs.microsoft.com/directx/shader-model-6-9-retail-and-more/. Retrieved 2026-10-12.
  15. ↑ "Introduction to a Device in Direct3D 11". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-devices-intro. Retrieved 2026-10-12.
  16. ↑ "What is Direct3D 12?". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3d12/what-is-directx-12-. Retrieved 2026-10-12.
  17. ↑ "Using Resource Barriers to Synchronize Resource States in Direct3D 12". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3d12/using-resource-barriers-to-synchronize-resource-states-in-direct3d-12. Retrieved 2026-10-12.
  18. ↑ "Multi-engine synchronization". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3d12/user-mode-heap-synchronization. Retrieved 2026-10-12.
  19. ↑ 19.0 19.1 19.2 "Hardware Feature Levels". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3d12/hardware-feature-levels. Retrieved 2026-10-12.
  20. ↑ 20.0 20.1 20.2 20.3 20.4 20.5 "Frame Submission". Khronos Group, OpenXR Guide. https://github.com/KhronosGroup/OpenXR-Guide/blob/main/chapters/frame_submission.md. Retrieved 2026-10-12.
  21. ↑ 21.0 21.1 "Rendering in DirectX". Microsoft Learn. https://learn.microsoft.com/en-us/windows/mixed-reality/develop/native/rendering-in-directx. Retrieved 2026-10-12.
  22. ↑ "OpenXR app best practices". Microsoft Learn. 2021-10-19. https://learn.microsoft.com/en-us/windows/mixed-reality/develop/native/openxr-best-practices. Retrieved 2026-10-12.
  23. ↑ "Variable-rate shading (VRS)". Microsoft Learn. 2023-02-03. https://learn.microsoft.com/en-us/windows/win32/direct3d12/vrs. Retrieved 2026-10-12.
  24. ↑ Brian Guenter, Mark Finch, Steven Drucker, Desney Tan and John Snyder (2012). "Foveated 3D Graphics". ACM Transactions on Graphics, volume 31, issue 6, article 164. https://www.microsoft.com/en-us/research/wp-content/uploads/2012/11/foveated_final15.pdf. Retrieved 2026-10-12.
  25. ↑ Brian Guenter, Mark Finch, Steven Drucker, Desney Tan and John Snyder (2012). "Foveated 3D Graphics". Microsoft Research. https://www.microsoft.com/en-us/research/publication/foveated-3d-graphics/. Retrieved 2026-10-12.
  26. ↑ Anjul Patney, Marco Salvi, Joohwan Kim, Anton Kaplanyan, Chris Wyman, Nir Benty, David Luebke and Aaron Lefohn (2016). "Towards Foveated Rendering for Gaze-Tracked Virtual Reality". ACM Transactions on Graphics, SIGGRAPH Asia 2016; NVIDIA Research project page. doi:10.1145/2980179.2980246. https://research.nvidia.com/labs/rtr/publication/patney2016towards/. Retrieved 2026-10-12.
  27. ↑ Anjul Patney, Marco Salvi, Joohwan Kim, Anton Kaplanyan, Chris Wyman, Nir Benty, David Luebke and Aaron Lefohn (2016). "Supplementary Material: Towards Foveated Rendering for Gaze-Tracked Virtual Reality". SIGGRAPH Asia 2016. https://research.nvidia.com/sites/default/files/publications/supplementary.pdf. Retrieved 2026-10-12.
  28. ↑ "Profile the CPU and GPU with timing captures". Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/direct3dtools/pix/articles/timing-captures/pix-timing-captures. Retrieved 2026-10-12.
  29. ↑ "Which version of DirectX is on your PC?". Microsoft Support. https://support.microsoft.com/en-us/windows/hardware/display-graphics/which-version-of-directx-is-on-your-pc. Retrieved 2026-10-12.
  30. ↑ "How to install the latest version of DirectX". Microsoft Support. https://support.microsoft.com/en-us/windows/hardware/display-graphics/how-to-install-the-latest-version-of-directx. Retrieved 2026-10-12.
  31. ↑ "Features and functionality removed in Windows client". Microsoft Learn. https://learn.microsoft.com/en-us/windows/whats-new/removed-features. Retrieved 2026-10-12.