From 546d6767f65a254392c5cf57d2f1c8041d25fbba Mon Sep 17 00:00:00 2001 From: Toastconcern Date: Wed, 21 Oct 2026 21:39:02 -0500 Subject: [PATCH] Move the PC-streaming layer into pc-streaming/, apart from the Steam Frame build The PC compositor-layer work (the Direct3D 11 proxy, its installer, its notes) now lives in pc-streaming/, clearly separate and marked experimental, so the main project is the Steam Frame build and the fixes that help it. The PC layer can't change the Steam Frame's home (the Steam Frame renders it on the headset), and this keeps it from crowding the Steam Frame release while preserving it for a tethered PC headset. The shared Windows renderer support (src/, behind #ifdef _WIN32 / FRAME_HOME_PC) stays put: it only compiles into a PC build and never touches the Steam Frame build. Build and README references updated to the new paths. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/build.yml | 4 +-- CMakeLists.txt | 4 +-- README.md | 9 ++--- .../Install Frame Home on this PC.bat | 0 pc-streaming/README.md | 35 +++++++++++++++++++ .../Remove Frame Home from this PC.bat | 0 {layer => pc-streaming}/d3d11_proxy.def | 0 .../frame_home_layer_d3d11.cpp | 0 .../install-frame-home-pc.ps1 | 0 {docs => pc-streaming}/pc-steamvr.md | 0 scripts/build-studio.sh | 4 +-- 11 files changed, 46 insertions(+), 10 deletions(-) rename {frame/pc => pc-streaming}/Install Frame Home on this PC.bat (100%) create mode 100644 pc-streaming/README.md rename {frame/pc => pc-streaming}/Remove Frame Home from this PC.bat (100%) rename {layer => pc-streaming}/d3d11_proxy.def (100%) rename {layer => pc-streaming}/frame_home_layer_d3d11.cpp (100%) rename {frame/pc => pc-streaming}/install-frame-home-pc.ps1 (100%) rename {docs => pc-streaming}/pc-steamvr.md (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9c1beb0..29af7d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,8 +56,8 @@ jobs: cmake -S . -B build/pc-win64 -G Ninja -DCMAKE_BUILD_TYPE=Release -DFRAME_HOME_PC=ON -DCMAKE_TOOLCHAIN_FILE=cmake/llvm-mingw.cmake -DWINDOWS_ARCH=x86_64 -DLLVM_MINGW="$HOME/llvm-mingw" cmake --build build/pc-win64 --target frame-home frame-switcher d3d11.dll --parallel mkdir -p "build/stage/FrameHome-PC-windows-x64" dist - cp build/pc-win64/frame-home.exe build/pc-win64/frame-switcher.exe build/pc-win64/d3d11.dll frame/pc/install-frame-home-pc.ps1 \ - "frame/pc/Install Frame Home on this PC.bat" "frame/pc/Remove Frame Home from this PC.bat" "build/stage/FrameHome-PC-windows-x64/" + cp build/pc-win64/frame-home.exe build/pc-win64/frame-switcher.exe build/pc-win64/d3d11.dll pc-streaming/install-frame-home-pc.ps1 \ + "pc-streaming/Install Frame Home on this PC.bat" "pc-streaming/Remove Frame Home from this PC.bat" "build/stage/FrameHome-PC-windows-x64/" cp LICENSE build/stage/FrameHome-PC-windows-x64/LICENSE.txt (cd build/stage && zip -qr ../../dist/FrameHome-PC-windows-x64.zip FrameHome-PC-windows-x64) - uses: actions/upload-artifact@v4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 367d4d1..0c44685 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,9 +142,9 @@ if(NOT FRAME_HOME_PC) endif() # The Windows compositor layer: a proxy d3d11.dll that wraps vrcompositor's Direct3D 11 device and draws the home in -# Aurora's place (layer/frame_home_layer_d3d11.cpp). The .def forwards every other d3d11 export to the real library. +# Aurora's place (pc-streaming/frame_home_layer_d3d11.cpp). The .def forwards every other d3d11 export to the real library. if(WIN32 AND FRAME_HOME_PC) - add_library(frame-home-d3d11 MODULE layer/frame_home_layer_d3d11.cpp layer/d3d11_proxy.def) + add_library(frame-home-d3d11 MODULE pc-streaming/frame_home_layer_d3d11.cpp pc-streaming/d3d11_proxy.def) set_target_properties(frame-home-d3d11 PROPERTIES OUTPUT_NAME d3d11 PREFIX "") target_include_directories(frame-home-d3d11 PRIVATE src) target_link_libraries(frame-home-d3d11 PRIVATE dxguid uuid) diff --git a/README.md b/README.md index 8dfc52b..c89405a 100644 --- a/README.md +++ b/README.md @@ -50,10 +50,11 @@ very largest homes may not fit. thermal governor that keeps the headset cool. - Safe: a compositor layer that steps aside if Frame Home stops, and a one-file off switch. -**On a PC with SteamVR** +**On a PC with SteamVR (experimental, separate)** -- The same Frame Home as SteamVR's environment on Windows and Linux, switched from the Steam menu, showing what you - save in Studio ([guide](docs/pc-steamvr.md)). +- A PC-side compositor layer that aims to make your homes SteamVR's environment on a desktop PC, kept apart in + [`pc-streaming/`](pc-streaming/README.md). It is for a tethered PC headset; it does **not** work for the Steam + Frame, which renders its home on the headset itself. **Frame Studio (on your computer)** @@ -78,7 +79,7 @@ very largest homes may not fit. | [Performance](docs/performance.md) | Reaching 120 fps, checking it, fixing stutter | | [Frame Studio guide](docs/studio-guide.md) | The Studio window, tools and panels | | [Bundles](docs/bundles.md) | Several environments in one `.fbundle` | -| [Frame Home on a PC](docs/pc-steamvr.md) | Your homes as SteamVR's environment on a Windows or Linux PC | +| [Frame Home on a PC](pc-streaming/README.md) | Experimental PC-side layer (separate; not for the Steam Frame) | | [Building from source](docs/building.md) | Building on each system, CI, the headset side | | [Troubleshooting](docs/troubleshooting.md) | Symptoms and fixes, logs, the self-test | diff --git a/frame/pc/Install Frame Home on this PC.bat b/pc-streaming/Install Frame Home on this PC.bat similarity index 100% rename from frame/pc/Install Frame Home on this PC.bat rename to pc-streaming/Install Frame Home on this PC.bat diff --git a/pc-streaming/README.md b/pc-streaming/README.md new file mode 100644 index 0000000..82fe3f7 --- /dev/null +++ b/pc-streaming/README.md @@ -0,0 +1,35 @@ +# PC streaming environments (experimental — not for the Steam Frame) + +This folder holds Frame Home's **PC-side** attempt to make your environments SteamVR's environment on a desktop PC, +separate from the Steam Frame build. It is kept apart on purpose: it does **not** work for the Steam Frame, and the +main project ships without it. + +## What's here + +| File | What | +|---|---| +| `frame_home_layer_d3d11.cpp` | A proxy `d3d11.dll` that wraps SteamVR's Windows compositor and draws the home where it draws Aurora — the Direct3D 11 counterpart of the Steam Frame's Vulkan layer (`../layer/frame_home_layer.cpp`). | +| `d3d11_proxy.def` | The proxy's exports: `D3D11CreateDevice` is ours, every other export forwards to the real `d3d11.dll`. | +| `install-frame-home-pc.ps1`, `*.bat` | The Windows installer that places the layer beside SteamVR's compositor. | +| `pc-steamvr.md` | Notes on how it was meant to work. | + +The renderer's Windows support (importing the compositor's textures, the named-pipe hand-over, the `--system` path) +lives in the shared sources under `src/` behind `#ifdef _WIN32` / the `FRAME_HOME_PC` CMake option, so it only +compiles into a PC build and never affects the Steam Frame build. + +## Why it's set aside + +The compositor layer is the right design for a **tethered** PC headset (Index, Vive, Reverb), and likely for standard +streaming (e.g. a Quest over Steam Link), where the **PC** renders the SteamVR environment. It was never confirmed on +such hardware. + +It **cannot** work for the **Steam Frame**. Tracing every PC process showed the Steam Frame renders its home +environment **on the headset itself** — `vrcompositor.exe` draws nothing and the `vrlink` streaming driver makes none +of the environment's shaders; only game video is streamed. So there is nothing on the PC to replace. The home on the +Steam Frame belongs to the **headset-side Frame Home** (the Vulkan layer in `../layer/`), which runs inside the Steam +Frame's own compositor. + +## Building it + +With the main project configured for a PC (`FRAME_HOME_PC=ON`, the default on Windows/x86-64), the `frame-home-d3d11` +target builds `d3d11.dll` from this folder. `install-frame-home-pc.ps1` installs it. diff --git a/frame/pc/Remove Frame Home from this PC.bat b/pc-streaming/Remove Frame Home from this PC.bat similarity index 100% rename from frame/pc/Remove Frame Home from this PC.bat rename to pc-streaming/Remove Frame Home from this PC.bat diff --git a/layer/d3d11_proxy.def b/pc-streaming/d3d11_proxy.def similarity index 100% rename from layer/d3d11_proxy.def rename to pc-streaming/d3d11_proxy.def diff --git a/layer/frame_home_layer_d3d11.cpp b/pc-streaming/frame_home_layer_d3d11.cpp similarity index 100% rename from layer/frame_home_layer_d3d11.cpp rename to pc-streaming/frame_home_layer_d3d11.cpp diff --git a/frame/pc/install-frame-home-pc.ps1 b/pc-streaming/install-frame-home-pc.ps1 similarity index 100% rename from frame/pc/install-frame-home-pc.ps1 rename to pc-streaming/install-frame-home-pc.ps1 diff --git a/docs/pc-steamvr.md b/pc-streaming/pc-steamvr.md similarity index 100% rename from docs/pc-steamvr.md rename to pc-streaming/pc-steamvr.md diff --git a/scripts/build-studio.sh b/scripts/build-studio.sh index fda2212..2ff5bae 100755 --- a/scripts/build-studio.sh +++ b/scripts/build-studio.sh @@ -72,8 +72,8 @@ stage_pc() { case "$target" in windows-x64) mkdir -p "$stage/pc" cp "$home/frame-home.exe" "$home/frame-switcher.exe" "$home/d3d11.dll" "$stage/pc/" - cp "$ROOT/frame/pc/install-frame-home-pc.ps1" "$ROOT/frame/pc/Install Frame Home on this PC.bat" \ - "$ROOT/frame/pc/Remove Frame Home from this PC.bat" "$stage/pc/" ;; + cp "$ROOT/pc-streaming/install-frame-home-pc.ps1" "$ROOT/pc-streaming/Install Frame Home on this PC.bat" \ + "$ROOT/pc-streaming/Remove Frame Home from this PC.bat" "$stage/pc/" ;; linux-x64) mkdir -p "$stage/pc/bin" "$stage/pc/layer" cp "$home/frame-home" "$home/frame-switcher" "$stage/pc/bin/" ${CXX:-g++} -O2 -shared -fPIC -std=c++17 -fvisibility=hidden -I"$ROOT/third_party/vulkan-headers/include" -I"$ROOT/src" \