<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=DirectX</id>
	<title>DirectX - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=DirectX"/>
	<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=DirectX&amp;action=history"/>
	<updated>2026-10-30T19:32:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://open-iov.org/index.php?title=DirectX&amp;diff=24007&amp;oldid=prev</id>
		<title>WikiBot: New page (2026-10-30 wiki refresh): DirectX</title>
		<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=DirectX&amp;diff=24007&amp;oldid=prev"/>
		<updated>2026-10-30T17:05:03Z</updated>

		<summary type="html">&lt;p&gt;New page (2026-10-30 wiki refresh): DirectX&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{About message}}&lt;br /&gt;
&lt;br /&gt;
= DirectX =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''Scope.''' The Windows guest path — Direct3D and the rest of the DirectX family — as a '''project target''': how the Windows NVIDIA stack relates to the interface Open-IOV already emulates for Linux, what a bring-up would require, and what has ''not'' happened yet (no Windows guest has been booted on the emulated vGPU). Linux graphics is covered on [[OpenGL|&amp;lt;code&amp;gt;OpenGL.md&amp;lt;/code&amp;gt;]], [[Vulkan|&amp;lt;code&amp;gt;Vulkan.md&amp;lt;/code&amp;gt;]] and [[Graphics Execution|&amp;lt;code&amp;gt;Graphics-Execution.md&amp;lt;/code&amp;gt;]]. Canonical sources: [https://git.vgpu.io/open-iov.git/tree/docs/03-architecture/02-guest-stack-and-cudasw.md &amp;lt;code&amp;gt;../docs/03-architecture/02-guest-stack-and-cudasw.md&amp;lt;/code&amp;gt;] (guest stack) and [https://git.vgpu.io/open-iov.git/tree/docs/06-portability/hardware-software-matrix.md &amp;lt;code&amp;gt;../docs/06-portability/hardware-software-matrix.md&amp;lt;/code&amp;gt;] (support ladder). The docs tree wins on disagreement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Status: 2026-10-30, tree &amp;lt;code&amp;gt;master @ b4930168&amp;lt;/code&amp;gt;. Tags: &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt; designed for, bring-up not started; &amp;lt;code&amp;gt;[planned]&amp;lt;/code&amp;gt; roadmap; no Windows-specific code exists in the project today.&lt;br /&gt;
&lt;br /&gt;
== 1. The Windows graphics stack ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Direct3D application (D3D12 / D3D11 / D3D9) or CUDA application&lt;br /&gt;
  -&amp;amp;gt; DXGI (swap chains, adapters, presentation)&lt;br /&gt;
  -&amp;amp;gt; user-mode display driver (UMD): nvd3dumx / nvwgf2umx   [D3D]&lt;br /&gt;
  -&amp;amp;gt; kernel-mode driver (KMD): nvlddmkm.sys, under WDDM&lt;br /&gt;
  -&amp;amp;gt; GPU&lt;br /&gt;
Windows kernel graphics subsystem (dxgkrnl)&lt;br /&gt;
  -&amp;amp;gt; GPU scheduler, video-memory manager (VidMm), residency, TDR&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two structural differences from Linux matter for this project:&lt;br /&gt;
&lt;br /&gt;
* '''WDDM owns more of the pipeline.''' The OS schedules command buffers submitted by the UMD, manages video-memory residency, and runs the GPU scheduler in the kernel; the driver's KMD programs hardware contexts and fences beneath that. (D3D12 exposes queues and fences with an explicit model that is closer to Vulkan than older APIs were.)&lt;br /&gt;
* '''The device bring-up is different.''' A Windows display adapter starts through the OS's display/PDO path (adapter enumeration, ROM/VBIOS views, VIDPN topology, power transitions), not the Linux DRM/modeset path. On Turing and later, however, the driver still talks to the '''same GSP firmware resource manager''' — the interface &amp;lt;code&amp;gt;vgsp.ko&amp;lt;/code&amp;gt; emulates.&lt;br /&gt;
&lt;br /&gt;
CUDA on Windows rides the same KMD with its own userspace driver, so the device-facing requirements overlap almost entirely with the Linux CUDA work already proven ([[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]]).&lt;br /&gt;
&lt;br /&gt;
== 2. What this means for Open-IOV ==&lt;br /&gt;
&lt;br /&gt;
The project's architecture does not change for Windows: '''emulate the firmware interface, pass the work through, patch nobody.''' The Windows KMD would be stock (signed, as shipped); the emulation must satisfy its device-view and its GSP-RM usage. The measured bring-up items, from [https://git.vgpu.io/open-iov.git/tree/docs/06-portability/hardware-software-matrix.md &amp;lt;code&amp;gt;../docs/06-portability/hardware-software-matrix.md&amp;lt;/code&amp;gt;]:&lt;br /&gt;
&lt;br /&gt;
* WDDM device start on the emulated device (PDO/display path, MSI-X and interrupt semantics).&lt;br /&gt;
* ROM/VBIOS provisioning in the device profile (Windows adapters expect one).&lt;br /&gt;
* Power-management transitions (Dx states) and reset behaviour.&lt;br /&gt;
* D3D/DXGI device creation, then compute (CUDA on Windows), then rendering through the same execution lanes as Linux.&lt;br /&gt;
&lt;br /&gt;
== 3. Status ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item&lt;br /&gt;
! State&lt;br /&gt;
|-&lt;br /&gt;
| Windows guest boots on the emulated vGPU&lt;br /&gt;
| &amp;lt;code&amp;gt;[planned]&amp;lt;/code&amp;gt; — not started&lt;br /&gt;
|-&lt;br /&gt;
| KMD (&amp;lt;code&amp;gt;nvlddmkm.sys&amp;lt;/code&amp;gt;) initialises on the emulated device&lt;br /&gt;
| &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CUDA on Windows (driver-API smoke)&lt;br /&gt;
| &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Direct3D device creation / rendering&lt;br /&gt;
| &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Multi-VM Windows guests&lt;br /&gt;
| &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The support matrix lists '''Windows x86_64 (WDDM driver, CUDA, 3D)''' as '''Target''': the architecture is designed for it; the bring-up is ahead. The proposed ladder mirrors the Linux milestones: KMD initialises → adapter enumeration healthy → CUDA-on-Windows driver-API smoke → D3D device creation → first compute execution → first rendered pixels → multiple VMs.&lt;br /&gt;
&lt;br /&gt;
== 4. What the project will not do ==&lt;br /&gt;
&lt;br /&gt;
* No Windows-specific code inside the guest — no patched &amp;lt;code&amp;gt;nvlddmkm&amp;lt;/code&amp;gt;, no shims in the guest kernel, no guest agent. Any Windows-only quirk belongs in the host module's device model.&lt;br /&gt;
* No reliance on the vendor vGPU host stack; the same mediator answers both guest OS families.&lt;br /&gt;
* The two-VM GPU demo videos published so far used '''Linux''' guests (and, for the &amp;lt;code&amp;gt;virgl&amp;lt;/code&amp;gt; variant, a labelled non-vGPU path); neither is DirectX.&lt;br /&gt;
&lt;br /&gt;
== 5. Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Graphics Execution|&amp;lt;code&amp;gt;Graphics-Execution.md&amp;lt;/code&amp;gt;]] — the execution lanes Direct3D would use.&lt;br /&gt;
* [[OpenGL|&amp;lt;code&amp;gt;OpenGL.md&amp;lt;/code&amp;gt;]], [[Vulkan|&amp;lt;code&amp;gt;Vulkan.md&amp;lt;/code&amp;gt;]] — the Linux API paths, further along.&lt;br /&gt;
* [[Hardware and Software Matrix|&amp;lt;code&amp;gt;Hardware-Software-Matrix.md&amp;lt;/code&amp;gt;]] — the support ladder, including the Windows target row.&lt;br /&gt;
* [[The Guest Stack and CUDASW|&amp;lt;code&amp;gt;Guest-Stack-and-CUDASW.md&amp;lt;/code&amp;gt;]] — §7 covers the Windows kernel-mode driver and the no-guest-code rule.&lt;br /&gt;
* [https://git.vgpu.io/open-iov.git/tree/docs/06-portability/hardware-software-matrix.md &amp;lt;code&amp;gt;../docs/06-portability/hardware-software-matrix.md&amp;lt;/code&amp;gt;] — the canonical matrix and what each support level means.&lt;/div&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
</feed>