mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 02:51:10 +00:00
With BL_VKBRIDGE_CEF_ANGLE=vulkan the CEF GPU process stopped crashing but Chromium still composited in software (gpu_compositing: disabled_software, Steam "Disabling GPU acceleration: Disabled/RuntimeDetect", VizCompositorThread at a full core). The GPU report shows why: "eglCreateWindowSurface failed with error EGL_BAD_CONFIG". ANGLE's Vulkan backend on X11 gives every EGL config the root window's visual; Chromium's X11 surface asks for a config whose EGL_NATIVE_VISUAL_ID is the ARGB visual whenever a compositing manager owns _NET_WM_CM_S0 (gamescope does), finds none and passes a null config. bl_webhelper_layout() now adds +Vulkan +VulkanFromANGLE +DefaultANGLEVulkan for ANGLE on Vulkan, so Skia composites through an xcb swapchain on ANGLE's Vulkan device and no EGL window surface is needed. BL_VKBRIDGE_CEF_VULKAN=0 leaves it off; unset BL_VKBRIDGE_CEF_ANGLE still means Steam's stock layout.
49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
import os
|
|
import re
|
|
import subprocess
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
SESSION = Path(__file__).resolve().parents[1] / "linuxfs/overlay/usr/local/bin/droiddeck-session"
|
|
KEYS = ("BL_VKBRIDGE_WEBHELPER_ARGS", "BL_VKBRIDGE_CEF_ANGLE", "BL_VKBRIDGE_CEF_VULKAN")
|
|
|
|
|
|
def layout_function():
|
|
match = re.search(r"^bl_webhelper_layout\(\) \{\n.*?^\}\n", SESSION.read_text(), re.M | re.S)
|
|
return match.group(0) if match else None
|
|
|
|
|
|
class WebhelperLayoutTest(unittest.TestCase):
|
|
def layout(self, **settings):
|
|
function = layout_function()
|
|
self.assertIsNotNone(function, "droiddeck-session lacks bl_webhelper_layout()")
|
|
env = {k: v for k, v in os.environ.items() if k not in KEYS}
|
|
env.update(settings)
|
|
return subprocess.run(["bash", "-c", "set -u\n" + function + "bl_webhelper_layout\n"], env=env,
|
|
capture_output=True, text=True, check=True).stdout.strip()
|
|
|
|
def test_unset_keeps_steams_own_layout(self):
|
|
self.assertEqual(self.layout(), "stock")
|
|
|
|
def test_angle_on_vulkan_brings_chromiums_vulkan_compositing(self):
|
|
self.assertEqual(self.layout(BL_VKBRIDGE_CEF_ANGLE="vulkan"),
|
|
"--use-gl=angle --use-angle=vulkan +Vulkan +VulkanFromANGLE +DefaultANGLEVulkan")
|
|
|
|
def test_vulkan_compositing_can_be_left_off(self):
|
|
self.assertEqual(self.layout(BL_VKBRIDGE_CEF_ANGLE="vulkan", BL_VKBRIDGE_CEF_VULKAN="0"),
|
|
"--use-gl=angle --use-angle=vulkan")
|
|
|
|
def test_other_angle_backends_get_only_the_angle_switches(self):
|
|
self.assertEqual(self.layout(BL_VKBRIDGE_CEF_ANGLE="gl"), "--use-gl=angle --use-angle=gl")
|
|
|
|
def test_explicit_layout_wins(self):
|
|
self.assertEqual(self.layout(BL_VKBRIDGE_CEF_ANGLE="vulkan", BL_VKBRIDGE_WEBHELPER_ARGS="--x +Y"),
|
|
"--x +Y")
|
|
|
|
def test_the_steam_block_uses_it(self):
|
|
self.assertIn("BL_WEBHELPER_ARGS=$(bl_webhelper_layout)", SESSION.read_text())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|