Skip to content

Releases

EdgeScale 0.15.1

Choose a tag to compare

@github-actions github-actions released this 11 Nov 17:01

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[0.15.1] — 2026-11-11

Fixed

  • Infinite Swapchain Recreation Loop Elimination (16:9 on 16:10 / Resolution Mismatch):

    • Fixed infinite recreation loop where games running at 16:9 (e.g. 1920x1080 in CS2 or CoD4) on 16:10 laptop panels (1920x1200) caused hundreds of swapchain rebuilds per second until Steam minidump handlers (gameoverlayui) crashed the process.
    • Enforced concrete surface extent precedence in layer/xfsr_layer.cpp: when the window surface is known (haveSurf), displayW/H strictly adheres to surfW/H and never inflates to a larger monitor hint.
    • Aligned presentW and presentH to trueW and trueH inside setupOffloadPipeline to ensure WSI swapchains always match physical surface capabilities.
    • Added isRecreationStorm() dampener to both xfsr_QueuePresentKHR and xfsr_AcquireNextImageKHR to throttle and clamp recreation storms (>3 within 600ms) to the detected extent.
  • HUD Overlay Layout & Visual Improvements:

    • Added adaptive text scaling (scale=1 when width < 900px, scale=2 otherwise) in computeLayout() and rasterizeText().
    • Added generous bottom padding (physicalLines * lineH + startY * 2 + 8) eliminating text descender clipping against the bottom border.
    • Streamlined overlay status string to prevent awkward mid-token wraps like (2.0 / 0x).
  • Global Hotkey Isolation:

    • Ensured HOTKEYS defaults to "shift" globally across all execution modes in scripts/edgerun, so bare keys like F1 (vote Yes) or F2 (vote No) in CS2 never conflict.

[0.15.0] — 2026-11-10

Fixed

  • In-Game Hotkey Conflict Isolation (CS2 / Competitive Voting & Buy Menu):

    • Fixed severe bug where pressing bare F1 (Vote YES / Console), F2 (Vote NO), F3 (Autobuy) in games like Counter-Strike 2 triggered CrossVulkan swapchain recreation (applyPresetIdxLocked), causing sudden stutters or complete game freezes/crashes.
    • Changed default hotkey modifier to Shift (Shift+F1..F6, Shift+F10), strictly ignoring bare F1..F6 keypresses during normal gameplay.
    • Added new hotkey mapping modes via --hotkeys <shift|alt|ctrl|ctrl_alt|nav|bare|none> and --no-hotkeys in scripts/edgerun and EDGESCALE_HOTKEYS:
      • shift (default): Shift+F1..F6, Shift+F10
      • alt: Alt+F1..F6, Alt+F10
      • ctrl: Ctrl+F1..F6, Ctrl+F10
      • ctrl_alt: Ctrl+Alt+F1..F6, Ctrl+Alt+F10
      • nav: Navigation cluster (Insert preset, Home mode, PgUp upscaler, Del offload, End 1-way, PgDn fan, Pause pin) avoiding function keys altogether
      • none: Hotkey listener completely disabled (safest for competitive esports)
      • bare: Bare F1..F6 (legacy opt-in)
    • Automatically enforces modifier isolation in --competitive / --esports mode so in-game votes or key binds never trigger layer actions.
    • Added runtime hotkey switching via control file (hotkeys <mode>).
  • HUD Overlay Layout & Automatic Dynamic Sizing:

    • Fixed overlay text wrapping and bottom-line clipping where line 1 wrapped ((2.0 / 0x)) and line 3 (dGPU... | iGPU...) was cut off at the card bottom.
    • Implemented computeLayout() dynamically tracking text dimensions and soft wraps at the exact window/screen width boundary (wrapW), ensuring the card background, border, and swapchain blit rectangle perfectly enclose all rendered lines on any screen resolution.
    • Increased maximum overlay height allocation kOh from 96px to 160px (supporting up to 6 physical lines with zero truncation).
    • Streamlined line 1 format strings: EdgeScale [HYBRID] edge:comp (CAS:0.60) | 960x540 -> 1920x1080 (2.0x).
    • Added cleanGpuName() sanitizing long device strings: cleans driver tags and verbose suffixes (e.g. AMD Radeon Vega 10 Graphics (RADV RAVEN) -> Vega 10, NVIDIA GeForce GTX 1650 with Max-Q Design -> GTX 1650).

[0.14.0] — 2026-11-10

Added

  • Hardware Fan Control & Anti-Throttling Engine (F6 Hotkey & --fan):
    • Integrated asynchronous, non-blocking fan curve control via nbfc (NoteBook FanControl) and EC controllers in layer/xfsr_controls.cpp and scripts/edgerun.
    • Added dedicated worker thread (FanWorker) ensuring nbfc commands never stall or jitter Vulkan present queues.
    • Added live cycling on hotkey F6: cycles AUTO (EC default) -> AUTO-OPT (temp-reactive) -> BALANCED (75%) -> MAX (100%) -> QUIET (50%) -> AUTO with live in-game toasts.
    • Added reactive dynamic curve in AUTO-OPT mode: dynamically adjusts fan speed based on peak temperature across CPU and all GPUs (100% at ≥78°C, 85% at ≥70°C, 70% at ≥62°C, 50% below 60°C) with hysteresis damping to eliminate fan thrashing.
    • Added CLI flag --fan auto|opt|balanced|max|quiet|<pct> in scripts/edgerun and control file command fan <mode> for runtime scripting.
    • Automatically defaults to opt fan curve in --competitive / --esports mode to prevent CPU/GPU thermal throttling downclocks during competitive matches.
  • CPU Thermal Observability:
    • Added automatic sysfs hardware monitor discovery (discoverCpuTemp()) scanning k10temp (AMD Ryzen), coretemp (Intel), zenpower, and ACPI thermal zones in sub-millisecond sysfs queries.
    • Real-time CPU temperature integrated into HUD telemetry and auto-curve decision loop.
  • Modern HUD Overlay Redesign:
    • Re-architected in-game HUD overlay in layer/xfsr_controls.cpp:
      • Dark obsidian slate glass card (rgba(12, 16, 24, 235)) with rounded corners (radius 6px).
      • Glowing top accent header bar featuring a horizontal gradient from Electric Cyan (#22d3ee) to Neon Violet (#a855f7).
      • 1px crisp card outline border (rgba(56, 189, 248, 65)).
      • Sub-pixel text drop shadows at (+1, +1) (rgba(0, 0, 0, 220)) before rendering glyph foregrounds, providing razor-sharp legibility across high-contrast in-game environments.
      • Color-coded thermal indicators: cool (<65°C, mint green), warm (65-75°C, amber), hot (≥76°C, coral red).
      • Multi-color typography highlighting modes, resolutions, FPS, CPU thermals, and fan status.

Optimized

  • Present Thread Polling Rate Limiting:
    • Throttled synchronous hotkey polling (XQueryKeymap) and control file stat() polling in poll() to at most 60 Hz (~16ms intervals), eliminating redundant IPC roundtrips and filesystem syscalls at high framerates (120-200 FPS).
  • Fast 1:1 Native Resolution Pass in EdgePass (shaders/edge_pass.comp.glsl):
    • Added edgeNative fast path: when renderSize == displaySize (1080p -> 1080p native), heavy 12-tap Catmull-Rom cubic interpolation and sub-pixel edge tangent reconstruction are bypassed in favor of a fast 5-tap Contrast-Adaptive Sharpening (CAS) filter (or 1-tap sample if sharpness ≤ 0.01), reducing GPU compute time from ~1.0ms to <0.08ms.

[0.13.1] — 2026-11-09

Fixed

  • Native Passthrough Stutter & Freeze in CS2 / Competitive Mode (layer/xfsr_layer.cpp & scripts/edgerun):
    • 3-Slot Ring Overlay Synchronization: Resolved a severe driver deadlock where queuePresentWithOverlay reused a single global binary semaphore (g_overlayDoneSem) and single fence (g_overlayFence) across consecutive frames on identity/passthrough swapchains. Replaced with a 3-slot multi-buffered ring buffer (kOverlayRingSize = 3), eliminating semaphore re-signaling race conditions and allowing asynchronous GPU presentation without blocking the CPU present thread.
    • Competitive Passthrough Bypass: Completely bypassed queuePresentWithOverlay and swapchain TRANSFER_DST flag injection when --competitive / EDGESCALE_LOW_LATENCY=1 is active, providing direct, uninhibited zero-overhead driver swapchain presentation.
    • Preserved WAYLAND_DISPLAY for Native Mode: Prevented clearing WAYLAND_DISPLAY when --native is active, allowing native Linux titles like Counter-Strike 2 (SDL3) to run directly on native Wayland without forced Xwayland compositing latency, frame pacing jitter, or Pango text layout assertion failures.

[0.13.0] — 2026-11-09

Added

  • Competitive / Ultra-Low-Latency Mode (--competitive / --esports) & F2 Live Cycling:
    • Added dedicated Competitive Mode (edge competitive) designed for twitch and competitive shooters (CS2, Apex Legends, Call of Duty / Warzone).
    • Implemented an ultra-lightweight directional reconstruction pass in shaders/edge_pass.comp.glsl executing in sub-0.08ms on GTX 1650 / Vega 10 with zero barrier and LDS overhead.
    • Added live hotkey cycling on F2: now cycles quality -> perf -> nearest -> competitive on the fly with in-game HUD toasts (edge competitive (lowest latency)).
    • Automatically overrides WSI swapchain to VK_PRESENT_MODE_IMMEDIATE_KHR (or MAILBOX) in layer/xfsr_layer.cpp via EDGESCALE_LOW_LATENCY=1 to eliminate queue latency.
    • Automatically tunes DXVK in scripts/edgerun with dxvk.syncInterval = 0, dxvk.numBackBuffers = 1, and DXVK_ASYNC=1 to minimize input lag and eliminate shader compilation stutter.
  • DSR modes listed in-game (scripts/edgerun): when t...
Read more

EdgeScale 0.15.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 11:47

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[0.15.0] — 2026-11-10

Fixed

  • In-Game Hotkey Conflict Isolation (CS2 / Competitive Voting & Buy Menu):

    • Fixed severe bug where pressing bare F1 (Vote YES / Console), F2 (Vote NO), F3 (Autobuy) in games like Counter-Strike 2 triggered CrossVulkan swapchain recreation (applyPresetIdxLocked), causing sudden stutters or complete game freezes/crashes.
    • Changed default hotkey modifier to Shift (Shift+F1..F6, Shift+F10), strictly ignoring bare F1..F6 keypresses during normal gameplay.
    • Added new hotkey mapping modes via --hotkeys <shift|alt|ctrl|ctrl_alt|nav|bare|none> and --no-hotkeys in scripts/edgerun and EDGESCALE_HOTKEYS:
      • shift (default): Shift+F1..F6, Shift+F10
      • alt: Alt+F1..F6, Alt+F10
      • ctrl: Ctrl+F1..F6, Ctrl+F10
      • ctrl_alt: Ctrl+Alt+F1..F6, Ctrl+Alt+F10
      • nav: Navigation cluster (Insert preset, Home mode, PgUp upscaler, Del offload, End 1-way, PgDn fan, Pause pin) avoiding function keys altogether
      • none: Hotkey listener completely disabled (safest for competitive esports)
      • bare: Bare F1..F6 (legacy opt-in)
    • Automatically enforces modifier isolation in --competitive / --esports mode so in-game votes or key binds never trigger layer actions.
    • Added runtime hotkey switching via control file (hotkeys <mode>).
  • HUD Overlay Layout & Automatic Dynamic Sizing:

    • Fixed overlay text wrapping and bottom-line clipping where line 1 wrapped ((2.0 / 0x)) and line 3 (dGPU... | iGPU...) was cut off at the card bottom.
    • Implemented computeLayout() dynamically tracking text dimensions and soft wraps at the exact window/screen width boundary (wrapW), ensuring the card background, border, and swapchain blit rectangle perfectly enclose all rendered lines on any screen resolution.
    • Increased maximum overlay height allocation kOh from 96px to 160px (supporting up to 6 physical lines with zero truncation).
    • Streamlined line 1 format strings: EdgeScale [HYBRID] edge:comp (CAS:0.60) | 960x540 -> 1920x1080 (2.0x).
    • Added cleanGpuName() sanitizing long device strings: cleans driver tags and verbose suffixes (e.g. AMD Radeon Vega 10 Graphics (RADV RAVEN) -> Vega 10, NVIDIA GeForce GTX 1650 with Max-Q Design -> GTX 1650).

[0.14.0] — 2026-11-10

Added

  • Hardware Fan Control & Anti-Throttling Engine (F6 Hotkey & --fan):
    • Integrated asynchronous, non-blocking fan curve control via nbfc (NoteBook FanControl) and EC controllers in layer/xfsr_controls.cpp and scripts/edgerun.
    • Added dedicated worker thread (FanWorker) ensuring nbfc commands never stall or jitter Vulkan present queues.
    • Added live cycling on hotkey F6: cycles AUTO (EC default) -> AUTO-OPT (temp-reactive) -> BALANCED (75%) -> MAX (100%) -> QUIET (50%) -> AUTO with live in-game toasts.
    • Added reactive dynamic curve in AUTO-OPT mode: dynamically adjusts fan speed based on peak temperature across CPU and all GPUs (100% at ≥78°C, 85% at ≥70°C, 70% at ≥62°C, 50% below 60°C) with hysteresis damping to eliminate fan thrashing.
    • Added CLI flag --fan auto|opt|balanced|max|quiet|<pct> in scripts/edgerun and control file command fan <mode> for runtime scripting.
    • Automatically defaults to opt fan curve in --competitive / --esports mode to prevent CPU/GPU thermal throttling downclocks during competitive matches.
  • CPU Thermal Observability:
    • Added automatic sysfs hardware monitor discovery (discoverCpuTemp()) scanning k10temp (AMD Ryzen), coretemp (Intel), zenpower, and ACPI thermal zones in sub-millisecond sysfs queries.
    • Real-time CPU temperature integrated into HUD telemetry and auto-curve decision loop.
  • Modern HUD Overlay Redesign:
    • Re-architected in-game HUD overlay in layer/xfsr_controls.cpp:
      • Dark obsidian slate glass card (rgba(12, 16, 24, 235)) with rounded corners (radius 6px).
      • Glowing top accent header bar featuring a horizontal gradient from Electric Cyan (#22d3ee) to Neon Violet (#a855f7).
      • 1px crisp card outline border (rgba(56, 189, 248, 65)).
      • Sub-pixel text drop shadows at (+1, +1) (rgba(0, 0, 0, 220)) before rendering glyph foregrounds, providing razor-sharp legibility across high-contrast in-game environments.
      • Color-coded thermal indicators: cool (<65°C, mint green), warm (65-75°C, amber), hot (≥76°C, coral red).
      • Multi-color typography highlighting modes, resolutions, FPS, CPU thermals, and fan status.

Optimized

  • Present Thread Polling Rate Limiting:
    • Throttled synchronous hotkey polling (XQueryKeymap) and control file stat() polling in poll() to at most 60 Hz (~16ms intervals), eliminating redundant IPC roundtrips and filesystem syscalls at high framerates (120-200 FPS).
  • Fast 1:1 Native Resolution Pass in EdgePass (shaders/edge_pass.comp.glsl):
    • Added edgeNative fast path: when renderSize == displaySize (1080p -> 1080p native), heavy 12-tap Catmull-Rom cubic interpolation and sub-pixel edge tangent reconstruction are bypassed in favor of a fast 5-tap Contrast-Adaptive Sharpening (CAS) filter (or 1-tap sample if sharpness ≤ 0.01), reducing GPU compute time from ~1.0ms to <0.08ms.

[0.13.1] — 2026-11-09

Fixed

  • Native Passthrough Stutter & Freeze in CS2 / Competitive Mode (layer/xfsr_layer.cpp & scripts/edgerun):
    • 3-Slot Ring Overlay Synchronization: Resolved a severe driver deadlock where queuePresentWithOverlay reused a single global binary semaphore (g_overlayDoneSem) and single fence (g_overlayFence) across consecutive frames on identity/passthrough swapchains. Replaced with a 3-slot multi-buffered ring buffer (kOverlayRingSize = 3), eliminating semaphore re-signaling race conditions and allowing asynchronous GPU presentation without blocking the CPU present thread.
    • Competitive Passthrough Bypass: Completely bypassed queuePresentWithOverlay and swapchain TRANSFER_DST flag injection when --competitive / EDGESCALE_LOW_LATENCY=1 is active, providing direct, uninhibited zero-overhead driver swapchain presentation.
    • Preserved WAYLAND_DISPLAY for Native Mode: Prevented clearing WAYLAND_DISPLAY when --native is active, allowing native Linux titles like Counter-Strike 2 (SDL3) to run directly on native Wayland without forced Xwayland compositing latency, frame pacing jitter, or Pango text layout assertion failures.

[0.13.0] — 2026-11-09

Added

  • Competitive / Ultra-Low-Latency Mode (--competitive / --esports) & F2 Live Cycling:
    • Added dedicated Competitive Mode (edge competitive) designed for twitch and competitive shooters (CS2, Apex Legends, Call of Duty / Warzone).
    • Implemented an ultra-lightweight directional reconstruction pass in shaders/edge_pass.comp.glsl executing in sub-0.08ms on GTX 1650 / Vega 10 with zero barrier and LDS overhead.
    • Added live hotkey cycling on F2: now cycles quality -> perf -> nearest -> competitive on the fly with in-game HUD toasts (edge competitive (lowest latency)).
    • Automatically overrides WSI swapchain to VK_PRESENT_MODE_IMMEDIATE_KHR (or MAILBOX) in layer/xfsr_layer.cpp via EDGESCALE_LOW_LATENCY=1 to eliminate queue latency.
    • Automatically tunes DXVK in scripts/edgerun with dxvk.syncInterval = 0, dxvk.numBackBuffers = 1, and DXVK_ASYNC=1 to minimize input lag and eliminate shader compilation stutter.
  • DSR modes listed in-game (scripts/edgerun): when the render size is larger than the output (--dsr 4k, --render 3840x2160 --output 1920x1080), edgerun exports WINE_FULLSCREEN_FSR=1 and WINE_FULLSCREEN_FSR_CUSTOM_MODE=<render>. Proton then lists 3840x2160 in the game's resolution menu on a 1080p monitor.

Fixed

  • D3D9 games rendering on the iGPU (scripts/edgerun): DXVK D3D9 defaults to d3d9.enumerateByDisplays = True, which made adapter 0 the GPU wired to the laptop panel (AMD Vega 10) no matter how Vulkan devices were ordered (CoD4 was affected). edgerun now adds dxvk.hideIntegratedGraphics = True; d3d9.enumerateByDisplays = False to DXVK_CONFIG by default, and keeps any keys the user already set. The layer still sees the iGPU for --offload / --hybrid.
  • Image clipped / not filling the screen (layer/xfsr_layer.cpp): when the X11 window is smaller than the display hint (CoD4 creates its first swapchain before Proton grows the window to fullscreen), the proxy now presents at the real window size instead of putting a 1920x1080 swapchain on a 1280x720 window. When SUBOPTIMAL/OUT_OF_DATE comes back and the window size has changed, the proxy now returns VK_ERROR_OUT_OF_DATE_KHR so the app rebuilds at the new size. Previously it ignored these forever.

[0.12.0] — 2026-11-09

Added

  • In-Layer Discrete GPU Priority (layer/xfsr_layer.cpp & scripts/edgerun):
    • Hooked vkEnumeratePhysicalDevices and vkEnumeratePhysicalDeviceGroups (KHR) in the layer to sort VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU (NVIDIA GeForce GTX 1650) to GPU0 and VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU (AMD Radeon Vega 10) to GPU1 (or vice-versa when --igpu is passed)....
Read more

EdgeScale 0.13.1

Choose a tag to compare

@github-actions github-actions released this 09 Nov 17:50

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[0.13.1] — 2026-11-09

Fixed

  • Native Passthrough Stutter & Freeze in CS2 / Competitive Mode (layer/xfsr_layer.cpp & scripts/edgerun):
    • 3-Slot Ring Overlay Synchronization: Resolved a severe driver deadlock where queuePresentWithOverlay reused a single global binary semaphore (g_overlayDoneSem) and single fence (g_overlayFence) across consecutive frames on identity/passthrough swapchains. Replaced with a 3-slot multi-buffered ring buffer (kOverlayRingSize = 3), eliminating semaphore re-signaling race conditions and allowing asynchronous GPU presentation without blocking the CPU present thread.
    • Competitive Passthrough Bypass: Completely bypassed queuePresentWithOverlay and swapchain TRANSFER_DST flag injection when --competitive / EDGESCALE_LOW_LATENCY=1 is active, providing direct, uninhibited zero-overhead driver swapchain presentation.
    • Preserved WAYLAND_DISPLAY for Native Mode: Prevented clearing WAYLAND_DISPLAY when --native is active, allowing native Linux titles like Counter-Strike 2 (SDL3) to run directly on native Wayland without forced Xwayland compositing latency, frame pacing jitter, or Pango text layout assertion failures.

[0.13.0] — 2026-11-09

Added

  • Competitive / Ultra-Low-Latency Mode (--competitive / --esports) & F2 Live Cycling:
    • Added dedicated Competitive Mode (edge competitive) designed for twitch and competitive shooters (CS2, Apex Legends, Call of Duty / Warzone).
    • Implemented an ultra-lightweight directional reconstruction pass in shaders/edge_pass.comp.glsl executing in sub-0.08ms on GTX 1650 / Vega 10 with zero barrier and LDS overhead.
    • Added live hotkey cycling on F2: now cycles quality -> perf -> nearest -> competitive on the fly with in-game HUD toasts (edge competitive (lowest latency)).
    • Automatically overrides WSI swapchain to VK_PRESENT_MODE_IMMEDIATE_KHR (or MAILBOX) in layer/xfsr_layer.cpp via EDGESCALE_LOW_LATENCY=1 to eliminate queue latency.
    • Automatically tunes DXVK in scripts/edgerun with dxvk.syncInterval = 0, dxvk.numBackBuffers = 1, and DXVK_ASYNC=1 to minimize input lag and eliminate shader compilation stutter.
  • DSR modes listed in-game (scripts/edgerun): when the render size is larger than the output (--dsr 4k, --render 3840x2160 --output 1920x1080), edgerun exports WINE_FULLSCREEN_FSR=1 and WINE_FULLSCREEN_FSR_CUSTOM_MODE=<render>. Proton then lists 3840x2160 in the game's resolution menu on a 1080p monitor.

Fixed

  • D3D9 games rendering on the iGPU (scripts/edgerun): DXVK D3D9 defaults to d3d9.enumerateByDisplays = True, which made adapter 0 the GPU wired to the laptop panel (AMD Vega 10) no matter how Vulkan devices were ordered (CoD4 was affected). edgerun now adds dxvk.hideIntegratedGraphics = True; d3d9.enumerateByDisplays = False to DXVK_CONFIG by default, and keeps any keys the user already set. The layer still sees the iGPU for --offload / --hybrid.
  • Image clipped / not filling the screen (layer/xfsr_layer.cpp): when the X11 window is smaller than the display hint (CoD4 creates its first swapchain before Proton grows the window to fullscreen), the proxy now presents at the real window size instead of putting a 1920x1080 swapchain on a 1280x720 window. When SUBOPTIMAL/OUT_OF_DATE comes back and the window size has changed, the proxy now returns VK_ERROR_OUT_OF_DATE_KHR so the app rebuilds at the new size. Previously it ignored these forever.

[0.12.0] — 2026-11-09

Added

  • In-Layer Discrete GPU Priority (layer/xfsr_layer.cpp & scripts/edgerun):
    • Hooked vkEnumeratePhysicalDevices and vkEnumeratePhysicalDeviceGroups (KHR) in the layer to sort VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU (NVIDIA GeForce GTX 1650) to GPU0 and VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU (AMD Radeon Vega 10) to GPU1 (or vice-versa when --igpu is passed).
    • Both GPUs remain visible for --offload / --hybrid, and Proton/DXVK automatically picks the GTX 1650 without needing extra launch variables.
  • Pre-Flight NVIDIA Driver / NVML Health Check (scripts/edgerun):
    • Checks whether an NVIDIA PCI device (0x10de) exists on the bus when nvidia-smi fails (such as after a kernel/driver update before rebooting) and prints an immediate warning banner explaining why Vulkan would fall back to the iGPU.
  • Preserved EdgeScale HUD Overlay Inside --any / --gamescope (scripts/edgerun & layer/xfsr_layer.cpp):
    • Kept the host gamescope compositor unhooked (DISABLE_XFSR=1) while enabling the EdgeScale layer inside the nested game container in HUD mode (XFSR_GAMESCOPE_OUT), so the EdgeScale overlay and dGPU sorting still work when --any is used.

Fixed

  • Restored maxImageExtent Clamping for Upscaling (layer/xfsr_layer.cpp):
    • Fixed applyCapsShrink so that when upscaling (rw < winW || rh < winH), caps->maxImageExtent is clamped to {rw, rh} (1280x720), while DSR (scale < 1.0) continues to expand maxImageExtent with std::max.
    • Games like Sonic Frontiers that pass explicit 1920x1080 swapchain dimensions to DXVK are now clamped down to 1280x720 by DXVK just like Sonic Superstars.
  • Fixed Overlay GPU Deduplication & Effective Scale Readout (layer/xfsr_controls.cpp):
    • Prevented the iGPU name/tag from overwriting the dGPU slot when running on an integrated GPU or when NVML is offline, and detected AMD APUs via mem_info_vram_total.
    • Updated the resolution readout in formatStatusLocked to display the actual ratio (1.00x, tgt 1.50x when in passthrough vs 1.50x when upscaling).

[0.11.2] — 2026-11-05

Added

  • Automated AI Compute Multi-GPU Orchestrator (edgerun --ai / Auto-Split):
    • Added intelligent AI compute detection in edgerun when executing llama-cli or llama-server.
    • Automatically identifies heterogeneous Vulkan devices (dGPU primary compute + iGPU secondary compute), unmasks device selection, disables unnecessary graphics swapchain hooks (XFSR_OFFLOAD=0), and auto-injects optimal pipeline layer splits (--device <dGPU>,<iGPU> --split-mode layer --tensor-split 2,1).
    • Achieves 14.0 t/s prompt and 5.4 t/s decode with zero manual multi-GPU split parameters.

Fixed

  • EdgePass Default & Option Promotion:
    • Fixed single-GPU mode (--no-offload) defaulting to legacy fsr1 instead of edge.
    • Passing --edge-mode or --edge-sharpness now automatically selects UPSCALER=edge.
  • Integrated GPU HUD Telemetry Tagging:
    • Fixed HUD overlay incorrectly labeling single APU/iGPU devices (such as AMD Renoir/Vega) as dGPU. Non-discrete single devices are now accurately tagged as iGPU.

[0.11.1] — 2026-11-05

Added

  • Dual-GPU In-Game Telemetry & Dynamic NVML Discovery (--overlay):
    • Integrated dynamic runtime loading of libnvidia-ml.so.1 (NVML) via dlopen to sample NVIDIA dGPU utilization percentage, temperature (°C), and VRAM usage (MB) without introducing build-time dependencies.
    • Enhanced HUD overlay to distinguish and explicitly label multi-GPU topologies as dGPU and iGPU (e.g. dGPU [GTX 1650] and iGPU [Vega 10 Graphics]) alongside execution mode (HYBRID, OFFLOAD, SAME-GPU, DSR 4K), active upscaler, FPS, and CPU usage.
    • Implemented dynamic bounding box rasterization in rasterizeText and recordOverlay: the semi-transparent overlay badge now fits text line count and width dynamically in the corner, preventing unnecessary darkening of unused screen areas.
    • Hooked physical device property queries and companion discovery (xfsr_ctrl::setDeviceInfo) across device creation and offload pipeline setup in layer/xfsr_layer.cpp.
  • Benchmark Suite Overlay Integration (scripts/xfsr-bench.sh):
    • Enabled the built-in --overlay by default in automated benchmarks and removed reliance on MangoHud.

[0.11.0] — 2026-11-05

Added

  • Distributed GPU Memory Management & Heterogeneous Workload Orchestration:
    • Implemented cost-aware multi-GPU and memory tiering architecture that coordinates workloads across independent physical devices rather than treating disparate physical VRAMs as a single unified device (src/scheduler/gpu_scheduler.hpp, bench/scheduler_test.cpp).
    • Separates the Memory Manager (capacity discovery, heap compatibility, residency tracking, and oversubscription fallback) from the Execution Orchestrator (cost-aware placement scoring across bandwidth, compute throughput, transfer latency, and access frequency).
    • Validated with controlled benchmark matrix demonstrating that offloading transformer layers to secondary compute (e.g. AMD Vega 10 iGPU) delivers +43% higher decode throughput (14.4 t/s) compared to spilling allocations to host system RAM over PCIe (9.6 t/s).
  • VRAM Observability & Cross-Vendor Telemetry Daemon (vram_monitor):
    • Unified multi-GPU telemetry CLI and background daemon (src/vram_monitor/) monitoring NVIDIA dGPU (NVML: VRAM used/free, BAR1, temperature, utilization), AMD iGPU/dGPU (sysfs: mem_info_vram_used, mem_info_gtt_used), and host DDR memory (/proc/meminfo).
    • Implements weighted resource residency scoring ($S_i = \frac{F_i \cdot R_i \cdot C_i}{\text{Size}_{\text{MB}} \cdot (1 + A_i)}$) to drive cost-effective migration policies between VRAM, secondary GPU memory, and system RAM.
    • Supports --once, --json, --daemon [interval], and --score for continuous observability.
  • **AI ...
Read more

EdgeScale 0.12.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 21:08

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[0.12.0] — 2026-11-09

Added

  • In-Layer Discrete GPU Priority (layer/xfsr_layer.cpp & scripts/edgerun):
    • Hooked vkEnumeratePhysicalDevices and vkEnumeratePhysicalDeviceGroups (KHR) in the layer to sort VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU (NVIDIA GeForce GTX 1650) to GPU0 and VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU (AMD Radeon Vega 10) to GPU1 (or vice-versa when --igpu is passed).
    • Both GPUs remain visible for --offload / --hybrid, and Proton/DXVK automatically picks the GTX 1650 without needing extra launch variables.
  • Pre-Flight NVIDIA Driver / NVML Health Check (scripts/edgerun):
    • Checks whether an NVIDIA PCI device (0x10de) exists on the bus when nvidia-smi fails (such as after a kernel/driver update before rebooting) and prints an immediate warning banner explaining why Vulkan would fall back to the iGPU.
  • Preserved EdgeScale HUD Overlay Inside --any / --gamescope (scripts/edgerun & layer/xfsr_layer.cpp):
    • Kept the host gamescope compositor unhooked (DISABLE_XFSR=1) while enabling the EdgeScale layer inside the nested game container in HUD mode (XFSR_GAMESCOPE_OUT), so the EdgeScale overlay and dGPU sorting still work when --any is used.

Fixed

  • Restored maxImageExtent Clamping for Upscaling (layer/xfsr_layer.cpp):
    • Fixed applyCapsShrink so that when upscaling (rw < winW || rh < winH), caps->maxImageExtent is clamped to {rw, rh} (1280x720), while DSR (scale < 1.0) continues to expand maxImageExtent with std::max.
    • Games like Sonic Frontiers that pass explicit 1920x1080 swapchain dimensions to DXVK are now clamped down to 1280x720 by DXVK just like Sonic Superstars.
  • Fixed Overlay GPU Deduplication & Effective Scale Readout (layer/xfsr_controls.cpp):
    • Prevented the iGPU name/tag from overwriting the dGPU slot when running on an integrated GPU or when NVML is offline, and detected AMD APUs via mem_info_vram_total.
    • Updated the resolution readout in formatStatusLocked to display the actual ratio (1.00x, tgt 1.50x when in passthrough vs 1.50x when upscaling).

[0.11.2] — 2026-11-05

Added

  • Automated AI Compute Multi-GPU Orchestrator (edgerun --ai / Auto-Split):
    • Added intelligent AI compute detection in edgerun when executing llama-cli or llama-server.
    • Automatically identifies heterogeneous Vulkan devices (dGPU primary compute + iGPU secondary compute), unmasks device selection, disables unnecessary graphics swapchain hooks (XFSR_OFFLOAD=0), and auto-injects optimal pipeline layer splits (--device <dGPU>,<iGPU> --split-mode layer --tensor-split 2,1).
    • Achieves 14.0 t/s prompt and 5.4 t/s decode with zero manual multi-GPU split parameters.

Fixed

  • EdgePass Default & Option Promotion:
    • Fixed single-GPU mode (--no-offload) defaulting to legacy fsr1 instead of edge.
    • Passing --edge-mode or --edge-sharpness now automatically selects UPSCALER=edge.
  • Integrated GPU HUD Telemetry Tagging:
    • Fixed HUD overlay incorrectly labeling single APU/iGPU devices (such as AMD Renoir/Vega) as dGPU. Non-discrete single devices are now accurately tagged as iGPU.

[0.11.1] — 2026-11-05

Added

  • Dual-GPU In-Game Telemetry & Dynamic NVML Discovery (--overlay):
    • Integrated dynamic runtime loading of libnvidia-ml.so.1 (NVML) via dlopen to sample NVIDIA dGPU utilization percentage, temperature (°C), and VRAM usage (MB) without introducing build-time dependencies.
    • Enhanced HUD overlay to distinguish and explicitly label multi-GPU topologies as dGPU and iGPU (e.g. dGPU [GTX 1650] and iGPU [Vega 10 Graphics]) alongside execution mode (HYBRID, OFFLOAD, SAME-GPU, DSR 4K), active upscaler, FPS, and CPU usage.
    • Implemented dynamic bounding box rasterization in rasterizeText and recordOverlay: the semi-transparent overlay badge now fits text line count and width dynamically in the corner, preventing unnecessary darkening of unused screen areas.
    • Hooked physical device property queries and companion discovery (xfsr_ctrl::setDeviceInfo) across device creation and offload pipeline setup in layer/xfsr_layer.cpp.
  • Benchmark Suite Overlay Integration (scripts/xfsr-bench.sh):
    • Enabled the built-in --overlay by default in automated benchmarks and removed reliance on MangoHud.

[0.11.0] — 2026-11-05

Added

  • Distributed GPU Memory Management & Heterogeneous Workload Orchestration:
    • Implemented cost-aware multi-GPU and memory tiering architecture that coordinates workloads across independent physical devices rather than treating disparate physical VRAMs as a single unified device (src/scheduler/gpu_scheduler.hpp, bench/scheduler_test.cpp).
    • Separates the Memory Manager (capacity discovery, heap compatibility, residency tracking, and oversubscription fallback) from the Execution Orchestrator (cost-aware placement scoring across bandwidth, compute throughput, transfer latency, and access frequency).
    • Validated with controlled benchmark matrix demonstrating that offloading transformer layers to secondary compute (e.g. AMD Vega 10 iGPU) delivers +43% higher decode throughput (14.4 t/s) compared to spilling allocations to host system RAM over PCIe (9.6 t/s).
  • VRAM Observability & Cross-Vendor Telemetry Daemon (vram_monitor):
    • Unified multi-GPU telemetry CLI and background daemon (src/vram_monitor/) monitoring NVIDIA dGPU (NVML: VRAM used/free, BAR1, temperature, utilization), AMD iGPU/dGPU (sysfs: mem_info_vram_used, mem_info_gtt_used), and host DDR memory (/proc/meminfo).
    • Implements weighted resource residency scoring ($S_i = \frac{F_i \cdot R_i \cdot C_i}{\text{Size}_{\text{MB}} \cdot (1 + A_i)}$) to drive cost-effective migration policies between VRAM, secondary GPU memory, and system RAM.
    • Supports --once, --json, --daemon [interval], and --score for continuous observability.
  • AI CUDA Memory Virtualization & Oversubscription Engine (ai_vram_test / ManagedLayerEngine):
    • Reusable stream-prefetched memory management engine (src/ai_vram/ai_vram_adapter.hpp, src/ai_vram/ai_vram_test.cu) leveraging CUDA Heterogeneous Memory Management (HMM) and unified memory.
    • Successfully executes workloads exceeding physical GPU capacity (e.g. 5.25 GB across 6 layers on a 4 GB GTX 1650 at 3.03 GB/s streaming throughput) where standard allocations terminate with out-of-memory errors (cudaErrorMemoryAllocation).
  • Controlled Benchmark Matrix Suite (tests/benchmark_matrix.sh):
    • Reproducible benchmark comparing native VRAM baseline ($c=4096$), native driver failure ($c=32768$, VK_ERROR_OUT_OF_DEVICE_MEMORY), EdgeScale virtualized budget ($c=32768$, 40.4 t/s prefill / 9.6 t/s decode), dual-GPU layer split (14.4 t/s decode), and dual-GPU oversubscription (3.6 t/s decode with 901 MB spilled).
  • Automated Local LLM Launcher (scripts/run_local_llm.sh):
    • Wrapper for running large local models (e.g. Qwen 3.5 4.3B GGUF) with large context windows under EdgeScale VRAM virtualization.
  • Graphics Benchmark Suite Expanded (scripts/xfsr-bench.sh):
    • Updated the WSI/FPS benchmark suite across both Vulkan and OpenGL (Zink) to test modern execution modes (--offload one-way, --offload --no-one-way round-trip, --hybrid, --native, --dsr 4k, --spoof-vram 8GB), all upscalers (edge [quality/perf/nearest], nis, fsr1, blit, nearest), and new modular test filters (XFSR_BENCH_MODES_ONLY, XFSR_BENCH_UPSCALERS_ONLY, XFSR_BENCH_PRESETS_ONLY).

Fixed

  • Benchmark Terminal Redirection & Real-Time Token Parsing:
    • Fixed an issue where llama-cli wrote output directly to /dev/tty, bypassing shell redirection and producing N/A token rates in scripted benchmarks. Execution now cleanly detaches via setsid and redirects standard streams.
  • EdgePass Upscaler Mode Logging:
    • Fixed logging in src/edge_pass.cpp where nearest-neighbor mode erroneously logged as quality.

[0.10.0] — 2026-11-04

Added

  • VRAM Capacity Spoofing & Oversubscription Fallback (--spoof-vram [SIZE] / EDGESCALE_SPOOF_VRAM):
    • Intercepts vkGetPhysicalDeviceMemoryProperties and vkGetPhysicalDeviceMemoryProperties2 to report expanded DEVICE_LOCAL VRAM capacity (e.g. 8GB, 12GB, 16GB, or auto).
    • Transparently intercepts VK_EXT_memory_budget (VkPhysicalDeviceMemoryBudgetPropertiesEXT) so modern engines (DXVK / VKD3D-Proton / Unreal) see increased VRAM budget instead of locking out High/Ultra textures.
    • Implements graceful allocation spilling in vkAllocateMemory: when physical local VRAM is exhausted (VK_ERROR_OUT_OF_DEVICE_MEMORY), automatically falls back to allocating over PCIe in system RAM (HOST_VISIBLE) instead of crashing the application.
    • Profile key: spoof_vram=8GB.
  • Supersampling / DSR (4K Render on 1080p Display) (--dsr 4k|1440p|<val> / --render 3840x2160 --output 1920x1080):
    • Enables true downsampling / Virtual Super Resolution (DSR / SSAA) in the Vulkan layer: the game renders internally at 4K (3840×2160) or 1440p, while the swapchain presents at native monitor resolution (e.g. 1080p).
    • Shipped dedicated edgeDownsample compute shader in shaders/edge_pass.comp.glsl: 4-tap staggered bilinear box filter covering up to a 4×4 texel area, combined with optional Contrast-Adaptive Sharpening (CAS) for clean, anti-aliased SSAA without shimmering.
    • Automatic positive mip LOD bias calculation (-log2(scale) = +1.0 at 4K→1080p) to match high-resolution texture sampling to display pixel density and eliminate texture crawling.
    • Profile key: dsr=4k.

Fixed

  • **Steam Overlay / ...
Read more

EdgeScale 0.11.2

Choose a tag to compare

@github-actions github-actions released this 05 Nov 18:13

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[Unreleased]

[0.11.2] — 2026-11-05

Added

  • Automated AI Compute Multi-GPU Orchestrator (edgerun --ai / Auto-Split):
    • Added intelligent AI compute detection in edgerun when executing llama-cli or llama-server.
    • Automatically identifies heterogeneous Vulkan devices (dGPU primary compute + iGPU secondary compute), unmasks device selection, disables unnecessary graphics swapchain hooks (XFSR_OFFLOAD=0), and auto-injects optimal pipeline layer splits (--device <dGPU>,<iGPU> --split-mode layer --tensor-split 2,1).
    • Achieves 14.0 t/s prompt and 5.4 t/s decode with zero manual multi-GPU split parameters.

Fixed

  • EdgePass Default & Option Promotion:
    • Fixed single-GPU mode (--no-offload) defaulting to legacy fsr1 instead of edge.
    • Passing --edge-mode or --edge-sharpness now automatically selects UPSCALER=edge.
  • Integrated GPU HUD Telemetry Tagging:
    • Fixed HUD overlay incorrectly labeling single APU/iGPU devices (such as AMD Renoir/Vega) as dGPU. Non-discrete single devices are now accurately tagged as iGPU.

[0.11.1] — 2026-11-05

Added

  • Dual-GPU In-Game Telemetry & Dynamic NVML Discovery (--overlay):
    • Integrated dynamic runtime loading of libnvidia-ml.so.1 (NVML) via dlopen to sample NVIDIA dGPU utilization percentage, temperature (°C), and VRAM usage (MB) without introducing build-time dependencies.
    • Enhanced HUD overlay to distinguish and explicitly label multi-GPU topologies as dGPU and iGPU (e.g. dGPU [GTX 1650] and iGPU [Vega 10 Graphics]) alongside execution mode (HYBRID, OFFLOAD, SAME-GPU, DSR 4K), active upscaler, FPS, and CPU usage.
    • Implemented dynamic bounding box rasterization in rasterizeText and recordOverlay: the semi-transparent overlay badge now fits text line count and width dynamically in the corner, preventing unnecessary darkening of unused screen areas.
    • Hooked physical device property queries and companion discovery (xfsr_ctrl::setDeviceInfo) across device creation and offload pipeline setup in layer/xfsr_layer.cpp.
  • Benchmark Suite Overlay Integration (scripts/xfsr-bench.sh):
    • Enabled the built-in --overlay by default in automated benchmarks and removed reliance on MangoHud.

[0.11.0] — 2026-11-05

Added

  • Distributed GPU Memory Management & Heterogeneous Workload Orchestration:
    • Implemented cost-aware multi-GPU and memory tiering architecture that coordinates workloads across independent physical devices rather than treating disparate physical VRAMs as a single unified device (src/scheduler/gpu_scheduler.hpp, bench/scheduler_test.cpp).
    • Separates the Memory Manager (capacity discovery, heap compatibility, residency tracking, and oversubscription fallback) from the Execution Orchestrator (cost-aware placement scoring across bandwidth, compute throughput, transfer latency, and access frequency).
    • Validated with controlled benchmark matrix demonstrating that offloading transformer layers to secondary compute (e.g. AMD Vega 10 iGPU) delivers +43% higher decode throughput (14.4 t/s) compared to spilling allocations to host system RAM over PCIe (9.6 t/s).
  • VRAM Observability & Cross-Vendor Telemetry Daemon (vram_monitor):
    • Unified multi-GPU telemetry CLI and background daemon (src/vram_monitor/) monitoring NVIDIA dGPU (NVML: VRAM used/free, BAR1, temperature, utilization), AMD iGPU/dGPU (sysfs: mem_info_vram_used, mem_info_gtt_used), and host DDR memory (/proc/meminfo).
    • Implements weighted resource residency scoring ($S_i = \frac{F_i \cdot R_i \cdot C_i}{\text{Size}_{\text{MB}} \cdot (1 + A_i)}$) to drive cost-effective migration policies between VRAM, secondary GPU memory, and system RAM.
    • Supports --once, --json, --daemon [interval], and --score for continuous observability.
  • AI CUDA Memory Virtualization & Oversubscription Engine (ai_vram_test / ManagedLayerEngine):
    • Reusable stream-prefetched memory management engine (src/ai_vram/ai_vram_adapter.hpp, src/ai_vram/ai_vram_test.cu) leveraging CUDA Heterogeneous Memory Management (HMM) and unified memory.
    • Successfully executes workloads exceeding physical GPU capacity (e.g. 5.25 GB across 6 layers on a 4 GB GTX 1650 at 3.03 GB/s streaming throughput) where standard allocations terminate with out-of-memory errors (cudaErrorMemoryAllocation).
  • Controlled Benchmark Matrix Suite (tests/benchmark_matrix.sh):
    • Reproducible benchmark comparing native VRAM baseline ($c=4096$), native driver failure ($c=32768$, VK_ERROR_OUT_OF_DEVICE_MEMORY), EdgeScale virtualized budget ($c=32768$, 40.4 t/s prefill / 9.6 t/s decode), dual-GPU layer split (14.4 t/s decode), and dual-GPU oversubscription (3.6 t/s decode with 901 MB spilled).
  • Automated Local LLM Launcher (scripts/run_local_llm.sh):
    • Wrapper for running large local models (e.g. Qwen 3.5 4.3B GGUF) with large context windows under EdgeScale VRAM virtualization.
  • Graphics Benchmark Suite Expanded (scripts/xfsr-bench.sh):
    • Updated the WSI/FPS benchmark suite across both Vulkan and OpenGL (Zink) to test modern execution modes (--offload one-way, --offload --no-one-way round-trip, --hybrid, --native, --dsr 4k, --spoof-vram 8GB), all upscalers (edge [quality/perf/nearest], nis, fsr1, blit, nearest), and new modular test filters (XFSR_BENCH_MODES_ONLY, XFSR_BENCH_UPSCALERS_ONLY, XFSR_BENCH_PRESETS_ONLY).

Fixed

  • Benchmark Terminal Redirection & Real-Time Token Parsing:
    • Fixed an issue where llama-cli wrote output directly to /dev/tty, bypassing shell redirection and producing N/A token rates in scripted benchmarks. Execution now cleanly detaches via setsid and redirects standard streams.
  • EdgePass Upscaler Mode Logging:
    • Fixed logging in src/edge_pass.cpp where nearest-neighbor mode erroneously logged as quality.

[0.10.0] — 2026-11-04

Added

  • VRAM Capacity Spoofing & Oversubscription Fallback (--spoof-vram [SIZE] / EDGESCALE_SPOOF_VRAM):
    • Intercepts vkGetPhysicalDeviceMemoryProperties and vkGetPhysicalDeviceMemoryProperties2 to report expanded DEVICE_LOCAL VRAM capacity (e.g. 8GB, 12GB, 16GB, or auto).
    • Transparently intercepts VK_EXT_memory_budget (VkPhysicalDeviceMemoryBudgetPropertiesEXT) so modern engines (DXVK / VKD3D-Proton / Unreal) see increased VRAM budget instead of locking out High/Ultra textures.
    • Implements graceful allocation spilling in vkAllocateMemory: when physical local VRAM is exhausted (VK_ERROR_OUT_OF_DEVICE_MEMORY), automatically falls back to allocating over PCIe in system RAM (HOST_VISIBLE) instead of crashing the application.
    • Profile key: spoof_vram=8GB.
  • Supersampling / DSR (4K Render on 1080p Display) (--dsr 4k|1440p|<val> / --render 3840x2160 --output 1920x1080):
    • Enables true downsampling / Virtual Super Resolution (DSR / SSAA) in the Vulkan layer: the game renders internally at 4K (3840×2160) or 1440p, while the swapchain presents at native monitor resolution (e.g. 1080p).
    • Shipped dedicated edgeDownsample compute shader in shaders/edge_pass.comp.glsl: 4-tap staggered bilinear box filter covering up to a 4×4 texel area, combined with optional Contrast-Adaptive Sharpening (CAS) for clean, anti-aliased SSAA without shimmering.
    • Automatic positive mip LOD bias calculation (-log2(scale) = +1.0 at 4K→1080p) to match high-resolution texture sampling to display pixel density and eliminate texture crawling.
    • Profile key: dsr=4k.

Fixed

  • Steam Overlay / Companion iGPU Probe Crash (SIGSEGV in CS2 / Steam titles):
    • Fixed a segmentation fault during companion iGPU initialization in games running with the Steam Overlay and Steam Fossilize layers (libVkLayer_steam_fossilize.so).
    • Corrected layerGIPA in DeviceContext::createLogicalViaLoader: the layer was previously forwarding pfnNextGetInstanceProcAddr into vkLayerCreateDevice rather than its own negotiated vkGetInstanceProcAddr. This prevented the Vulkan loader from identifying EdgeScale in the layer chain and caused the loader to re-enter upstream layers (steamoverlayvulkanlayer.so), invoking an uninitialized function pointer.
    • Added a POSIX signal trap (sigsetjmp / sigaction) around companion device discovery to isolate any third-party layer or driver faults, ensuring seamless fallback to same-GPU upscaling instead of terminating the game.
  • OpenGL / Zink Bidirectional Viewport & Downsampling Remapping:
    • Fixed quarter-screen / bottom-left postage stamp rendering bug in gl/xfsr_gl_shim.c when downsampling or supersampling (DSR 4K / 1440p).
    • Replaced unidirectional render < window assumptions across glViewport, glScissor, glBlitFramebuffer, glfwGetFramebufferSize, SDL_GL_GetDrawableSize, and X11 window queries with bidirectional delta checks (abs(...) > threshold).
    • Allowed downsampling scale factors down to 0.125f (e.g. scale=0.50 for 4K → 1080p SSAA) in target_render_size, load_extents, and shrink_wl_size.

[0.9.0] — 2026-11-02

Added

  • Linux AppImage: portable EdgeScale-*-x86_64.AppImage release artifact (scripts/package-appimage.sh) with offline --install and --uninstall support; primary Linux install path replacing the curl installer.
  • Windows Setup.exe: Inno Setup installer/uninstaller (packaging/windows/edgescale.iss) with icon integration, registry setup, and Add/Remove Programs support; ZIP + .bat scripts remain as fallback.
  • Edge Nearest Neighbor mode (--edge-mode nearest): EdgePass compute shader point-sampling...
Read more

EdgeScale 0.11.1

Choose a tag to compare

@github-actions github-actions released this 05 Nov 17:19

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[Unreleased]

[0.11.1] — 2026-11-05

Added

  • Dual-GPU In-Game Telemetry & Dynamic NVML Discovery (--overlay):
    • Integrated dynamic runtime loading of libnvidia-ml.so.1 (NVML) via dlopen to sample NVIDIA dGPU utilization percentage, temperature (°C), and VRAM usage (MB) without introducing build-time dependencies.
    • Enhanced HUD overlay to distinguish and explicitly label multi-GPU topologies as dGPU and iGPU (e.g. dGPU [GTX 1650] and iGPU [Vega 10 Graphics]) alongside execution mode (HYBRID, OFFLOAD, SAME-GPU, DSR 4K), active upscaler, FPS, and CPU usage.
    • Implemented dynamic bounding box rasterization in rasterizeText and recordOverlay: the semi-transparent overlay badge now fits text line count and width dynamically in the corner, preventing unnecessary darkening of unused screen areas.
    • Hooked physical device property queries and companion discovery (xfsr_ctrl::setDeviceInfo) across device creation and offload pipeline setup in layer/xfsr_layer.cpp.
  • Benchmark Suite Overlay Integration (scripts/xfsr-bench.sh):
    • Enabled the built-in --overlay by default in automated benchmarks and removed reliance on MangoHud.

[0.11.0] — 2026-11-05

Added

  • Distributed GPU Memory Management & Heterogeneous Workload Orchestration:
    • Implemented cost-aware multi-GPU and memory tiering architecture that coordinates workloads across independent physical devices rather than treating disparate physical VRAMs as a single unified device (src/scheduler/gpu_scheduler.hpp, bench/scheduler_test.cpp).
    • Separates the Memory Manager (capacity discovery, heap compatibility, residency tracking, and oversubscription fallback) from the Execution Orchestrator (cost-aware placement scoring across bandwidth, compute throughput, transfer latency, and access frequency).
    • Validated with controlled benchmark matrix demonstrating that offloading transformer layers to secondary compute (e.g. AMD Vega 10 iGPU) delivers +43% higher decode throughput (14.4 t/s) compared to spilling allocations to host system RAM over PCIe (9.6 t/s).
  • VRAM Observability & Cross-Vendor Telemetry Daemon (vram_monitor):
    • Unified multi-GPU telemetry CLI and background daemon (src/vram_monitor/) monitoring NVIDIA dGPU (NVML: VRAM used/free, BAR1, temperature, utilization), AMD iGPU/dGPU (sysfs: mem_info_vram_used, mem_info_gtt_used), and host DDR memory (/proc/meminfo).
    • Implements weighted resource residency scoring ($S_i = \frac{F_i \cdot R_i \cdot C_i}{\text{Size}_{\text{MB}} \cdot (1 + A_i)}$) to drive cost-effective migration policies between VRAM, secondary GPU memory, and system RAM.
    • Supports --once, --json, --daemon [interval], and --score for continuous observability.
  • AI CUDA Memory Virtualization & Oversubscription Engine (ai_vram_test / ManagedLayerEngine):
    • Reusable stream-prefetched memory management engine (src/ai_vram/ai_vram_adapter.hpp, src/ai_vram/ai_vram_test.cu) leveraging CUDA Heterogeneous Memory Management (HMM) and unified memory.
    • Successfully executes workloads exceeding physical GPU capacity (e.g. 5.25 GB across 6 layers on a 4 GB GTX 1650 at 3.03 GB/s streaming throughput) where standard allocations terminate with out-of-memory errors (cudaErrorMemoryAllocation).
  • Controlled Benchmark Matrix Suite (tests/benchmark_matrix.sh):
    • Reproducible benchmark comparing native VRAM baseline ($c=4096$), native driver failure ($c=32768$, VK_ERROR_OUT_OF_DEVICE_MEMORY), EdgeScale virtualized budget ($c=32768$, 40.4 t/s prefill / 9.6 t/s decode), dual-GPU layer split (14.4 t/s decode), and dual-GPU oversubscription (3.6 t/s decode with 901 MB spilled).
  • Automated Local LLM Launcher (scripts/run_local_llm.sh):
    • Wrapper for running large local models (e.g. Qwen 3.5 4.3B GGUF) with large context windows under EdgeScale VRAM virtualization.
  • Graphics Benchmark Suite Expanded (scripts/xfsr-bench.sh):
    • Updated the WSI/FPS benchmark suite across both Vulkan and OpenGL (Zink) to test modern execution modes (--offload one-way, --offload --no-one-way round-trip, --hybrid, --native, --dsr 4k, --spoof-vram 8GB), all upscalers (edge [quality/perf/nearest], nis, fsr1, blit, nearest), and new modular test filters (XFSR_BENCH_MODES_ONLY, XFSR_BENCH_UPSCALERS_ONLY, XFSR_BENCH_PRESETS_ONLY).

Fixed

  • Benchmark Terminal Redirection & Real-Time Token Parsing:
    • Fixed an issue where llama-cli wrote output directly to /dev/tty, bypassing shell redirection and producing N/A token rates in scripted benchmarks. Execution now cleanly detaches via setsid and redirects standard streams.
  • EdgePass Upscaler Mode Logging:
    • Fixed logging in src/edge_pass.cpp where nearest-neighbor mode erroneously logged as quality.

[0.10.0] — 2026-11-04

Added

  • VRAM Capacity Spoofing & Oversubscription Fallback (--spoof-vram [SIZE] / EDGESCALE_SPOOF_VRAM):
    • Intercepts vkGetPhysicalDeviceMemoryProperties and vkGetPhysicalDeviceMemoryProperties2 to report expanded DEVICE_LOCAL VRAM capacity (e.g. 8GB, 12GB, 16GB, or auto).
    • Transparently intercepts VK_EXT_memory_budget (VkPhysicalDeviceMemoryBudgetPropertiesEXT) so modern engines (DXVK / VKD3D-Proton / Unreal) see increased VRAM budget instead of locking out High/Ultra textures.
    • Implements graceful allocation spilling in vkAllocateMemory: when physical local VRAM is exhausted (VK_ERROR_OUT_OF_DEVICE_MEMORY), automatically falls back to allocating over PCIe in system RAM (HOST_VISIBLE) instead of crashing the application.
    • Profile key: spoof_vram=8GB.
  • Supersampling / DSR (4K Render on 1080p Display) (--dsr 4k|1440p|<val> / --render 3840x2160 --output 1920x1080):
    • Enables true downsampling / Virtual Super Resolution (DSR / SSAA) in the Vulkan layer: the game renders internally at 4K (3840×2160) or 1440p, while the swapchain presents at native monitor resolution (e.g. 1080p).
    • Shipped dedicated edgeDownsample compute shader in shaders/edge_pass.comp.glsl: 4-tap staggered bilinear box filter covering up to a 4×4 texel area, combined with optional Contrast-Adaptive Sharpening (CAS) for clean, anti-aliased SSAA without shimmering.
    • Automatic positive mip LOD bias calculation (-log2(scale) = +1.0 at 4K→1080p) to match high-resolution texture sampling to display pixel density and eliminate texture crawling.
    • Profile key: dsr=4k.

Fixed

  • Steam Overlay / Companion iGPU Probe Crash (SIGSEGV in CS2 / Steam titles):
    • Fixed a segmentation fault during companion iGPU initialization in games running with the Steam Overlay and Steam Fossilize layers (libVkLayer_steam_fossilize.so).
    • Corrected layerGIPA in DeviceContext::createLogicalViaLoader: the layer was previously forwarding pfnNextGetInstanceProcAddr into vkLayerCreateDevice rather than its own negotiated vkGetInstanceProcAddr. This prevented the Vulkan loader from identifying EdgeScale in the layer chain and caused the loader to re-enter upstream layers (steamoverlayvulkanlayer.so), invoking an uninitialized function pointer.
    • Added a POSIX signal trap (sigsetjmp / sigaction) around companion device discovery to isolate any third-party layer or driver faults, ensuring seamless fallback to same-GPU upscaling instead of terminating the game.
  • OpenGL / Zink Bidirectional Viewport & Downsampling Remapping:
    • Fixed quarter-screen / bottom-left postage stamp rendering bug in gl/xfsr_gl_shim.c when downsampling or supersampling (DSR 4K / 1440p).
    • Replaced unidirectional render < window assumptions across glViewport, glScissor, glBlitFramebuffer, glfwGetFramebufferSize, SDL_GL_GetDrawableSize, and X11 window queries with bidirectional delta checks (abs(...) > threshold).
    • Allowed downsampling scale factors down to 0.125f (e.g. scale=0.50 for 4K → 1080p SSAA) in target_render_size, load_extents, and shrink_wl_size.

[0.9.0] — 2026-11-02

Added

  • Linux AppImage: portable EdgeScale-*-x86_64.AppImage release artifact (scripts/package-appimage.sh) with offline --install and --uninstall support; primary Linux install path replacing the curl installer.
  • Windows Setup.exe: Inno Setup installer/uninstaller (packaging/windows/edgescale.iss) with icon integration, registry setup, and Add/Remove Programs support; ZIP + .bat scripts remain as fallback.
  • Edge Nearest Neighbor mode (--edge-mode nearest): EdgePass compute shader point-sampling mode dedicated for 2D pixel art games, preserving crisp sprite pixels with zero blur or haloing. F2 hotkey cycles quality → perf → nearest when Edge upscaler is active.
  • Nearest-neighbor upscaler (--upscaler nearest): VK_FILTER_NEAREST blit for 2D pixel art; F3 cycle includes blit → nearest → nis → edge.
  • Manual resolutions: --render WxH for absolute internal size; --output WxH auto-detects the primary display when omitted (supports 4K). Profile keys output= / render=. Adaptive scale max raised to 4.0×.

Changed

  • README refreshed for EdgeScale branding (EDGESCALE_* env vars primary), current one-way/fused offload guidance, AppImage + Setup.exe install, nearest + 4K docs.
  • Install script rename: scripts/install-edge-run.sh replaces install-xfsr-run.sh (install-edgerun.sh remains a symlink). Docs and CMake install-edge-run target updated; user-facing copy no longer leads with proprietary FSR branding.
  • Godot 3 GLES (BunnyForest): auto-enable Zink with caps-shrink so the overlay and ...
Read more

EdgeScale 0.11.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 11:33

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[Unreleased]

[0.11.0] — 2026-11-05

Added

  • Distributed GPU Memory Management & Heterogeneous Workload Orchestration:
    • Implemented cost-aware multi-GPU and memory tiering architecture that coordinates workloads across independent physical devices rather than treating disparate physical VRAMs as a single unified device (src/scheduler/gpu_scheduler.hpp, bench/scheduler_test.cpp).
    • Separates the Memory Manager (capacity discovery, heap compatibility, residency tracking, and oversubscription fallback) from the Execution Orchestrator (cost-aware placement scoring across bandwidth, compute throughput, transfer latency, and access frequency).
    • Validated with controlled benchmark matrix demonstrating that offloading transformer layers to secondary compute (e.g. AMD Vega 10 iGPU) delivers +43% higher decode throughput (14.4 t/s) compared to spilling allocations to host system RAM over PCIe (9.6 t/s).
  • VRAM Observability & Cross-Vendor Telemetry Daemon (vram_monitor):
    • Unified multi-GPU telemetry CLI and background daemon (src/vram_monitor/) monitoring NVIDIA dGPU (NVML: VRAM used/free, BAR1, temperature, utilization), AMD iGPU/dGPU (sysfs: mem_info_vram_used, mem_info_gtt_used), and host DDR memory (/proc/meminfo).
    • Implements weighted resource residency scoring ($S_i = \frac{F_i \cdot R_i \cdot C_i}{\text{Size}_{\text{MB}} \cdot (1 + A_i)}$) to drive cost-effective migration policies between VRAM, secondary GPU memory, and system RAM.
    • Supports --once, --json, --daemon [interval], and --score for continuous observability.
  • AI CUDA Memory Virtualization & Oversubscription Engine (ai_vram_test / ManagedLayerEngine):
    • Reusable stream-prefetched memory management engine (src/ai_vram/ai_vram_adapter.hpp, src/ai_vram/ai_vram_test.cu) leveraging CUDA Heterogeneous Memory Management (HMM) and unified memory.
    • Successfully executes workloads exceeding physical GPU capacity (e.g. 5.25 GB across 6 layers on a 4 GB GTX 1650 at 3.03 GB/s streaming throughput) where standard allocations terminate with out-of-memory errors (cudaErrorMemoryAllocation).
  • Controlled Benchmark Matrix Suite (tests/benchmark_matrix.sh):
    • Reproducible benchmark comparing native VRAM baseline ($c=4096$), native driver failure ($c=32768$, VK_ERROR_OUT_OF_DEVICE_MEMORY), EdgeScale virtualized budget ($c=32768$, 40.4 t/s prefill / 9.6 t/s decode), dual-GPU layer split (14.4 t/s decode), and dual-GPU oversubscription (3.6 t/s decode with 901 MB spilled).
  • Automated Local LLM Launcher (scripts/run_local_llm.sh):
    • Wrapper for running large local models (e.g. Qwen 3.5 4.3B GGUF) with large context windows under EdgeScale VRAM virtualization.

Fixed

  • Benchmark Terminal Redirection & Real-Time Token Parsing:
    • Fixed an issue where llama-cli wrote output directly to /dev/tty, bypassing shell redirection and producing N/A token rates in scripted benchmarks. Execution now cleanly detaches via setsid and redirects standard streams.
  • EdgePass Upscaler Mode Logging:
    • Fixed logging in src/edge_pass.cpp where nearest-neighbor mode erroneously logged as quality.

[0.10.0] — 2026-11-04

Added

  • VRAM Capacity Spoofing & Oversubscription Fallback (--spoof-vram [SIZE] / EDGESCALE_SPOOF_VRAM):
    • Intercepts vkGetPhysicalDeviceMemoryProperties and vkGetPhysicalDeviceMemoryProperties2 to report expanded DEVICE_LOCAL VRAM capacity (e.g. 8GB, 12GB, 16GB, or auto).
    • Transparently intercepts VK_EXT_memory_budget (VkPhysicalDeviceMemoryBudgetPropertiesEXT) so modern engines (DXVK / VKD3D-Proton / Unreal) see increased VRAM budget instead of locking out High/Ultra textures.
    • Implements graceful allocation spilling in vkAllocateMemory: when physical local VRAM is exhausted (VK_ERROR_OUT_OF_DEVICE_MEMORY), automatically falls back to allocating over PCIe in system RAM (HOST_VISIBLE) instead of crashing the application.
    • Profile key: spoof_vram=8GB.
  • Supersampling / DSR (4K Render on 1080p Display) (--dsr 4k|1440p|<val> / --render 3840x2160 --output 1920x1080):
    • Enables true downsampling / Virtual Super Resolution (DSR / SSAA) in the Vulkan layer: the game renders internally at 4K (3840×2160) or 1440p, while the swapchain presents at native monitor resolution (e.g. 1080p).
    • Shipped dedicated edgeDownsample compute shader in shaders/edge_pass.comp.glsl: 4-tap staggered bilinear box filter covering up to a 4×4 texel area, combined with optional Contrast-Adaptive Sharpening (CAS) for clean, anti-aliased SSAA without shimmering.
    • Automatic positive mip LOD bias calculation (-log2(scale) = +1.0 at 4K→1080p) to match high-resolution texture sampling to display pixel density and eliminate texture crawling.
    • Profile key: dsr=4k.

Fixed

  • Steam Overlay / Companion iGPU Probe Crash (SIGSEGV in CS2 / Steam titles):
    • Fixed a segmentation fault during companion iGPU initialization in games running with the Steam Overlay and Steam Fossilize layers (libVkLayer_steam_fossilize.so).
    • Corrected layerGIPA in DeviceContext::createLogicalViaLoader: the layer was previously forwarding pfnNextGetInstanceProcAddr into vkLayerCreateDevice rather than its own negotiated vkGetInstanceProcAddr. This prevented the Vulkan loader from identifying EdgeScale in the layer chain and caused the loader to re-enter upstream layers (steamoverlayvulkanlayer.so), invoking an uninitialized function pointer.
    • Added a POSIX signal trap (sigsetjmp / sigaction) around companion device discovery to isolate any third-party layer or driver faults, ensuring seamless fallback to same-GPU upscaling instead of terminating the game.
  • OpenGL / Zink Bidirectional Viewport & Downsampling Remapping:
    • Fixed quarter-screen / bottom-left postage stamp rendering bug in gl/xfsr_gl_shim.c when downsampling or supersampling (DSR 4K / 1440p).
    • Replaced unidirectional render < window assumptions across glViewport, glScissor, glBlitFramebuffer, glfwGetFramebufferSize, SDL_GL_GetDrawableSize, and X11 window queries with bidirectional delta checks (abs(...) > threshold).
    • Allowed downsampling scale factors down to 0.125f (e.g. scale=0.50 for 4K → 1080p SSAA) in target_render_size, load_extents, and shrink_wl_size.

[0.9.0] — 2026-11-02

Added

  • Linux AppImage: portable EdgeScale-*-x86_64.AppImage release artifact (scripts/package-appimage.sh) with offline --install and --uninstall support; primary Linux install path replacing the curl installer.
  • Windows Setup.exe: Inno Setup installer/uninstaller (packaging/windows/edgescale.iss) with icon integration, registry setup, and Add/Remove Programs support; ZIP + .bat scripts remain as fallback.
  • Edge Nearest Neighbor mode (--edge-mode nearest): EdgePass compute shader point-sampling mode dedicated for 2D pixel art games, preserving crisp sprite pixels with zero blur or haloing. F2 hotkey cycles quality → perf → nearest when Edge upscaler is active.
  • Nearest-neighbor upscaler (--upscaler nearest): VK_FILTER_NEAREST blit for 2D pixel art; F3 cycle includes blit → nearest → nis → edge.
  • Manual resolutions: --render WxH for absolute internal size; --output WxH auto-detects the primary display when omitted (supports 4K). Profile keys output= / render=. Adaptive scale max raised to 4.0×.

Changed

  • README refreshed for EdgeScale branding (EDGESCALE_* env vars primary), current one-way/fused offload guidance, AppImage + Setup.exe install, nearest + 4K docs.
  • Install script rename: scripts/install-edge-run.sh replaces install-xfsr-run.sh (install-edgerun.sh remains a symlink). Docs and CMake install-edge-run target updated; user-facing copy no longer leads with proprietary FSR branding.
  • Godot 3 GLES (BunnyForest): auto-enable Zink with caps-shrink so the overlay and live upscaler/preset changes work; GL shim remaps default-framebuffer viewports only (keeps design RTs intact) and does not X11 size-lie when the exe links libX11 (avoids maximize/fullscreen postage-stamps).
  • Godot 4 sowrap + Zink (MMX): live F1 preset recreate is blocked (toast: restart edgerun with --preset); upscaler hotkeys still apply live.

Fixed

  • Cross-device swapchain re-creation & offload safety:
    • Prevented crash (SIGSEGV in mesa/radv) when toggling between offload (iGPU swapchain) and same-GPU (dGPU swapchain) modes by properly tracking owning device and avoiding invalid oldSwapchain handle reuse across physical devices.
    • Guarded F4 offload hotkey in games configured with offload=0 via profile or env var (e.g. D3D12 / VKD3D titles like Resident Evil Village) to avoid accidental runtime presentation lockups.
  • Fullscreen Upscaler Switching:
    • Live upscaler hotkeys (F3 cycle between Edge, NIS, FSR1, Nearest, Blit) now update and run immediately in Fullscreen mode. Previously, xfsr_QueuePresentKHR guarded live switching behind ps->renderW != ps->displayW, which froze upscaler state whenever the title ran at native display resolution.
    • Passes are lazily initialized and resized upon activation, ensuring live hotkey responsiveness regardless of whether scaling or 1:1 post-processing sharpening is in use.
    • Fixed caps_shrink=0 (in-game resolution titles like Resident Evil Village) falsely taking the identity passthrough bypass when entering Fullscreen at lower resolutions due to compositor surface query matching.
  • Zink image not filling the window:
    • Avoid monitor-sized ...
Read more

EdgeScale 0.10.0

Choose a tag to compare

@github-actions github-actions released this 04 Nov 17:52

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[Unreleased]

[0.10.0] — 2026-11-04

Added

  • VRAM Capacity Spoofing & Oversubscription Fallback (--spoof-vram [SIZE] / EDGESCALE_SPOOF_VRAM):
    • Intercepts vkGetPhysicalDeviceMemoryProperties and vkGetPhysicalDeviceMemoryProperties2 to report expanded DEVICE_LOCAL VRAM capacity (e.g. 8GB, 12GB, 16GB, or auto).
    • Transparently intercepts VK_EXT_memory_budget (VkPhysicalDeviceMemoryBudgetPropertiesEXT) so modern engines (DXVK / VKD3D-Proton / Unreal) see increased VRAM budget instead of locking out High/Ultra textures.
    • Implements graceful allocation spilling in vkAllocateMemory: when physical local VRAM is exhausted (VK_ERROR_OUT_OF_DEVICE_MEMORY), automatically falls back to allocating over PCIe in system RAM (HOST_VISIBLE) instead of crashing the application.
    • Profile key: spoof_vram=8GB.
  • Supersampling / DSR (4K Render on 1080p Display) (--dsr 4k|1440p|<val> / --render 3840x2160 --output 1920x1080):
    • Enables true downsampling / Virtual Super Resolution (DSR / SSAA) in the Vulkan layer: the game renders internally at 4K (3840×2160) or 1440p, while the swapchain presents at native monitor resolution (e.g. 1080p).
    • Shipped dedicated edgeDownsample compute shader in shaders/edge_pass.comp.glsl: 4-tap staggered bilinear box filter covering up to a 4×4 texel area, combined with optional Contrast-Adaptive Sharpening (CAS) for clean, anti-aliased SSAA without shimmering.
    • Automatic positive mip LOD bias calculation (-log2(scale) = +1.0 at 4K→1080p) to match high-resolution texture sampling to display pixel density and eliminate texture crawling.
    • Profile key: dsr=4k.

Fixed

  • OpenGL / Zink Bidirectional Viewport & Downsampling Remapping:
    • Fixed quarter-screen / bottom-left postage stamp rendering bug in gl/xfsr_gl_shim.c when downsampling or supersampling (DSR 4K / 1440p).
    • Replaced unidirectional render < window assumptions across glViewport, glScissor, glBlitFramebuffer, glfwGetFramebufferSize, SDL_GL_GetDrawableSize, and X11 window queries with bidirectional delta checks (abs(...) > threshold).
    • Allowed downsampling scale factors down to 0.125f (e.g. scale=0.50 for 4K → 1080p SSAA) in target_render_size, load_extents, and shrink_wl_size.

[0.9.0] — 2026-11-02

Added

  • Linux AppImage: portable EdgeScale-*-x86_64.AppImage release artifact (scripts/package-appimage.sh) with offline --install and --uninstall support; primary Linux install path replacing the curl installer.
  • Windows Setup.exe: Inno Setup installer/uninstaller (packaging/windows/edgescale.iss) with icon integration, registry setup, and Add/Remove Programs support; ZIP + .bat scripts remain as fallback.
  • Edge Nearest Neighbor mode (--edge-mode nearest): EdgePass compute shader point-sampling mode dedicated for 2D pixel art games, preserving crisp sprite pixels with zero blur or haloing. F2 hotkey cycles quality → perf → nearest when Edge upscaler is active.
  • Nearest-neighbor upscaler (--upscaler nearest): VK_FILTER_NEAREST blit for 2D pixel art; F3 cycle includes blit → nearest → nis → edge.
  • Manual resolutions: --render WxH for absolute internal size; --output WxH auto-detects the primary display when omitted (supports 4K). Profile keys output= / render=. Adaptive scale max raised to 4.0×.

Changed

  • README refreshed for EdgeScale branding (EDGESCALE_* env vars primary), current one-way/fused offload guidance, AppImage + Setup.exe install, nearest + 4K docs.
  • Install script rename: scripts/install-edge-run.sh replaces install-xfsr-run.sh (install-edgerun.sh remains a symlink). Docs and CMake install-edge-run target updated; user-facing copy no longer leads with proprietary FSR branding.
  • Godot 3 GLES (BunnyForest): auto-enable Zink with caps-shrink so the overlay and live upscaler/preset changes work; GL shim remaps default-framebuffer viewports only (keeps design RTs intact) and does not X11 size-lie when the exe links libX11 (avoids maximize/fullscreen postage-stamps).
  • Godot 4 sowrap + Zink (MMX): live F1 preset recreate is blocked (toast: restart edgerun with --preset); upscaler hotkeys still apply live.

Fixed

  • Cross-device swapchain re-creation & offload safety:
    • Prevented crash (SIGSEGV in mesa/radv) when toggling between offload (iGPU swapchain) and same-GPU (dGPU swapchain) modes by properly tracking owning device and avoiding invalid oldSwapchain handle reuse across physical devices.
    • Guarded F4 offload hotkey in games configured with offload=0 via profile or env var (e.g. D3D12 / VKD3D titles like Resident Evil Village) to avoid accidental runtime presentation lockups.
  • Fullscreen Upscaler Switching:
    • Live upscaler hotkeys (F3 cycle between Edge, NIS, FSR1, Nearest, Blit) now update and run immediately in Fullscreen mode. Previously, xfsr_QueuePresentKHR guarded live switching behind ps->renderW != ps->displayW, which froze upscaler state whenever the title ran at native display resolution.
    • Passes are lazily initialized and resized upon activation, ensuring live hotkey responsiveness regardless of whether scaling or 1:1 post-processing sharpening is in use.
    • Fixed caps_shrink=0 (in-game resolution titles like Resident Evil Village) falsely taking the identity passthrough bypass when entering Fullscreen at lower resolutions due to compositor surface query matching.
  • Zink image not filling the window:
    • Avoid monitor-sized DISPLAY_EXTENT unless --output / --render / gamescope is set; CreateSwapchain ignores mismatched monitor seeds for windowed Zink.
    • GL shim proportionally remaps letterboxed viewports/scissors/blits (Godot keep-aspect), keeps SDL/GLFW window and drawable size queries in sync at render resolution, and preserves GL_NEAREST on remapped blits when --upscaler nearest.
  • BunnyForest maximize/fullscreen stamp: X11 size-lie desynced Godot from WSI after resize; lie auto-off for libX11-linked titles; drawable-size queries stay real so stretch tracks the window.

[0.8.2] — 2026-11-01

Added

  • Windows Native Vulkan Support:
    • Added native Windows x86_64 implicit Vulkan layer support (VkLayer_XFSR.dll) exporting vkGetInstanceProcAddr, vkGetDeviceProcAddr, and vkNegotiateLoaderLayerInterfaceVersion.
    • In-game Win32 hotkey polling using GetAsyncKeyState (F1 preset, F2 RCAS/edge-mode, F3 upscaler cycle, F10 pin).
    • Win32 memory alignment and platform abstractions (_aligned_malloc, _putenv_s, %LOCALAPPDATA%\EdgeScale shader resolution, and %TEMP% control files).
    • Windows batch build & installation scripts (scripts/build-windows.bat, scripts/install-windows.bat, and scripts/uninstall-windows.bat).
    • Standalone Linux-to-Windows cross-compilation pipeline (scripts/build-windows-cross.sh).
    • Automated Windows packaging and release artifact generation in GitHub Actions (.github/workflows/release.yml).
  • Technical Documentation & Branding:
    • Comprehensive architectural deep-dive and comparison with Lossless Scaling and Magpie (docs/ARCHITECTURE_AND_COMPARISON.md).
    • Integrated official project logo into README and updated all project links to https://github.com/jersobh/edge.

[0.8.1] — 2026-11-01

Changed

  • Rebranded to EdgeScale (edgerun):
    • The project is now EdgeScale, putting the custom Edge reconstruction engine and in-process scaling pipeline front and center.
    • The primary CLI runner is now edgerun (e.g. edgerun --preset performance %command%).
    • Full backward compatibility: xfsr-run is maintained as a direct alias/symlink, and all XFSR_* environment variables and configs (~/.config/xfsr/profiles.conf) continue to work alongside new EDGESCALE_* / ~/.config/edgescale/ paths.

Fixed

  • CS2 crash on startup with iGPU offload (NVIDIA Reflex): CS2 enables Reflex (VK_NV_low_latency2) and passed the opaque one-way swapchain handle straight to the NVIDIA ICD (causing a libnvidia-glcore SIGSEGV). The layer now intercepts vkSetLatencySleepModeNV, vkLatencySleepNV (signals the sleep timeline semaphore), vkSetLatencyMarkerNV, vkGetLatencyTimingsNV, vkGetRefreshCycleDurationGOOGLE and vkSetLocalDimmingAMD, stubbing them for proxy handles and forwarding real ones.
  • --preset ignored at startup: when caps-shrink is active, an engine's initial swapchain size (e.g. CoD4 starting windowed at 1280x720 on a 1080p display) no longer overwrites the chosen preset/scale back to quality. Ratio-derived scale is only used with XFSR_CAPS_SHRINK=0.

[0.8.0] — 2026-10-31

Fixed

  • Edge upscaler colors: edge output now matches FSR1 / NIS / blit.
    • Direct-to-swapchain stores no longer double-swizzle BGRA swapchains (the storage view already uses the swapchain format), which swapped red and blue and gave a blue tint.
    • The contrast S-curve and saturation boost ("beautify") is now opt-in with XFSR_EDGE_BEAUTIFY=1, so by default edge leaves colors unchanged.
  • Freeze on quality/scale change with edge: FrameTransfer::resetPipeline waits on its own slot fences (2 s timeout) instead of vkDeviceWaitIdle on the app device.

[0.7.0] — 2026-10-31

Added

  • Always-On Dual-GPU iGPU Offload:
    • Offload to iGPU enabled by default across all titles (XFSR_OFFLOAD=1), routing rendering on discrete GPU (dGPU) a...
Read more

EdgeScale 0.9.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 20:38

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[Unreleased]

[0.9.0] — 2026-11-02

Added

  • Linux AppImage: portable EdgeScale-*-x86_64.AppImage release artifact (scripts/package-appimage.sh) with offline --install and --uninstall support; primary Linux install path replacing the curl installer.
  • Windows Setup.exe: Inno Setup installer/uninstaller (packaging/windows/edgescale.iss) with icon integration, registry setup, and Add/Remove Programs support; ZIP + .bat scripts remain as fallback.
  • Edge Nearest Neighbor mode (--edge-mode nearest): EdgePass compute shader point-sampling mode dedicated for 2D pixel art games, preserving crisp sprite pixels with zero blur or haloing. F2 hotkey cycles quality → perf → nearest when Edge upscaler is active.
  • Nearest-neighbor upscaler (--upscaler nearest): VK_FILTER_NEAREST blit for 2D pixel art; F3 cycle includes blit → nearest → nis → edge.
  • Manual resolutions: --render WxH for absolute internal size; --output WxH auto-detects the primary display when omitted (supports 4K). Profile keys output= / render=. Adaptive scale max raised to 4.0×.

Changed

  • README refreshed for EdgeScale branding (EDGESCALE_* env vars primary), current one-way/fused offload guidance, AppImage + Setup.exe install, nearest + 4K docs.
  • Install script rename: scripts/install-edge-run.sh replaces install-xfsr-run.sh (install-edgerun.sh remains a symlink). Docs and CMake install-edge-run target updated; user-facing copy no longer leads with proprietary FSR branding.
  • Godot 3 GLES (BunnyForest): auto-enable Zink with caps-shrink so the overlay and live upscaler/preset changes work; GL shim remaps default-framebuffer viewports only (keeps design RTs intact) and does not X11 size-lie when the exe links libX11 (avoids maximize/fullscreen postage-stamps).
  • Godot 4 sowrap + Zink (MMX): live F1 preset recreate is blocked (toast: restart edgerun with --preset); upscaler hotkeys still apply live.

Fixed

  • Cross-device swapchain re-creation & offload safety:
    • Prevented crash (SIGSEGV in mesa/radv) when toggling between offload (iGPU swapchain) and same-GPU (dGPU swapchain) modes by properly tracking owning device and avoiding invalid oldSwapchain handle reuse across physical devices.
    • Guarded F4 offload hotkey in games configured with offload=0 via profile or env var (e.g. D3D12 / VKD3D titles like Resident Evil Village) to avoid accidental runtime presentation lockups.
  • Fullscreen Upscaler Switching:
    • Live upscaler hotkeys (F3 cycle between Edge, NIS, FSR1, Nearest, Blit) now update and run immediately in Fullscreen mode. Previously, xfsr_QueuePresentKHR guarded live switching behind ps->renderW != ps->displayW, which froze upscaler state whenever the title ran at native display resolution.
    • Passes are lazily initialized and resized upon activation, ensuring live hotkey responsiveness regardless of whether scaling or 1:1 post-processing sharpening is in use.
    • Fixed caps_shrink=0 (in-game resolution titles like Resident Evil Village) falsely taking the identity passthrough bypass when entering Fullscreen at lower resolutions due to compositor surface query matching.
  • Zink image not filling the window:
    • Avoid monitor-sized DISPLAY_EXTENT unless --output / --render / gamescope is set; CreateSwapchain ignores mismatched monitor seeds for windowed Zink.
    • GL shim proportionally remaps letterboxed viewports/scissors/blits (Godot keep-aspect), keeps SDL/GLFW window and drawable size queries in sync at render resolution, and preserves GL_NEAREST on remapped blits when --upscaler nearest.
  • BunnyForest maximize/fullscreen stamp: X11 size-lie desynced Godot from WSI after resize; lie auto-off for libX11-linked titles; drawable-size queries stay real so stretch tracks the window.

[0.8.2] — 2026-11-01

Added

  • Windows Native Vulkan Support:
    • Added native Windows x86_64 implicit Vulkan layer support (VkLayer_XFSR.dll) exporting vkGetInstanceProcAddr, vkGetDeviceProcAddr, and vkNegotiateLoaderLayerInterfaceVersion.
    • In-game Win32 hotkey polling using GetAsyncKeyState (F1 preset, F2 RCAS/edge-mode, F3 upscaler cycle, F10 pin).
    • Win32 memory alignment and platform abstractions (_aligned_malloc, _putenv_s, %LOCALAPPDATA%\EdgeScale shader resolution, and %TEMP% control files).
    • Windows batch build & installation scripts (scripts/build-windows.bat, scripts/install-windows.bat, and scripts/uninstall-windows.bat).
    • Standalone Linux-to-Windows cross-compilation pipeline (scripts/build-windows-cross.sh).
    • Automated Windows packaging and release artifact generation in GitHub Actions (.github/workflows/release.yml).
  • Technical Documentation & Branding:
    • Comprehensive architectural deep-dive and comparison with Lossless Scaling and Magpie (docs/ARCHITECTURE_AND_COMPARISON.md).
    • Integrated official project logo into README and updated all project links to https://github.com/jersobh/edge.

[0.8.1] — 2026-11-01

Changed

  • Rebranded to EdgeScale (edgerun):
    • The project is now EdgeScale, putting the custom Edge reconstruction engine and in-process scaling pipeline front and center.
    • The primary CLI runner is now edgerun (e.g. edgerun --preset performance %command%).
    • Full backward compatibility: xfsr-run is maintained as a direct alias/symlink, and all XFSR_* environment variables and configs (~/.config/xfsr/profiles.conf) continue to work alongside new EDGESCALE_* / ~/.config/edgescale/ paths.

Fixed

  • CS2 crash on startup with iGPU offload (NVIDIA Reflex): CS2 enables Reflex (VK_NV_low_latency2) and passed the opaque one-way swapchain handle straight to the NVIDIA ICD (causing a libnvidia-glcore SIGSEGV). The layer now intercepts vkSetLatencySleepModeNV, vkLatencySleepNV (signals the sleep timeline semaphore), vkSetLatencyMarkerNV, vkGetLatencyTimingsNV, vkGetRefreshCycleDurationGOOGLE and vkSetLocalDimmingAMD, stubbing them for proxy handles and forwarding real ones.
  • --preset ignored at startup: when caps-shrink is active, an engine's initial swapchain size (e.g. CoD4 starting windowed at 1280x720 on a 1080p display) no longer overwrites the chosen preset/scale back to quality. Ratio-derived scale is only used with XFSR_CAPS_SHRINK=0.

[0.8.0] — 2026-10-31

Fixed

  • Edge upscaler colors: edge output now matches FSR1 / NIS / blit.
    • Direct-to-swapchain stores no longer double-swizzle BGRA swapchains (the storage view already uses the swapchain format), which swapped red and blue and gave a blue tint.
    • The contrast S-curve and saturation boost ("beautify") is now opt-in with XFSR_EDGE_BEAUTIFY=1, so by default edge leaves colors unchanged.
  • Freeze on quality/scale change with edge: FrameTransfer::resetPipeline waits on its own slot fences (2 s timeout) instead of vkDeviceWaitIdle on the app device.

[0.7.0] — 2026-10-31

Added

  • Always-On Dual-GPU iGPU Offload:
    • Offload to iGPU enabled by default across all titles (XFSR_OFFLOAD=1), routing rendering on discrete GPU (dGPU) and post-processing/upscaling/presentation on integrated GPU (iGPU).
    • One-way direct WSI presentation on iGPU supported under Mesa Zink (OpenGL) using monotonic opaque swapchain handles and triple-buffered WSI (minImageCount >= 3) to eliminate acquire stalls.
    • Fused asynchronous round-trip offload pipeline (OffloadRoundTrip::submit / submitBlit) across all spatial upscalers (EdgePass, FsrPass, NisPass, and Blit), replacing the synchronous multi-copy CPU blocking fallback.
    • Offload resilience: never falls back to single-GPU or disables offload when render and display extents match (1:1 stubborn titles) or when one-way WSI fails; seamlessly transitions to round-trip iGPU offload.
    • Overlay PCIe optimization: overlay texture buffer upload is gated on text changes, eliminating redundant 460 KB host-to-device transfers every frame.
  • Universal Vulkan and OpenGL Compatibility:
    • Automatic OpenGL and Zink detection in scripts/xfsr-run across both Linux ELF binaries and Windows PE executables (opengl32.dll, glew32.dll, OpenGL entry points).
    • Seamless Proton / Wine WOW64 support: automatically exports PROTON_USE_WOW64=1 for 32-bit Windows games so the 64-bit libVkLayer_XFSR.so Vulkan layer attaches correctly.
    • Extended OpenGL interceptor (gl/xfsr_gl_shim.c) with glBlitFramebuffer, SDL_GL_GetDrawableSize, and SDL_GetWindowSizeInPixels hooks so FBO-blitting engines and SDL games properly scale to the shrunk swapchain.
    • Surface capability shrinking fixes (applyCapsShrink): dynamically queries live surface display extents, advertises scaled sizes in currentExtent and maxImageExtent, and keeps minImageExtent un-raised to preserve in-game low-resolution choices (e.g. Resident Evil Village).
  • Beautifying High-Performance Edge Upscaler for Weaker Hardware:
    • Re-engineered edge_pass.comp.glsl with zero shared memory (LDS) and zero barriers, achieving 100% GPU occupancy on weaker discrete cards (GTX 1650, Pascal/Turing), integrated APUs, and handhelds.
    • Sub-Pixel Edge Tangent Reconstruction: Traces continuous edge normals and blends along edge tangents to eliminate jagged staircases on geometry silhouettes in low rendering resolutions.
    • **...
Read more

EdgeScale 0.8.3

Choose a tag to compare

@github-actions github-actions released this 02 Nov 13:06

Changelog

All notable changes to EdgeScale (edgerun / legacy xfsr-run) are documented here.

Format based on Keep a Changelog.
Versioning follows Semantic Versioning.

[Unreleased]

[0.8.3] — 2026-11-02

Added

  • Linux AppImage: portable EdgeScale-*-x86_64.AppImage release artifact (scripts/package-appimage.sh); primary Linux install path (curl installer demoted).
  • Windows Setup.exe: Inno Setup installer/uninstaller (packaging/windows/edgescale.iss) with Add/Remove Programs support; ZIP + .bat scripts remain as fallback.
  • Nearest-neighbor upscaler (--upscaler nearest): VK_FILTER_NEAREST blit for 2D pixel art; F3 cycle includes blit → nearest → nis → edge.
  • Manual resolutions: --render WxH for absolute internal size; --output WxH auto-detects the primary display when omitted (supports 4K). Profile keys output= / render=. Adaptive scale max raised to 4.0×.

Changed

  • README refreshed for EdgeScale branding (EDGESCALE_* env vars primary), current one-way/fused offload guidance, AppImage + Setup.exe install, nearest + 4K docs.
  • Install script rename: scripts/install-edge-run.sh replaces install-xfsr-run.sh (install-edgerun.sh remains a symlink). Docs and CMake install-edge-run target updated; user-facing copy no longer leads with proprietary FSR branding.
  • Godot 3 GLES (BunnyForest): auto-enable Zink with caps-shrink so the overlay and live upscaler/preset changes work; GL shim remaps default-framebuffer viewports only (keeps design RTs intact) and does not X11 size-lie when the exe links libX11 (avoids maximize/fullscreen postage-stamps).
  • Godot 4 sowrap + Zink (MMX): live F1 preset recreate is blocked (toast: restart edgerun with --preset); upscaler hotkeys still apply live.

Fixed

  • Zink image not filling the window:
    • Avoid monitor-sized DISPLAY_EXTENT unless --output / --render / gamescope is set; CreateSwapchain ignores mismatched monitor seeds for windowed Zink.
    • GL shim proportionally remaps letterboxed viewports/scissors/blits (Godot keep-aspect), keeps SDL/GLFW window and drawable size queries in sync at render resolution, and preserves GL_NEAREST on remapped blits when --upscaler nearest.
  • BunnyForest maximize/fullscreen stamp: X11 size-lie desynced Godot from WSI after resize; lie auto-off for libX11-linked titles; drawable-size queries stay real so stretch tracks the window.

[0.8.2] — 2026-11-01

Added

  • Windows Native Vulkan Support:
    • Added native Windows x86_64 implicit Vulkan layer support (VkLayer_XFSR.dll) exporting vkGetInstanceProcAddr, vkGetDeviceProcAddr, and vkNegotiateLoaderLayerInterfaceVersion.
    • In-game Win32 hotkey polling using GetAsyncKeyState (F1 preset, F2 RCAS/edge-mode, F3 upscaler cycle, F10 pin).
    • Win32 memory alignment and platform abstractions (_aligned_malloc, _putenv_s, %LOCALAPPDATA%\EdgeScale shader resolution, and %TEMP% control files).
    • Windows batch build & installation scripts (scripts/build-windows.bat, scripts/install-windows.bat, and scripts/uninstall-windows.bat).
    • Standalone Linux-to-Windows cross-compilation pipeline (scripts/build-windows-cross.sh).
    • Automated Windows packaging and release artifact generation in GitHub Actions (.github/workflows/release.yml).
  • Technical Documentation & Branding:
    • Comprehensive architectural deep-dive and comparison with Lossless Scaling and Magpie (docs/ARCHITECTURE_AND_COMPARISON.md).
    • Integrated official project logo into README and updated all project links to https://github.com/jersobh/edge.

[0.8.1] — 2026-11-01

Changed

  • Rebranded to EdgeScale (edgerun):
    • The project is now EdgeScale, putting the custom Edge reconstruction engine and in-process scaling pipeline front and center.
    • The primary CLI runner is now edgerun (e.g. edgerun --preset performance %command%).
    • Full backward compatibility: xfsr-run is maintained as a direct alias/symlink, and all XFSR_* environment variables and configs (~/.config/xfsr/profiles.conf) continue to work alongside new EDGESCALE_* / ~/.config/edgescale/ paths.

Fixed

  • CS2 crash on startup with iGPU offload (NVIDIA Reflex): CS2 enables Reflex (VK_NV_low_latency2) and passed the opaque one-way swapchain handle straight to the NVIDIA ICD (causing a libnvidia-glcore SIGSEGV). The layer now intercepts vkSetLatencySleepModeNV, vkLatencySleepNV (signals the sleep timeline semaphore), vkSetLatencyMarkerNV, vkGetLatencyTimingsNV, vkGetRefreshCycleDurationGOOGLE and vkSetLocalDimmingAMD, stubbing them for proxy handles and forwarding real ones.
  • --preset ignored at startup: when caps-shrink is active, an engine's initial swapchain size (e.g. CoD4 starting windowed at 1280x720 on a 1080p display) no longer overwrites the chosen preset/scale back to quality. Ratio-derived scale is only used with XFSR_CAPS_SHRINK=0.

[0.8.0] — 2026-10-31

Fixed

  • Edge upscaler colors: edge output now matches FSR1 / NIS / blit.
    • Direct-to-swapchain stores no longer double-swizzle BGRA swapchains (the storage view already uses the swapchain format), which swapped red and blue and gave a blue tint.
    • The contrast S-curve and saturation boost ("beautify") is now opt-in with XFSR_EDGE_BEAUTIFY=1, so by default edge leaves colors unchanged.
  • Freeze on quality/scale change with edge: FrameTransfer::resetPipeline waits on its own slot fences (2 s timeout) instead of vkDeviceWaitIdle on the app device.

[0.7.0] — 2026-10-31

Added

  • Always-On Dual-GPU iGPU Offload:
    • Offload to iGPU enabled by default across all titles (XFSR_OFFLOAD=1), routing rendering on discrete GPU (dGPU) and post-processing/upscaling/presentation on integrated GPU (iGPU).
    • One-way direct WSI presentation on iGPU supported under Mesa Zink (OpenGL) using monotonic opaque swapchain handles and triple-buffered WSI (minImageCount >= 3) to eliminate acquire stalls.
    • Fused asynchronous round-trip offload pipeline (OffloadRoundTrip::submit / submitBlit) across all spatial upscalers (EdgePass, FsrPass, NisPass, and Blit), replacing the synchronous multi-copy CPU blocking fallback.
    • Offload resilience: never falls back to single-GPU or disables offload when render and display extents match (1:1 stubborn titles) or when one-way WSI fails; seamlessly transitions to round-trip iGPU offload.
    • Overlay PCIe optimization: overlay texture buffer upload is gated on text changes, eliminating redundant 460 KB host-to-device transfers every frame.
  • Universal Vulkan and OpenGL Compatibility:
    • Automatic OpenGL and Zink detection in scripts/xfsr-run across both Linux ELF binaries and Windows PE executables (opengl32.dll, glew32.dll, OpenGL entry points).
    • Seamless Proton / Wine WOW64 support: automatically exports PROTON_USE_WOW64=1 for 32-bit Windows games so the 64-bit libVkLayer_XFSR.so Vulkan layer attaches correctly.
    • Extended OpenGL interceptor (gl/xfsr_gl_shim.c) with glBlitFramebuffer, SDL_GL_GetDrawableSize, and SDL_GetWindowSizeInPixels hooks so FBO-blitting engines and SDL games properly scale to the shrunk swapchain.
    • Surface capability shrinking fixes (applyCapsShrink): dynamically queries live surface display extents, advertises scaled sizes in currentExtent and maxImageExtent, and keeps minImageExtent un-raised to preserve in-game low-resolution choices (e.g. Resident Evil Village).
  • Beautifying High-Performance Edge Upscaler for Weaker Hardware:
    • Re-engineered edge_pass.comp.glsl with zero shared memory (LDS) and zero barriers, achieving 100% GPU occupancy on weaker discrete cards (GTX 1650, Pascal/Turing), integrated APUs, and handhelds.
    • Sub-Pixel Edge Tangent Reconstruction: Traces continuous edge normals and blends along edge tangents to eliminate jagged staircases on geometry silhouettes in low rendering resolutions.
    • Diagonal-Adaptive Edge Reconstruction: Smooths 45° and 135° diagonal boundaries without blur or moiré artifacts.
    • Anti-Ringing Catmull-Rom Texture Filter: Enforces strict local bounding-box clamps to eradicate dark and bright halos around text, UI elements, foliage, and specular highlights.
    • Integrated Contrast-Adaptive Sharpening (CAS): Recovers crisp micro-detail in textures while suppressing noise on flat gradients.
    • Clarity & Vibrancy Beautification: Applies subtle S-curve contrast and selective saturation recovery to lift muddy, washed-out low-resolution frames into vibrant, rich visuals.
    • Fast Perf Mode (Edge-Lite): Ultra-low latency 5-tap diagonal reconstruction with under 0.15 ms execution time for maximum framerates.
    • Defaulted EdgePass to the high-fidelity quality mode with default sharpness of 0.60.
  • In-Game Resolution Indicator:
    • HUD and status outputs now label sub-1.35x non-standard aspect or internal resolutions as in-game (e.g. in-game 1.11x) rather than misleadingly bucketing them into the 1.5x quality preset label.
  • Native Game Profiles:
    • Call of Duty 4 ([app:7940], D3D9 iw3mp.exe / iw3sp.exe): direct layer upscaling with gamescope=0, caps_shrink=1, upscaler=edge, overlay=1.
    • Street Fighter 30th Anniversary Collection ([app:586200], OpenGL) & Mega Man Legacy Collection ([app:363440], 32-bit D3D11 Proteus.exe): gamescope=1 with native Wayland backend.
    • Resident Evil Village ([app:1196590]): preset=quality, upscaler=edge, edge_mode=quality, `edge_sharpnes...
Read more