<?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=OpenGL</id>
	<title>OpenGL - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=OpenGL"/>
	<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=OpenGL&amp;action=history"/>
	<updated>2026-10-30T19:31:51Z</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=OpenGL&amp;diff=24005&amp;oldid=prev</id>
		<title>WikiBot: New page (2026-10-30 wiki refresh): OpenGL</title>
		<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=OpenGL&amp;diff=24005&amp;oldid=prev"/>
		<updated>2026-10-30T17:04:59Z</updated>

		<summary type="html">&lt;p&gt;New page (2026-10-30 wiki refresh): OpenGL&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;
= OpenGL =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''Scope.''' How a stock guest OpenGL application's commands travel through the unmodified NVIDIA stack on the emulated vGPU, and the honest state of running OpenGL on it. The host-side execution machinery shared by all graphics APIs is on [[Graphics Execution|&amp;lt;code&amp;gt;Graphics-Execution.md&amp;lt;/code&amp;gt;]]; CUDA compute is on [[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]]. Canonical sources: [https://git.vgpu.io/open-iov.git/tree/docs/04-implementation/05-graphics-execution-plan.md &amp;lt;code&amp;gt;../docs/04-implementation/05-graphics-execution-plan.md&amp;lt;/code&amp;gt;] (the plan and milestones), [https://git.vgpu.io/open-iov.git/tree/docs/04-implementation/04-real-render-walls.md &amp;lt;code&amp;gt;../docs/04-implementation/04-real-render-walls.md&amp;lt;/code&amp;gt;] (the measured walls) and [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;] (the guest stack). 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;[live]&amp;lt;/code&amp;gt; observed with the stock guest driver; &amp;lt;code&amp;gt;[wip]&amp;lt;/code&amp;gt; partial; &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; current blocker; &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt; defined success state.&lt;br /&gt;
&lt;br /&gt;
== 1. The guest OpenGL stack ==&lt;br /&gt;
&lt;br /&gt;
On Linux, an OpenGL application does not talk to the kernel driver directly: it talks to the GL implementation, and — when a display is involved — through the X server's GLX extension:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;application (toolkit / SDL / GLFW / raw GLX)&lt;br /&gt;
  -&amp;amp;gt; libGL (dispatch)                    -&amp;amp;gt; libGLX_nvidia (NVIDIA GLX client)&lt;br /&gt;
  -&amp;amp;gt; libnvidia-glcore (the vendor GL engine: state, programs, shaders, draws)&lt;br /&gt;
  -&amp;amp;gt; ioctls + mappings to nvidia.ko      -&amp;amp;gt; channels, buffers, synchronization&lt;br /&gt;
X server (Xorg)&lt;br /&gt;
  -&amp;amp;gt; GLX extension module (glxserver_nvidia) and the NVIDIA DDX (X driver)&lt;br /&gt;
  -&amp;amp;gt; owns the screen, drawables and the present path&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two forms of operation exist, and both are visible in the guest:&lt;br /&gt;
&lt;br /&gt;
* '''Direct rendering''' — the normal desktop case. The GL client builds GPU commands in its own process and the X server coordinates buffers and presents. The client's channel is the source of truth for per-draw state.&lt;br /&gt;
* '''Indirect GLX''' — the client's GL protocol is serialised to the X server, which executes it against its own GL context. Here the X server's channel carries the graphics stream.&lt;br /&gt;
&lt;br /&gt;
On the emulated vGPU the readable command source today is the '''X server's channel''', whose graphics-class (&amp;lt;code&amp;gt;0xC597&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TURING_A&amp;lt;/code&amp;gt;) sections the emulation captures and executes ([[Graphics Execution|&amp;lt;code&amp;gt;Graphics-Execution.md&amp;lt;/code&amp;gt;]] §3).&lt;br /&gt;
&lt;br /&gt;
== 2. What an NVIDIA GL frame involves (observed shapes) ==&lt;br /&gt;
&lt;br /&gt;
* '''Context and state setup''' — shader programs (SASS) uploaded to device memory, constant/descriptor banks, render targets and depth surfaces allocated and mapped.&lt;br /&gt;
* '''Per-draw work''' — a graphics-class method stream: state binds (viewport, render target, ZS, blend/ROP), program and constant binds, vertex/index data, and draw-issuing methods that drive the fixed-function pipeline (vertex fetch, primitive assembly, rasterisation, fragment work, ROP).&lt;br /&gt;
* '''Program/descriptor delivery''' — the driver uploads shader code and descriptors through its copy/utility-channel inline-data path; this upload is the piece the emulation must materialise for the engine to run ''real'' programs ([[Vulkan|&amp;lt;code&amp;gt;Vulkan.md&amp;lt;/code&amp;gt;]] has the mirror-image of the same gap).&lt;br /&gt;
* '''Present''' — the X server's present/readback path runs as light 2D-class and copy-engine operations; the emulator decodes and executes those shapes.&lt;br /&gt;
&lt;br /&gt;
== 3. Status on the emulated vGPU ==&lt;br /&gt;
&lt;br /&gt;
Rated honestly, against the milestone ladder in the plan:&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;
| X server initialises on the emulated vGPU (driver push-DMA sanity test, ScreenInit)&lt;br /&gt;
| &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;glxinfo -B&amp;lt;/code&amp;gt; reports the NVIDIA renderer (OpenGL 4.6.0, driver 570.144)&lt;br /&gt;
| &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| The X driver's RC-watchdog channel registers and its notifier is authored&lt;br /&gt;
| &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GZDoom launches and runs on the emulated vGPU&lt;br /&gt;
| &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt; (menu/frames black)&lt;br /&gt;
|-&lt;br /&gt;
| X server's &amp;lt;code&amp;gt;0xC597&amp;lt;/code&amp;gt; graphics section captured and decoded&lt;br /&gt;
| &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Engine executes a launch built from the captured section (real &amp;lt;code&amp;gt;sm_75&amp;lt;/code&amp;gt; SASS retired)&lt;br /&gt;
| &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Verbatim 3D method-stream replay retired by the engine, no MMU fault&lt;br /&gt;
| &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Direct GL client: device-init gate handled; client channels allocate; readback path returns with no GL error&lt;br /&gt;
| &amp;lt;code&amp;gt;[wip]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Direct GL client submits its per-frame draws&lt;br /&gt;
| &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; (no submissions observed)&lt;br /&gt;
|-&lt;br /&gt;
| Non-black rendered frames through the emulated vGPU&lt;br /&gt;
| &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 60 fps sustained, no forcing (M-GL4)&lt;br /&gt;
| &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 4. How OpenGL runs are verified ==&lt;br /&gt;
&lt;br /&gt;
Instruments that matter, in order of usefulness: the X server log and &amp;lt;code&amp;gt;xdpyinfo&amp;lt;/code&amp;gt; (did the server initialise?), &amp;lt;code&amp;gt;glxinfo -B&amp;lt;/code&amp;gt; (which renderer is real), the application's own progress output, and frame capture at the GL source (a swap-hook capture is the ground truth for pixels — the X screen itself is not, on some stacks). Captures are decoded offline and scored: fraction of pixels above a luminance threshold, colour count, and frame-to-frame motion. A run counts only when the capture shows motion with the NVIDIA renderer in use.&lt;br /&gt;
&lt;br /&gt;
== 5. Milestones on this path ==&lt;br /&gt;
&lt;br /&gt;
The graphics plan defines M-GL1 (client context-init decodes and executes; the client leaves its retry loop), M-GL2 (&amp;lt;code&amp;gt;glxgears&amp;lt;/code&amp;gt; non-black), M-GL3 (GZDoom GL non-black through the mdev), M-GL4 (60 fps, no forcing), M-GL5 (two VMs, two mdevs), M-GL6 (split-screen video). The project sits '''between M-GL1 and M-GL2''': the interface work is done — the client creates its channels and its readback path is clean — and pixels are the gate.&lt;br /&gt;
&lt;br /&gt;
== 6. What is not claimed ==&lt;br /&gt;
&lt;br /&gt;
* No OpenGL frame from the emulated vGPU has produced real rendered pixels yet; every capture so far is black.&lt;br /&gt;
* No frame-rate or latency numbers.&lt;br /&gt;
* The published two-VM GZDoom demo videos used the labelled &amp;lt;code&amp;gt;virtio-gpu&amp;lt;/code&amp;gt;/ &amp;lt;code&amp;gt;virgl&amp;lt;/code&amp;gt; path, not the emulated vGPU.&lt;br /&gt;
&lt;br /&gt;
== 7. Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Graphics Execution|&amp;lt;code&amp;gt;Graphics-Execution.md&amp;lt;/code&amp;gt;]] — the shared execution machinery and the ranked walls.&lt;br /&gt;
* [[Vulkan|&amp;lt;code&amp;gt;Vulkan.md&amp;lt;/code&amp;gt;]] — the sibling API path, further along in the pipeline lifecycle.&lt;br /&gt;
* [[DirectX|&amp;lt;code&amp;gt;DirectX.md&amp;lt;/code&amp;gt;]] — the Windows/DirectX target.&lt;br /&gt;
* [[CUDA Userspace Driver|&amp;lt;code&amp;gt;CUDA-Userspace-Driver.md&amp;lt;/code&amp;gt;]] — how the NVIDIA userspace stack is analysed.&lt;br /&gt;
* [[Install and First Run|&amp;lt;code&amp;gt;Install-and-First-Run.md&amp;lt;/code&amp;gt;]] — bringing the stack up.&lt;br /&gt;
* [https://git.vgpu.io/open-iov.git/tree/docs/04-implementation/05-graphics-execution-plan.md &amp;lt;code&amp;gt;../docs/04-implementation/05-graphics-execution-plan.md&amp;lt;/code&amp;gt;] — the canonical plan, gap list and gates.&lt;/div&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
</feed>