Skip to content

Shared build links and runs: exports, one option registry, per-DSO volk, linux-dev - #84

Merged
Force67 merged 2 commits into
mainfrom
structure-phase5a
Sep 29, 2026
Merged

Force67 merged 2 commits into
mainfrom
structure-phase5a

Conversation

@Force67

@Force67 Force67 commented Sep 28, 2026 •

Copy link
Copy Markdown
Owner

Phase 5a of docs/STRUCTURE.md: the component build (RX_SHARED) goes from "links partially" to a working development configuration.

Bumps equilibrium to devel5 with Force67/equilibrium#26 (merged).

  • Every target links as a shared object, all 155 tests plus the viewer and the editor. Added exports: gpu::Device, GpuProfiler, BackendName and FormatTexelBytes; asset::FileProvider and WriteExrRgbF32; world::WorldIndexData and WorldCellPayload; ui::GuiRenderBackend (why rx_app failed); the render passes the GPU tests drive (RenderGraph, RayTracingContext, Clouds, DecalBaker, ...); anim::AnimGraph, RigPlayer and FootPlacement; audio::OpenDecoder.
  • One option registry per process (equilibrium#26). Under RX_SHARED, a platform tier's [options] entry was invisible outside the .so that declared the option. Reproduced with an RX_CONFIG file naming options from app, render, gpu, audio and the viewer: static resolves all five; shared before the fix left four "no registered option"; shared after resolves all five, and gpu.timings.file (declared in rx_gpu) actually writes its file. The three per-DSO InitOptionsFromEnv() workarounds in renderer, audio and the viewer's main are gone.
  • volk per DSO, filled where it's needed. volk's table can't be shared (its names collide with SDL3's Vulkan symbols), and only the device filled its copy, so render's NRD/FSR glue and ugui called through an empty table. gpu::GetVulkanHandles is now an inline wrapper over the exported QueryVulkanHandles. Under RX_SHARED it fills the calling DSO's volk from the device's handles, once per device. Every interop caller already asks for the handles first, so no call site changed. It compiles out in the static build.
  • linux-dev preset (build/linux-dev, RX_SHARED=ON, RX_INSTALL=OFF). CLAUDE.md mentions it, and the RX_SHARED "experimental" warning is gone. A windows-dev needs base as a DLL (PE has no unique symbols) and is left for later.

Verified:

  • static: build, ctest 155/155, lint 0 violations
  • shared: full build, ctest 155/155; vkrun ctest -L renderer gives the same result as static on main (22 pass, 2 d3d12 skips, the pre-existing DLSS/NGX crash)
  • real GPU, showcase.rxscene --preset high --upscaler fsr3 --shot-frames 24 (NRD and FSR3 live), static vs shared: rmse 0.00041 (limit 0.002, floor 0.00055), PASS
  • cmake --preset linux-dev configures

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant