Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
b1dc6fb
Document stacking implementation plan
imakris Jul 10, 2026
c7e82d9
Record staged style baseline remediation
imakris Jul 10, 2026
e275e2c
docs: close baseline dependency gate
imakris Jul 10, 2026
f90dee1
docs: isolate style token repairs
imakris Jul 10, 2026
d84151a
docs: extend style execution ledger
imakris Jul 10, 2026
d0b7adf
docs: govern formatter conflict workarounds
imakris Jul 10, 2026
cd59a8d
docs: record final style remediation cycle
imakris Jul 10, 2026
dd5a14d
docs: repin repaired style pipeline
imakris Jul 10, 2026
6e470ed
benchmark: stabilize streaming revisions
imakris Jul 10, 2026
f7bedb4
benchmark: retain hot-path baseline evidence
imakris Jul 10, 2026
bc167da
benchmark: harden calibration provenance
imakris Jul 10, 2026
715d6b8
benchmark: close checkpoint evidence gaps
imakris Jul 10, 2026
0dbbb41
benchmark: make checkpoint evidence reviewable
imakris Jul 10, 2026
2aa61d0
merge: retain implementation plan ancestry
imakris Jul 10, 2026
049587c
docs: align checkpoint governance with owner decisions
imakris Jul 10, 2026
81da254
benchmark: harden retained checkpoint evidence
imakris Jul 10, 2026
fea5a84
benchmark: fingerprint renderer execution settings
imakris Jul 10, 2026
86ad4c0
benchmark: isolate live measurement schedule
imakris Jul 10, 2026
f07549b
ci: retain Unix renderer failures
imakris Jul 10, 2026
c49d43f
benchmark: bind smoke renderer provenance
imakris Jul 10, 2026
906b652
ci: preserve shader-capable native smoke
imakris Jul 10, 2026
fc86d19
ci: trust the exact FreeBSD checkout
imakris Jul 10, 2026
c5d6265
rhi: retain a desktop GLSL 330 path
imakris Jul 10, 2026
35c2f83
docs: describe both desktop GLSL profiles
imakris Jul 10, 2026
273e90e
benchmark: enforce fixed render calibration contract
imakris Jul 10, 2026
a83316e
ci: use the available FreeBSD Mesa renderer
imakris Jul 10, 2026
836b178
ci: retain FreeBSD backend allocation evidence
imakris Jul 10, 2026
989f5af
benchmark: avoid duplicate OpenGL context probing
imakris Jul 10, 2026
aad57ed
docs: clarify fallback context lifetime
imakris Jul 10, 2026
6e815dd
benchmark: normalize POSIX aligned allocations
imakris Jul 10, 2026
26a4cc6
benchmark: finalize checkpoint evidence remediation
imakris Jul 10, 2026
8c0bcfe
docs: converge architecture decision register
imakris Jul 10, 2026
87c3c83
docs: resolve convergence review findings
imakris Jul 10, 2026
80e6d0c
docs: close executable contract gaps
imakris Jul 11, 2026
663a307
docs: localize proposals and review boundaries
imakris Jul 11, 2026
75547dd
docs: make proposal execution deterministic
imakris Jul 11, 2026
6939985
docs: close final contract ambiguities
imakris Jul 11, 2026
39027d3
docs: finalize public result and budget contracts
imakris Jul 11, 2026
23872a2
docs: separate stack result ownership
imakris Jul 11, 2026
eaeba5e
docs: make stack results self-describing
imakris Jul 11, 2026
bff1c24
docs: close stack result factories
imakris Jul 11, 2026
7a1f88d
docs: define stack table allocation and indicators
imakris Jul 11, 2026
4f222c6
docs: finalize indicator and byte metrics
imakris Jul 11, 2026
2c5d975
docs: close indicator and ownership transitions
imakris Jul 11, 2026
afad406
docs: close cumulative and cursor currency
imakris Jul 11, 2026
dfed297
docs: define cursor representation and currency proposal
imakris Jul 11, 2026
3afdce8
docs: close proposal ratification governance
imakris Jul 11, 2026
0f09eba
docs: make stack ratification all or none
imakris Jul 11, 2026
4d8950a
docs: include cache contract in stack ratification
imakris Jul 11, 2026
1e33929
docs: split cache primitive and stack ownership
imakris Jul 11, 2026
3bac8f8
docs: restore compact cache key cardinality
imakris Jul 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 51 additions & 5 deletions .github/workflows/ci-freebsd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ jobs:
include:
- name: QRhi (FreeBSD)
text: OFF
benchmark: OFF
examples: OFF
- name: QRhi+Text (FreeBSD)
text: ON
benchmark: ON
examples: ON
steps:
- name: Checkout repository
Expand All @@ -28,24 +30,68 @@ jobs:
uses: vmactions/freebsd-vm@v1
env:
TEXT: ${{ matrix.text }}
BENCHMARK: ${{ matrix.benchmark }}
EXAMPLES: ${{ matrix.examples }}
with:
release: "15.0"
usesh: true
envs: 'TEXT EXAMPLES'
# Use the action's isolated rsync workspace. The guest records its
# result but exits cleanly so the action can copy evidence back.
sync: rsync
envs: 'TEXT BENCHMARK EXAMPLES'
prepare: |
pkg bootstrap -fy
mkdir -p /usr/local/etc/pkg/repos
echo 'FreeBSD-ports: { enabled: no }' > /usr/local/etc/pkg/repos/FreeBSD-ports.conf
echo 'FreeBSD: { url: https://pkg.FreeBSD.org/${ABI}/latest }' > /usr/local/etc/pkg/repos/FreeBSD.conf
pkg update -f
pkg install -y git cmake pkgconf qt6-base qt6-declarative qt6-shadertools
pkg install -y git cmake pkgconf python311 qt6-base qt6-declarative qt6-shadertools xauth xorg-vfbserver
run: |
ci_status=success
git config --global --add safe.directory "$(pwd)"
mkdir -p build
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DVNM_PLOT_ENABLE_TEXT=${TEXT} \
-DVNM_PLOT_BUILD_TESTS=ON \
-DVNM_PLOT_BUILD_BENCHMARK=${BENCHMARK} \
-DVNM_PLOT_BUILD_EXAMPLES=${EXAMPLES} \
-DVNM_PLOT_BUILD_FUNCTION_PLOTTER=OFF
cmake --build build --config Release
cd build && env QT_QPA_PLATFORM=offscreen ctest --output-on-failure
-DVNM_PLOT_BUILD_FUNCTION_PLOTTER=OFF || ci_status=failure
if [ "${ci_status}" = success ]; then
cmake --build build --config Release || ci_status=failure
fi
if [ "${ci_status}" = success ]; then
sysctl hw.physmem hw.usermem || true
swapinfo -h || true
ulimit -a || true
Xvfb :99 -screen 0 1280x1024x24 >/tmp/vnm-plot-xvfb.log 2>&1 &
export DISPLAY=:99
(cd build && ctest --output-on-failure) || ci_status=failure
fi
gate_status=success
if [ "${BENCHMARK}" = "ON" ]; then
python3.11 benchmark/tools/run_gate.py \
--source-root . \
--build-dir build \
--mode ci-retain \
--upstream-status "${ci_status}" || gate_status=failure
fi
echo "${ci_status}:${gate_status}" > build/freebsd-ci-status
exit 0

- name: Retain benchmark gate evidence
if: always() && matrix.benchmark == 'ON'
uses: actions/upload-artifact@v4
with:
name: benchmark-gate-freebsd-${{ matrix.text }}
path: build/gate-artifacts
if-no-files-found: error
retention-days: 30

- name: Verify FreeBSD result
if: always()
run: |
test -f build/freebsd-ci-status
IFS=: read -r ci_status gate_status < build/freebsd-ci-status
test "${ci_status}" = success
test "${gate_status}" = success
24 changes: 21 additions & 3 deletions .github/workflows/ci-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,14 @@ defaults:

env:
CMAKE_BUILD_TYPE: Release
# Hosted Xvfb uses Mesa's CPU renderer. Bound its worker count to the job
# memory limit and use its GL 3.3 rasterizer without selecting a QRhi API.
GALLIUM_DRIVER: softpipe
LP_NUM_THREADS: "1"
LINUX_SYSTEM_DEPS: >-
libgl-dev libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev
libxi-dev libxext-dev libwayland-dev libxkbcommon-dev libvulkan-dev
xvfb xauth

jobs:
build-rhi:
Expand Down Expand Up @@ -65,9 +70,22 @@ jobs:

- name: Run tests
working-directory: build
env:
QT_QPA_PLATFORM: offscreen
run: ctest --output-on-failure
run: xvfb-run -a ctest --output-on-failure

- name: Package checkpoint evidence
if: always() && matrix.benchmark == 'ON'
run: >-
python benchmark/tools/run_gate.py --source-root . --build-dir build
--mode ci-retain --upstream-status "${{ job.status }}"

- name: Retain benchmark gate evidence
if: always() && matrix.benchmark == 'ON'
uses: actions/upload-artifact@v4
with:
name: benchmark-gate-linux-${{ matrix.text }}
path: build/gate-artifacts
if-no-files-found: error
retention-days: 30

- name: Build summary
run: |
Expand Down
15 changes: 15 additions & 0 deletions .github/workflows/ci-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,21 @@ jobs:
QT_QPA_PLATFORM: offscreen
run: ctest --output-on-failure

- name: Package checkpoint evidence
if: always() && matrix.benchmark == 'ON'
run: >-
python benchmark/tools/run_gate.py --source-root . --build-dir build
--mode ci-retain --upstream-status "${{ job.status }}"

- name: Retain benchmark gate evidence
if: always() && matrix.benchmark == 'ON'
uses: actions/upload-artifact@v4
with:
name: benchmark-gate-macos-${{ matrix.text }}
path: build/gate-artifacts
if-no-files-found: error
retention-days: 30

- name: Build summary
run: |
echo "=== ${{ matrix.name }} completed ==="
Expand Down
17 changes: 15 additions & 2 deletions .github/workflows/ci-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,23 @@ jobs:

- name: Run tests
working-directory: build
env:
QT_QPA_PLATFORM: offscreen
run: ctest --output-on-failure -C ${CMAKE_BUILD_TYPE}

- name: Package checkpoint evidence
if: always() && matrix.benchmark == 'ON'
run: >-
python benchmark/tools/run_gate.py --source-root . --build-dir build
--mode ci-retain --upstream-status "${{ job.status }}"

- name: Retain benchmark gate evidence
if: always() && matrix.benchmark == 'ON'
uses: actions/upload-artifact@v4
with:
name: benchmark-gate-windows-${{ matrix.text }}
path: build/gate-artifacts
if-no-files-found: error
retention-days: 30

- name: Build summary
run: |
echo "=== ${{ matrix.name }} completed ==="
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@

# Benchmark output files
inspector_benchmark_*.txt
inspector_benchmark_*.json
benchmark_phase_trace.jsonl

# QtCreator user settings
/examples/**/.qtcreator/
Expand All @@ -20,6 +22,7 @@ inspector_benchmark_*.txt
# Claude workspace metadata
.claude/
/repo/
__pycache__/

# Windows artifacts
/nul
16 changes: 7 additions & 9 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ option(VNM_PLOT_BUILD_FUNCTION_PLOTTER "Build the Qt Multimedia function_plotter
option(VNM_PLOT_ENABLE_TEXT "Enable MSDF text rendering (requires FreeType + msdfgen)" ON)
option(VNM_PLOT_BUILD_TESTS "Build test suite" OFF)
option(VNM_PLOT_USE_SYSTEM_LIBS "Prefer find_package dependencies over FetchContent when available" OFF)
set(VNM_PLOT_VNM_MSDF_TEXT_VERSION 0.2.0)

include(FetchContent)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/EmbedAssets.cmake)
Expand Down Expand Up @@ -169,7 +168,7 @@ if(_vnm_plot_missing_msdf_text_targets)
_vnm_plot_has_any_msdf_text_target(_vnm_plot_has_partial_msdf_text_targets)
if(VNM_PLOT_USE_SYSTEM_LIBS AND
NOT _vnm_plot_has_partial_msdf_text_targets)
find_package(vnm_msdf_text ${VNM_PLOT_VNM_MSDF_TEXT_VERSION} CONFIG QUIET
find_package(vnm_msdf_text CONFIG QUIET
COMPONENTS ${_vnm_plot_msdf_text_components})
_vnm_plot_alias_existing_msdf_text_targets()
_vnm_plot_missing_targets(
Expand Down Expand Up @@ -492,8 +491,8 @@ message(STATUS "vnm_plot: Building RHI library")
#
# Bake every shader in shaders/qsb/ into a multi-profile .qsb artifact and
# embed it under :/vnm_plot/shaders/qsb/<name>.qsb. Profile set covers Vulkan
# (SPIR-V), Metal 1.2 + 2.1, D3D11 (HLSL 5.0), and desktop GL 4.10 so RHI can
# pick a working artifact on every supported backend.
# (SPIR-V), Metal 1.2 + 2.1, D3D11 (HLSL 5.0), and desktop GL 3.30 + 4.10 so
# RHI can pick a working artifact on every supported backend.
# -----------------------------------------------------------------------------

set(VNM_PLOT_QSB_SHADERS
Expand All @@ -517,10 +516,9 @@ if(VNM_PLOT_ENABLE_TEXT)
endif()

# Each input shader yields :/vnm_plot/shaders/qsb/<name>.<ext>.qsb.
# GLSL profile is desktop 410 only; mobile GL ES is out of scope for
# the RHI shaders. They use storage buffers that are unavailable below
# ES 3.1, so emitting a 300 ES artifact would compile-fail at runtime
# on a real ES 3.0 driver.
# The RHI shaders use vertex attributes and std140 uniform blocks, so retain
# desktop GLSL 330 for GL 3.3 contexts and GLSL 410 for existing GL 4 paths.
# Mobile GL ES remains out of scope for this desktop renderer.
foreach(_vnm_plot_qsb_shader IN LISTS VNM_PLOT_QSB_SHADERS)
get_filename_component(_vnm_plot_qsb_output_dir
"${CMAKE_CURRENT_BINARY_DIR}/.qsb/${_vnm_plot_qsb_shader}"
Expand All @@ -533,7 +531,7 @@ unset(_vnm_plot_qsb_shader)
qt_add_shaders(vnm_plot_rhi "vnm_plot_qsb_shaders"
PREFIX "/vnm_plot"
BASE "${CMAKE_CURRENT_SOURCE_DIR}"
GLSL "410"
GLSL "330,410"
HLSL "50"
MSL "12,21"
OUTPUT_TARGETS VNM_PLOT_RHI_RESOURCE_TARGETS
Expand Down
Loading
Loading