D007 - oops-gl is an instrument scoped to fixed-function, and oops-mesa is the GL anyone runs

Status: decided Date: 2026-09-16

Context

oops-gl (src/gl/, include/GL/) has never had its scope written down. The only statement of what it is has been a line in docs/API_REFERENCE.md calling it "a clean-room, hardware-accelerated OpenGL 1.3 / GLES 1.1 fixed-function translation profile", repeated as "OpenGL 1.3" in README.md twice and in docs/README.md once.

That number was never true and is not the intent. Measured against the tree on 2026-09-16, the subsystem declares and defines 86 entry points, and the shape of them is OpenGL 1.1: immediate mode, vertex arrays, one 2D texture unit, lighting and materials, the matrix stacks, and blend/depth/cull state. Nothing that distinguishes 1.3 from 1.1 is present - no glActiveTexture, no glMultiTexCoord*, no glClientActiveTexture, no glCompressedTexImage2D, no glSampleCoverage, no transpose-matrix calls. Neither is most of 1.1 outside the cube's path: no stencil, fog, alpha test, display lists, glReadPixels, glTexSubImage2D, glPixelStorei, glPolygonOffset, glDepthRange, glClipPlane or glPolygonMode. The "GLES 1.1" half is wrong in kind rather than degree: GLES 1.1 has no glBegin, and this is built around it.

Two calls do come from later versions - glBlendEquation and glBlendFuncSeparate - because the cube needed them. So the surface is not cleanly any version, which is the reason this entry states a boundary instead of a number.

The decision

oops-gl is a fixed-function measuring instrument, scoped to what the oracle programs need, and it is not a GL version. It stops at OpenGL 1.1-class fixed function plus whatever individual later calls an oracle program demands, each added when a program demands it.

oops-mesa is the OpenGL anyone actually runs. It provides OpenGL 3.3 Core and GLSL 3.30 through upstream Mesa and radeonsi, and its own D001 already states the division from its side: "This repository supersedes oops-gl for anything a user runs. oops-gl stays in oops-sdk as the fixed-function measuring instrument it is, and its oracle records become this project's hardware tests. The two never link into the same title." This entry is that division recorded from this side, so a reader of either repository finds it.

Why the instrument is worth having at all, given Mesa

Because it is the only GL in the collection whose whole command stream is ours and is therefore readable as evidence. docs/hardware/agc-gl-cube-oracle-fw1240.md is 1052 dwords of PM4 whose every register write this repository emitted on purpose, with two pixel hashes stable across 116 and 60 consecutive frames and across separate launches. That record is what orbistoun checks its RDNA2 translation against, and what oops-mesa measured its radeonsi route against. A stack with Mesa underneath could not produce it: the point is the absence of anything between the GL call and the packet.

This also sets what "finished" means. The instrument is finished when the programs that produce oracle records run and their records are reproducible - not when a conformance suite passes, which is oops-mesa's unit 8 and not a goal here.

What this rules out

Consequences