From d170520e52e34f7bdacabacd1ed7299ed58aaa4a Mon Sep 17 00:00:00 2001 From: Andrey Kolkov Date: Thu, 16 Jul 2026 09:11:52 +0300 Subject: [PATCH] chore(deps): update ecosystem deps + docs refresh for v0.1.45 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gg v0.50.4 → v0.50.6 (unified draw queue ADR-051/052, three-tier clip ADR-052) - gogpu v0.44.1 → v0.44.8 (Wayland fractional scale, frame lifecycle) - wgpu v0.30.10 → v0.30.21 (software backend fixes, WriteTexture, blit optimization) - signals v0.1.0 → v0.1.1 - README: 26 widgets, 70 painters, backend selection, Android, software optimization - ROADMAP: unified pipeline, 4-tier software optimization roadmap, Android - CHANGELOG: software optimization roadmap with gg CPU rasterization tier - ARCHITECTURE: deps update --- CHANGELOG.md | 25 ++++++++++++ README.md | 96 ++++++++++++++++++++++++++++++-------------- ROADMAP.md | 41 ++++++++++++++----- docs/ARCHITECTURE.md | 12 +++--- go.mod | 16 ++++---- go.sum | 32 +++++++-------- 6 files changed, 152 insertions(+), 70 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6913b61..4af03da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.45] — 2026-07-16 + +### Changed + +- **deps:** gg v0.50.4 → v0.50.6, gogpu v0.44.1 → v0.44.8, wgpu v0.30.10 → v0.30.21, signals v0.1.0 → v0.1.1 + - **gg v0.50.6:** Unified backend-agnostic draw queue (ADR-051) + three-tier clip architecture (ADR-052). All rendering commands (shapes, text, GPU textures) now flow through a single dispatch pipeline regardless of backend. Software backend rendering is now architecturally correct — offscreen boundary textures, Layer Tree compositing, and damage-aware blit work on CPU adapters. + - **gogpu v0.44.8:** Multi-backend auto-selection improvements, Wayland fractional scale, pixelPresented frame lifecycle. + - **wgpu v0.30.21:** Software backend correctness fixes (BGRA swizzle, MSAA rejection, WriteTexture, blit optimization), format-aware copy commands. + - **signals v0.1.1:** Minor improvements. + +### Known Issues + +- **Software backend performance:** The unified pipeline ensures correctness on CPU adapters, but performance is significantly slower than GPU backends. The SPIR-V interpreter processes shaders instruction-by-instruction on the CPU. Community contributions for optimization are welcome — see [Optimization Roadmap](#software-backend-optimization) below. + +### Software Backend Optimization Roadmap + +The software backend (`GOGPU_GRAPHICS_API=software`) now renders correctly through the same Layer Tree compositor pipeline as GPU backends. Performance optimization is the next priority: + +1. **gg direct CPU rasterization** ([ADR-053](https://github.com/gogpu/gg)): gg already has fast native Go CPU rasterizers inspired by tiny-skia and Vello — AnalyticFiller (scanline AA), SparseStrips (4×4 tiles), TileCompute (16×16 Vello 9-stage). These are orders of magnitude faster than the SPIR-V interpreter. Smart dispatch routing: shapes/text rendered directly by gg's CPU rasterizers, only GPU-specific operations (texture compositing) go through the software HAL. This is the highest-impact optimization with minimal code changes. +2. **naga Go+SIMD backend** ([NAGA-FEAT-004](https://github.com/gogpu/naga)): Generate native Go code from WGSL shaders with `goexperiment.simd` (AVX-512/NEON) vectorization. Replaces SPIR-V interpreter entirely for shader execution. Expected 100x+ speedup. Reference: GoMLX PackGEMM achieved 14x speedup with pure Go SIMD on MatMul. +3. **SPIR-V interpreter SIMD** ([FEAT-SW-008](https://github.com/gogpu/wgpu)): `goexperiment.simd` Float32x4 for vec4 ops in the existing interpreter — estimated 2-4x speedup with ~500 LOC. Interim solution before naga Go backend. +4. **Multi-threaded CPU dispatch** ([ADR-053](https://github.com/gogpu/gg)): Parallel CPU dispatch for independent boundary textures. Each boundary = isolated pixmap → trivially parallel. + +Contributions and profiling reports are welcome — see [issue #158](https://github.com/gogpu/ui/issues/158) for the software backend tracker. + ## [0.1.44] — 2026-07-09 ### Changed diff --git a/README.md b/README.md index 44a2e3d..e95b239 100644 --- a/README.md +++ b/README.md @@ -42,11 +42,14 @@ | Feature | gogpu/ui | Fyne | Gio | |---------|----------|------|-----| | **CGO-free** | Yes | No | Yes | -| **WebGPU rendering** | Yes | OpenGL | Direct GPU | -| **Reactive state** | Signals | Binding | Events | -| **Layout engine** | Flexbox + Grid | Custom | Flex | -| **Accessibility** | Day 1 (ARIA roles) | Limited | Limited | -| **Plugin system** | Yes | No | No | +| **WebGPU rendering** | Yes (Vulkan/DX12/Metal/GLES/Software) | OpenGL | Direct GPU | +| **Reactive state** | Signals (push-pull, zero glitch) | Binding | Events | +| **Layout engine** | Flexbox + Grid + per-widget cache | Custom | Flex | +| **Accessibility** | Day 1 (35+ ARIA roles) | Limited | Limited | +| **Design systems** | 4 (M3, DevTools, Fluent, Cupertino) | 1 | 1 | +| **Widgets** | 26 interactive + primitives | ~20 | ~15 | +| **Plugin system** | Yes (deps, assets, fonts) | No | No | +| **Android** | In review ([wgpu#268](https://github.com/gogpu/wgpu/pull/268)) | Yes | Yes | --- @@ -162,7 +165,7 @@ func main() { | `core/dropdown` | Dropdown/select with overlay menu, keyboard navigation, signal bindings | 96%+ | | `overlay` | Overlay/popup stack, container, position helper | 95%+ | | `primitives` | Box, Text, Image, RepaintBoundary (GPU texture caching via Layer Tree compositor) | 94.4% | -| `theme/material3` | Material Design 3 — theme (HCT color science) + 21 component painters | 97%+ | +| `theme/material3` | Material Design 3 — theme (HCT color science) + 24 component painters | 97%+ | | `focus` | Keyboard focus management with Tab/Shift+Tab navigation | 95.2% | | `internal/focus` | Internal focus manager implementation | 15.2% | @@ -195,10 +198,10 @@ func main() { | `core/docking` | IDE-style dockable panels: border layout, tabbed groups, Dock/Undock API | 95.3% | | `core/badge` | Notification badge: count mode (pill, "99+" overflow), dot mode, signal bindings with dedup | 99.3% | | `core/chip` | Action/filter chip (M3 spec): toggleable selection, two-way signal write-back, state layers | 99.0% | -| `theme/material3` | 21 component painters (all widgets covered) | 97%+ | -| `theme/devtools` | **JetBrains DevTools**: 22 painters, Int UI gray scale, dark/light, IDE-style | 96%+ | -| `theme/fluent` | Microsoft Fluent Design: 9 painters, accent colors, inner focus ring, light/dark | 96%+ | -| `theme/cupertino` | Apple HIG: 9 painters, iOS toggle switch, segmented control, pill buttons | 96%+ | +| `theme/material3` | 24 component painters (all widgets covered) | 97%+ | +| `theme/devtools` | **JetBrains DevTools**: 24 painters, Int UI gray scale, dark/light, IDE-style | 96%+ | +| `theme/fluent` | Microsoft Fluent Design: 11 painters, accent colors, inner focus ring, light/dark | 96%+ | +| `theme/cupertino` | Apple HIG: 11 painters, iOS toggle switch, segmented control, pill buttons | 96%+ | | `theme/font` | Font Registry: CSS weight matching (W3C spec), Weight 100-900, Style, Family/Face | 97.7% | | `icon` | SVG icons (JetBrains expui), 2-level cache, DPI-aware rasterization, gg/svg renderer | 97%+ | | `i18n` | Internationalization: Locale, Bundle, Translator, CLDR plural rules, RTL, LocaleSignal | 97.9% | @@ -207,10 +210,29 @@ func main() { | `uitest` | Testing utilities: MockCanvas, MockContext, event factories, widget helpers, assertions | 93.1% | | `internal/dirty` | Dirty region tracking: Collector, Tracker, merge algorithm, partial repaints | 100% | +| `core/stripe` | Vertical sidebar strip: tool window buttons, top/bottom items, icon buttons | 96%+ | +| `core/titlebar` | Window title bar: CSD, drag, minimize/maximize/close, WindowChrome interface | 96%+ | | `compositor` | Layer Tree compositor: OffsetLayer, PictureLayer, ClipRectLayer, OpacityLayer — production render pipeline | 95%+ | +| `desktop` | Production render loop: Layer Tree → GPU textures → damage-aware blit | — | **Total: ~207,000+ lines of code | 56+ packages | ~7,500+ tests | 97%+ average coverage** +### Backend Selection + +gogpu/ui renders through any GPU backend via the gogpu ecosystem — no code changes needed: + +```bash +GOGPU_GRAPHICS_API=vulkan go run ./examples/hello/ # Vulkan (default on Linux) +GOGPU_GRAPHICS_API=dx12 go run ./examples/hello/ # DirectX 12 (Windows) +GOGPU_GRAPHICS_API=metal go run ./examples/hello/ # Metal (macOS) +GOGPU_GRAPHICS_API=gles go run ./examples/hello/ # OpenGL ES +GOGPU_GRAPHICS_API=software go run ./examples/hello/ # CPU software renderer +``` + +The **software backend** runs on any machine without GPU drivers. It uses the same unified render pipeline (Layer Tree compositor, offscreen boundary textures, damage-aware blit) as GPU backends. Performance is significantly slower than GPU — optimization via naga Go+SIMD backend ([NAGA-FEAT-004](https://github.com/gogpu/naga)) is planned. + +**Android support** is in review ([wgpu#268](https://github.com/gogpu/wgpu/pull/268)) — Vulkan on arm64, contributed by [@besmpl](https://github.com/besmpl) for [Hearth](https://github.com/besmpl/hearth) game engine. + --- ## Architecture @@ -220,15 +242,16 @@ func main() { │ User Application │ ├─────────────────────────────────────────────────────────────┤ │ theme/material3/ │ theme/devtools/ │ theme/fluent/ │ -│ 21 Painters │ 22 Painters │ 9 Painters │ +│ 24 Painters │ 24 Painters │ 11 Painters │ │ theme/cupertino/ │ │ │ -│ 9 Painters │ │ │ +│ 11 Painters │ 70 painters total across 4 systems │ ├─────────────────────────────────────────────────────────────┤ -│ 24 Interactive Widgets (core/) │ +│ 26 Interactive Widgets (core/) │ │ button, checkbox, radio, textfield, dropdown, slider, │ │ dialog, scrollview, tabview, listview, gridview, linechart,│ │ progressbar, progress, collapsible, popover, splitview, │ -│ treeview, datatable, toolbar, menu, docking │ +│ treeview, datatable, toolbar, menu, docking, badge, chip, │ +│ stripe, titlebar │ ├──────────────┬──────────────────────────────────────────────┤ │ cdk/ │ Content[C] polymorphic pattern │ ├──────────────┴──────────────────────────────────────────────┤ @@ -278,16 +301,17 @@ gg → wgpu → naga ← internal to gg ### Render Pipeline -Enterprise-grade retained-mode rendering (ADR-007): +Enterprise-grade retained-mode rendering (ADR-007) with unified draw queue (ADR-051/052): -1. **O(1) frame skip** -- flat dirty boundary set, no tree walks when idle (0% GPU) -2. **Layer Tree composition** -- OffsetLayer, PictureLayer, OpacityLayer, ClipRectLayer -3. **Per-boundary GPU textures** -- dirty boundaries re-render to MSAA offscreen texture, clean reuse cached -4. **Damage-aware blit** -- LoadOpLoad + multi-rect scissor, only dirty pixels touch the GPU -5. **Persistent tree** -- layer objects reused across frames (97.9% fewer allocations) +1. **O(1) frame skip** — flat dirty boundary set, no tree walks when idle (0% GPU) +2. **Layer Tree composition** — OffsetLayer, PictureLayer, OpacityLayer, ClipRectLayer +3. **Per-boundary GPU textures** — dirty boundaries re-render to MSAA offscreen texture, clean reuse cached +4. **Damage-aware blit** — LoadOpLoad + multi-rect scissor, only dirty pixels touch the GPU +5. **Persistent tree** — layer objects reused across frames (97.9% fewer allocations) +6. **Unified draw queue** — backend-agnostic command dispatch (shapes, text, GPU textures through single pipeline). GPU backends batch into render passes; software dispatches through CPU rasterizer. Validated by enterprise research: Flutter, Chrome, Qt6, Android, Skia patterns. -Software backend e2e tests prove scissor=48x48 at HAL level. +Works on all backends: Vulkan, DX12, Metal, GLES, Software, Browser (WASM). --- @@ -298,7 +322,7 @@ Software backend e2e tests prove scissor=48x48 at HAL level. | [`examples/hello`](examples/hello) | Widget demo: checkbox, radio, ListView (1000 items), M3 theme, event-driven GPU rendering | | [`examples/signals`](examples/signals) | Reactive signals: TextSignal, ContentSignal, CheckedSignal, SelectedSignal, DisabledSignal | | [`examples/taskmanager`](examples/taskmanager) | Full task manager: charts, tables, animations, real-time data | -| [`examples/gallery`](examples/gallery) | Widget gallery: all 24 widgets, 4 design systems (M3/DevTools/Fluent/Cupertino), theme switching | +| [`examples/gallery`](examples/gallery) | Widget gallery: all 26 widgets, 4 design systems (M3/DevTools/Fluent/Cupertino), theme switching | | [`examples/ide`](examples/ide) | GoLand-inspired IDE layout: DevTools theme, toolbar, tree, tabs, terminal, SVG icons | | [`examples/modular-compositor`](examples/modular-compositor) | Multi-module offscreen rendering: clock + notification compositor ([#75](https://github.com/gogpu/ui/issues/75)) | @@ -610,7 +634,7 @@ testApp.Window().Frame() // processes layout + draw - [x] TextField widget (cursor, selection, clipboard, validation) - [x] Dropdown/Select widget (overlay menu, keyboard nav, scroll) - [x] Overlay infrastructure (stack, container, position) -- [x] Material Design 3 theme (HCT color science, 21 painters) +- [x] Material Design 3 theme (HCT color science, 24 painters) - [x] Keyboard navigation (focus management, Tab/Shift+Tab, shortcuts) - [x] ThemeScope (theme override for widget subtrees) - [x] Event-driven rendering (0% CPU when idle) @@ -648,8 +672,12 @@ testApp.Window().Frame() // processes layout + draw - [x] Menu system (MenuBar + ContextMenu, submenus, shortcuts) - [x] IDE-style docking system (border layout, tabbed groups) - [x] Drag & drop foundation (DragSource, DropTarget, Manager) -- [x] Fluent Design theme (9 painters, accent colors) -- [x] Cupertino theme (9 painters, iOS-style) +- [x] Fluent Design theme (11 painters, accent colors) +- [x] Cupertino theme (11 painters, iOS-style) +- [x] Badge widget (notification count/dot, signal bindings) +- [x] Chip widget (action/filter, toggleable, two-way signal) +- [x] Stripe widget (sidebar tool buttons) +- [x] TitleBar widget (CSD window title bar) - [x] i18n (CLDR plural rules, RTL detection, LocaleSignal) - [x] Icon system (vector paths, 10 Material icons, De Casteljau) - [x] Font registry (CSS weight matching, W3C spec) @@ -671,8 +699,12 @@ testApp.Window().Frame() // processes layout + draw - [x] Tracker.Intersects() fast path in RepaintBoundary - [x] Centralized ImageCache with LRU eviction (64MB, thread-safe) - [x] Offscreen renderer (headless widget → *image.RGBA, no GPU/window) +- [x] Layout cache per-widget (ADR-032, LayoutChild, O(subtree)) +- [x] Animation before layout (GAP-3, Flutter BeginFrame pattern) +- [x] Unified draw queue (ADR-051/052, backend-agnostic pipeline) - [ ] Platform accessibility adapters (UIA, AT-SPI2, NSAccessibility) -- [ ] Performance optimization pass +- [ ] Software backend performance optimization (naga Go+SIMD, SPIR-V SIMD) +- [ ] Android support (wgpu#268, Vulkan arm64) --- @@ -710,10 +742,13 @@ go get github.com/gogpu/gg@latest |---------|-------------| | [gogpu/gogpu](https://github.com/gogpu/gogpu) | Graphics framework — GPU abstraction, windowing, input | | [gogpu/gg](https://github.com/gogpu/gg) | 2D graphics — Canvas API, GPU text | -| [gogpu/wgpu](https://github.com/gogpu/wgpu) | Pure Go WebGPU — Vulkan, Metal, GLES, Software | -| [gogpu/naga](https://github.com/gogpu/naga) | Shader compiler — WGSL to SPIR-V, MSL, GLSL | +| [gogpu/wgpu](https://github.com/gogpu/wgpu) | Pure Go WebGPU — Vulkan, Metal, DX12, GLES, Software, Browser | +| [gogpu/naga](https://github.com/gogpu/naga) | Shader compiler — WGSL to SPIR-V, MSL, GLSL, HLSL, DXIL | +| [gogpu/g3d](https://github.com/gogpu/g3d) | Pure Go 3D rendering — scene graph, PBR, forward renderer | +| [gogpu/compose](https://github.com/gogpu/compose) | Multi-process composition — Unix socket, LZ4, hot-plug | +| [gogpu/audio](https://github.com/gogpu/audio) | Pure Go audio engine — WASAPI, WAV decoder, Mixer | -**Total ecosystem: 1.1M+ lines of Pure Go** — zero CGO, Rust optional via `-tags rust` (ADR-038). +**Total ecosystem: 1.14M+ lines of Pure Go** — zero CGO, Rust optional via `-tags rust` (ADR-038). Android/arm64 in review. --- @@ -725,7 +760,8 @@ Contributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) for gu - Test the packages, report bugs - API feedback and suggestions - Documentation improvements -- Spread the word (Reddit, Hacker News, Dev.to) +- Software backend profiling and optimization +- Spread the word (Hacker News, Dev.to, GitHub Discussions) - Code contributions (see open issues) --- diff --git a/ROADMAP.md b/ROADMAP.md index 7fb6f2e..bf196d7 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # gogpu/ui Roadmap -> **Version:** 0.1.44 +> **Version:** 0.1.45 > **Updated:** July 2026 > **Go Version:** 1.25+ @@ -40,10 +40,11 @@ Go has waited 17 years for a professional graphics ecosystem. We're building it: | Test Functions | ~7,500+ | | Test Coverage | 97%+ | | Linter Issues | 0 | -| Interactive Widgets | 24 | +| Interactive Widgets | 26 | | Design Systems | 4 (M3, DevTools, Fluent, Cupertino) | -| Painters | 61 (21 + 22 + 9 + 9) | +| Painters | 70 (24 + 24 + 11 + 11) | | Layout Cache | Per-widget (ADR-032), O(affected subtree) | +| Render Pipeline | Unified draw queue (ADR-051/052), backend-agnostic | --- @@ -265,6 +266,25 @@ Platform-specific features for native feel. | Phase 3 | Per-boundary GPU textures (MSAA offscreen, DrawChild skip) | ✅ | | Phase 4 | Layer Tree + Damage-aware blit (persistent tree, multi-rect scissor, LoadOpLoad) | ✅ | +### Unified Draw Queue (ADR-051/052) — v0.1.45 + +gg v0.50.6 introduced a **backend-agnostic draw queue** (ADR-051) and **three-tier clip architecture** (ADR-052). All rendering commands — shapes, text, GPU textures — flow through a single dispatch pipeline. On GPU backends, commands are batched into scissor groups and dispatched via render passes. On software adapters (`strategyRasterAtlas`), the same commands dispatch through CPU rasterizer paths. + +This architectural change ensures **correctness on all backends** — the software renderer uses the same Layer Tree compositor, offscreen boundary textures, and damage-aware blit as GPU backends. Performance optimization is the next step. + +### Software Backend Optimization Roadmap + +The software backend (`GOGPU_GRAPHICS_API=software`) is architecturally correct but requires performance work. The CPU renders every pixel via a SPIR-V interpreter — inherently slower than GPU parallel execution. Planned optimization tiers: + +| Tier | What | Expected Speedup | Status | +|------|------|-------------------|--------| +| **1. gg direct CPU rasterization** | gg already has fast native Go CPU rasterizers (AnalyticFiller from tiny-skia/Skia, SparseStrips 4×4 from Vello, TileCompute 16×16 from Vello 9-stage). Smart dispatch: shapes/text rendered by gg directly, only texture compositing through software HAL. Highest impact, minimal changes. | **10-50x** | Research ([ADR-053](https://github.com/gogpu/gg)) | +| **2. naga Go+SIMD backend** | WGSL → naga IR → generated Go + `goexperiment.simd` (AVX-512/NEON). Replaces SPIR-V interpreter entirely for shader execution. Reference: GoMLX PackGEMM 14x on MatMul. | **100x+** | Backlog ([NAGA-FEAT-004](https://github.com/gogpu/naga)) | +| **3. SPIR-V interpreter SIMD** | `goexperiment.simd` Float32x4 for vec4 ops in existing interpreter. ~500 LOC change. Interim solution before naga Go backend. | 2-4x | Backlog ([FEAT-SW-008](https://github.com/gogpu/wgpu)) | +| **4. Multi-threaded CPU dispatch** | Parallel dispatch for independent boundary textures. Each boundary = isolated pixmap → no shared state → trivially parallel. | 2-8x (multi-core) | Design | + +**Community contributions welcome** — profiling reports, optimization PRs, SIMD expertise. See [issue #158](https://github.com/gogpu/ui/issues/158). + ### Future Rendering | Phase | What | Target | @@ -292,6 +312,7 @@ gogpu/ui is one part of a larger ecosystem. Future integration points: | Integration | Description | Timeline | |-------------|-------------|----------| +| **Android** | Android/arm64 Vulkan support ([wgpu#268](https://github.com/gogpu/wgpu/pull/268)). Full Vulkan WSI, Rust wgpu v29 parity, ANativeWindow lifecycle. Contributed by [@besmpl](https://github.com/besmpl) for [Hearth](https://github.com/besmpl/hearth) game engine. | In Review | | **gogpu/compute** | GPU compute via ComputeProvider (Born ML pattern) | Q3 2026 | | **gogpu/editor** | Native code editor widget (ADR-028) | Q4 2026 | | **gogpu/g3d** | 3D viewport widget for CAD/games | 2027 | @@ -342,13 +363,13 @@ All releases must follow this cascade. Breaking changes in lower layers require | Dependency | Version | Purpose | |------------|---------|---------| -| gogpu/gg | v0.48.11 | 2D rendering + scene.Scene | -| gogpu/gogpu | v0.42.0 | Windowing, input (examples) | -| gogpu/gpucontext | v0.21.0 | Shared interfaces (opaque struct tokens) | -| coregx/signals | v0.1.0 | Reactive state management | -| golang.org/x/image | v0.41.0 | Inter font (standard) | +| gogpu/gg | v0.50.6 | 2D rendering + unified draw queue (ADR-051/052) | +| gogpu/gogpu | v0.44.8 | Windowing, input (examples) | +| gogpu/gpucontext | v0.21.1 | Shared interfaces (opaque struct tokens) | +| coregx/signals | v0.1.1 | Reactive state management | +| golang.org/x/image | v0.44.0 | Inter font (standard) | -**Indirect:** gogpu/wgpu v0.30.1, gogpu/naga v0.17.15, gogpu/gputypes v0.5.0, go-text/typesetting v0.3.4 +**Indirect:** gogpu/wgpu v0.30.21, gogpu/naga v0.17.15, gogpu/gputypes v0.5.1, go-text/typesetting v0.3.4 --- @@ -388,4 +409,4 @@ All releases must follow this cascade. Breaking changes in lower layers require --- -*This roadmap evolves with the project. Last updated: June 2026.* +*This roadmap evolves with the project. Last updated: July 2026.* diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index fdb006e..9c51059 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -1463,13 +1463,13 @@ The `registry/` package provides a global registry for widget factories: | Dependency | Purpose | Version | |------------|---------|---------| -| `github.com/gogpu/gg` | 2D graphics + scene.Scene tile-parallel rendering | v0.50.4 | -| `github.com/gogpu/gpucontext` | Shared GPU interfaces (opaque struct tokens) | v0.21.0 | -| `github.com/gogpu/gogpu` | Application framework, windowing, Browser/WASM (examples only) | v0.44.1 | -| `github.com/coregx/signals` | Reactive state management | v0.1.0 | +| `github.com/gogpu/gg` | 2D graphics + unified draw queue (ADR-051/052) | v0.50.6 | +| `github.com/gogpu/gpucontext` | Shared GPU interfaces (opaque struct tokens) | v0.21.1 | +| `github.com/gogpu/gogpu` | Application framework, windowing, Browser/WASM (examples only) | v0.44.8 | +| `github.com/coregx/signals` | Reactive state management | v0.1.1 | | `golang.org/x/image` | Font rendering infrastructure | v0.44.0 | -**Indirect:** gogpu/wgpu v0.30.10, gogpu/naga v0.17.15, gogpu/gputypes v0.5.1, go-text/typesetting v0.3.4, golang.org/x/text v0.40.0 +**Indirect:** gogpu/wgpu v0.30.21, gogpu/naga v0.17.15, gogpu/gputypes v0.5.1, go-text/typesetting v0.3.4, golang.org/x/text v0.40.0 Go version: **1.25.0** @@ -1553,4 +1553,4 @@ All types in `geometry/` are small structs passed by value. Operations return ne --- -*This document reflects the actual codebase as of July 9, 2026 (v0.1.44 — 26 interactive widgets, 4 design systems with 70 painters, per-widget layout caching ADR-032, Layer Tree compositor, damage-aware blit).* +*This document reflects the actual codebase as of July 16, 2026 (v0.1.45 — 26 interactive widgets, 4 design systems with 70 painters, per-widget layout caching ADR-032, Layer Tree compositor, damage-aware blit, unified draw queue ADR-051/052).* diff --git a/go.mod b/go.mod index 9746512..e30a558 100644 --- a/go.mod +++ b/go.mod @@ -3,19 +3,19 @@ module github.com/gogpu/ui go 1.25.0 require ( - github.com/coregx/signals v0.1.0 - github.com/gogpu/gg v0.50.4 - github.com/gogpu/gogpu v0.44.1 - github.com/gogpu/gpucontext v0.21.0 + github.com/coregx/signals v0.1.1 + github.com/gogpu/gg v0.50.6 + github.com/gogpu/gogpu v0.44.8 + github.com/gogpu/gpucontext v0.21.1 github.com/gogpu/gputypes v0.5.1 - github.com/gogpu/wgpu v0.30.10 + github.com/gogpu/wgpu v0.30.21 golang.org/x/image v0.44.0 ) require ( - github.com/go-webgpu/goffi v0.5.6 // indirect - github.com/go-webgpu/webgpu v0.5.2 // indirect + github.com/go-webgpu/goffi v0.6.0 // indirect + github.com/go-webgpu/webgpu v0.5.3 // indirect github.com/gogpu/naga v0.17.15 // indirect - golang.org/x/sys v0.46.0 // indirect + golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.40.0 // indirect ) diff --git a/go.sum b/go.sum index 4f53ea4..8fa762a 100644 --- a/go.sum +++ b/go.sum @@ -1,24 +1,24 @@ -github.com/coregx/signals v0.1.0 h1:ek6icAtUwjZKUO8K4OaYQn7Wftl+v03DHe1iePzkOsI= -github.com/coregx/signals v0.1.0/go.mod h1:ZTFOeupJF6b73QmxLcDqbB0V2f0TWnCyVkQlA+gMIm4= -github.com/go-webgpu/goffi v0.5.6 h1:jAN4ciR63DcpU/qdX4A3wbNvcpZ6AdFK+H7OB/1+9Lc= -github.com/go-webgpu/goffi v0.5.6/go.mod h1:wfoxNsJkU+5RFbV1kNN1kunhc1lFHuJKK3zpgx08/uM= -github.com/go-webgpu/webgpu v0.5.2 h1:E+yKCbRw/Dgn77pb/CX3kXatwwROGX7/B4ZFbRPaRbQ= -github.com/go-webgpu/webgpu v0.5.2/go.mod h1:d2RR3tI2kUtcMfpC+qJt46IRkDslRhftjCfQvnprGkY= -github.com/gogpu/gg v0.50.4 h1:6NQfRfAuwTDXZFrOWqvKVO/UdW+3GWJ0wg+DGPbcPKc= -github.com/gogpu/gg v0.50.4/go.mod h1:V9wPiWurtHZhOFG/X2oD636kWnXe0/ONGDDqd93l/Rw= -github.com/gogpu/gogpu v0.44.1 h1:oGTO4DpKCLL5huwe6w64CNWfPBZlAueTOd5xx2xfO5c= -github.com/gogpu/gogpu v0.44.1/go.mod h1:woyKt98CmzLTCbklx0pPNBH/rSxQVzcH1y+qABuZQtg= -github.com/gogpu/gpucontext v0.21.0 h1:O1SnXBiednIyVP4Zx5SASh0svYiG6g/wF1igNZVo1Pc= -github.com/gogpu/gpucontext v0.21.0/go.mod h1:6zwdmYXH5GQltoiHbb3WXVS/UJ5bFsCux0mXCVqGlzY= +github.com/coregx/signals v0.1.1 h1:YFDK5z35q2aSaJrVUEfuG31O5SpHqKyhadBnpUJrUko= +github.com/coregx/signals v0.1.1/go.mod h1:ZTFOeupJF6b73QmxLcDqbB0V2f0TWnCyVkQlA+gMIm4= +github.com/go-webgpu/goffi v0.6.0 h1:dTBwfzj8CZUW0w0fgeMaYGBrIktK7nzfjMsnSpkSt4Y= +github.com/go-webgpu/goffi v0.6.0/go.mod h1:wfoxNsJkU+5RFbV1kNN1kunhc1lFHuJKK3zpgx08/uM= +github.com/go-webgpu/webgpu v0.5.3 h1:EFinkgY9eSNBsougS8Z+m5v4Ue8k2B1w9G77Dvh1wTQ= +github.com/go-webgpu/webgpu v0.5.3/go.mod h1:/kJpg7pKvyQqjg6ewvQBc9HmS2FuzVESRqopbdaaYW8= +github.com/gogpu/gg v0.50.6 h1:iZp6iabWv6ZsdLMGXScJemygj7N/sxqJZpK/aMJr4gY= +github.com/gogpu/gg v0.50.6/go.mod h1:jEh3hQAlTQs9OusQe22NUNG1gZWRUovTUPidx5mu4fA= +github.com/gogpu/gogpu v0.44.8 h1:Jvt7pliIkr8YXVHWMQZpBLO4PDT+VgTG3+5kHoVSOeU= +github.com/gogpu/gogpu v0.44.8/go.mod h1:7Ocr6IOy03uftKRYB5WYz9wTPO4r01JXpbJsp4Xz7EU= +github.com/gogpu/gpucontext v0.21.1 h1:/X96uCLG8QtQVfGPYPz8ycnfsAg0iTyzqzEadWBUupU= +github.com/gogpu/gpucontext v0.21.1/go.mod h1:OrT137boh5yPhqBEhF4UQKIOu1Jq74SLQzYa/m6JbNo= github.com/gogpu/gputypes v0.5.1 h1:X38OPcP6umQqqubzzJYL6Nm1tXHSNQj6TRSAoxdAJmg= github.com/gogpu/gputypes v0.5.1/go.mod h1:cnXrDMwTpWTvJLW1Vreop3PcT6a2YP/i3s91rPaOavw= github.com/gogpu/naga v0.17.15 h1:uyy4bc8wYlvDaYOpmCBYrJ+d+e7ZqP2BN36csmRVs7o= github.com/gogpu/naga v0.17.15/go.mod h1:15sQaHKkbqXcwTN+hHYGLsA0WBBnkmYzne/eF5p5WEg= -github.com/gogpu/wgpu v0.30.10 h1:KWQOo2RR8d+uNFYYD5WGCG0f4AiX8IOHH8kWi2w6Eec= -github.com/gogpu/wgpu v0.30.10/go.mod h1:9TDtAhJmIhh1RfxcLySWEtkwfFMVf0Y7X7TLtVqvTBE= +github.com/gogpu/wgpu v0.30.21 h1:4wjMBBE7jPeBvusHrI7xqohXMnF/P33sSA90xEk7lyg= +github.com/gogpu/wgpu v0.30.21/go.mod h1:GWf1tA/Lr9n+aFUa0bMOFJKMU0BwSeYNGTZdQMFjx7Q= golang.org/x/image v0.44.0 h1:+tDekMZED9+LrtB3G5xzRggpVh9CARjZqROla3R3R+I= golang.org/x/image v0.44.0/go.mod h1:V8K3KE9KKKE+pLpQDOeN18w9oacNSvy1tDOirTu4xtY= -golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= -golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY=