From 40fed3a72df623d0bb68953cf1cfa40a2e174038 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 9 Jul 2024 14:11:07 +0200 Subject: [PATCH] stuff for aq alloc split --- src/config/ConfigManager.cpp | 2 +- src/helpers/Monitor.cpp | 9 +++++---- src/managers/PointerManager.cpp | 16 +++++++++------- src/managers/eventLoop/EventLoopManager.hpp | 2 +- src/protocols/Viewporter.hpp | 2 +- src/render/OpenGL.cpp | 11 +++++++++-- src/render/Renderer.hpp | 16 ++++++++-------- 7 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index f901ad94..8fed720a 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -553,7 +553,7 @@ CConfigManager::CConfigManager() { m_pConfig->addConfigValue("group:groupbar:col.inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66777700"}); m_pConfig->addConfigValue("group:groupbar:col.locked_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ff5500"}); m_pConfig->addConfigValue("group:groupbar:col.locked_inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66775500"}); - + m_pConfig->addConfigValue("experimental:explicit_sync", Hyprlang::INT{0}); // devices diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 7edf3b4b..a65492df 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -811,9 +811,10 @@ bool CMonitorState::updateSwapchain() { const auto& MODE = STATE.mode ? STATE.mode : STATE.customMode; if (!MODE) return true; - options.format = STATE.drmFormat; - options.scanout = true; - options.length = 2; - options.size = MODE->pixelSize; + options.format = STATE.drmFormat; + options.scanout = true; + options.length = 2; + options.size = MODE->pixelSize; + options.multigpu = m_pOwner->output->swapchain->getAllocator()->drmFD() != g_pCompositor->m_iDRMFD; return m_pOwner->output->swapchain->reconfigure(options); } diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 02712b8b..99d1412f 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -367,13 +367,14 @@ SP CPointerManager::renderHWCursorBuffer(SPmonitor->cursorSwapchain || maxSize != state->monitor->cursorSwapchain->currentOptions().size) { if (!state->monitor->cursorSwapchain) - state->monitor->cursorSwapchain = Aquamarine::CSwapchain::create(g_pCompositor->m_pAqBackend->allocator, state->monitor->output->getBackend()); + state->monitor->cursorSwapchain = Aquamarine::CSwapchain::create(state->monitor->output->getBackend()->preferredAllocator(), state->monitor->output->getBackend()); - auto options = state->monitor->cursorSwapchain->currentOptions(); - options.size = maxSize; - options.length = 2; - options.scanout = true; - options.cursor = true; + auto options = state->monitor->cursorSwapchain->currentOptions(); + options.size = maxSize; + options.length = 2; + options.scanout = true; + options.cursor = true; + options.multigpu = state->monitor->output->getBackend()->preferredAllocator()->drmFD() != g_pCompositor->m_iDRMFD; // We do not set the format. If it's unset (DRM_FORMAT_INVALID) then the swapchain will pick for us, // but if it's set, we don't wanna change it. @@ -455,7 +456,8 @@ void CPointerManager::renderSoftwareCursorsFor(SP pMonitor, timespec* Vector2D CPointerManager::getCursorPosForMonitor(SP pMonitor) { return CBox{pointerPos - pMonitor->vecPosition, {0, 0}} - .transform(wlTransformToHyprutils(invertTransform(pMonitor->transform)), pMonitor->vecTransformedSize.x / pMonitor->scale, pMonitor->vecTransformedSize.y / pMonitor->scale) + .transform(wlTransformToHyprutils(invertTransform(pMonitor->transform)), pMonitor->vecTransformedSize.x / pMonitor->scale, + pMonitor->vecTransformedSize.y / pMonitor->scale) .pos() * pMonitor->scale; } diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp index 6f3e8529..39d8bbeb 100644 --- a/src/managers/eventLoop/EventLoopManager.hpp +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -48,7 +48,7 @@ class CEventLoopManager { int timerfd = -1; } m_sTimers; - SIdleData m_sIdle; + SIdleData m_sIdle; std::vector> aqPollFDs; friend class CSyncTimeline; diff --git a/src/protocols/Viewporter.hpp b/src/protocols/Viewporter.hpp index fd0da88e..3c2a4eef 100644 --- a/src/protocols/Viewporter.hpp +++ b/src/protocols/Viewporter.hpp @@ -21,7 +21,7 @@ class CViewportResource { SP resource; struct { - CHyprSignalListener surfacePrecommit; + CHyprSignalListener surfacePrecommit; } listeners; }; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 901a1c2f..38916854 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -521,7 +521,8 @@ GLuint CHyprOpenGLImpl::compileShader(const GLuint& type, std::string src, bool } bool CHyprOpenGLImpl::passRequiresIntrospection(CMonitor* pMonitor) { - // passes requiring introspection are the ones that need to render blur. + // passes requiring introspection are the ones that need to render blur, + // or when we are rendering to a multigpu target static auto PBLUR = CConfigValue("decoration:blur:enabled"); static auto PXRAY = CConfigValue("decoration:blur:xray"); @@ -529,6 +530,12 @@ bool CHyprOpenGLImpl::passRequiresIntrospection(CMonitor* pMonitor) { static auto PBLURSPECIAL = CConfigValue("decoration:blur:special"); static auto PBLURPOPUPS = CConfigValue("decoration:blur:popups"); + // multigpu destination + if (pMonitor->output->swapchain->getAllocator()->drmFD() != g_pCompositor->m_iDRMFD) { + Debug::log(TRACE, "passRequiresIntrospection: multigpu target, forcing"); + return true; + } + if (m_RenderData.mouseZoomFactor != 1.0 || g_pHyprRenderer->m_bCrashingInProgress) return true; @@ -2752,7 +2759,7 @@ SP CHyprOpenGLImpl::createEGLSync(int fenceFD) { return nullptr; } - auto eglsync = SP(new CEGLSync); + auto eglsync = SP(new CEGLSync); eglsync->sync = sync; return eglsync; } diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 6450651e..2eb80d83 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -88,16 +88,16 @@ class CHyprRenderer { DAMAGETRACKINGMODES damageTrackingModeFromStr(const std::string&); - bool attemptDirectScanout(CMonitor*); - void setSurfaceScanoutMode(SP surface, SP monitor); // nullptr monitor resets - void initiateManualCrash(); + bool attemptDirectScanout(CMonitor*); + void setSurfaceScanoutMode(SP surface, SP monitor); // nullptr monitor resets + void initiateManualCrash(); - bool m_bCrashingInProgress = false; - float m_fCrashingDistort = 0.5f; - wl_event_source* m_pCrashingLoop = nullptr; - wl_event_source* m_pCursorTicker = nullptr; + bool m_bCrashingInProgress = false; + float m_fCrashingDistort = 0.5f; + wl_event_source* m_pCrashingLoop = nullptr; + wl_event_source* m_pCursorTicker = nullptr; - CTimer m_tRenderTimer; + CTimer m_tRenderTimer; std::vector> explicitPresented;