summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2024-12-30 11:57:55 +0100
committervaxerski <vaxry@vaxry.net>2024-12-30 11:58:35 +0100
commit8c14c2a5f472cf3d361d3cbb90ee7d2d455aae08 (patch)
tree7c464daa3c804f9da644fb1a162c7301236d5bb2 /src
parentcb211d83f68542e9fbf7567d57bdf528286cbf7e (diff)
ctm: disable fade animation by default on nvidia
Fixes #8891, the nvidia driver dies when we spam CTM too much.
Diffstat (limited to 'src')
-rw-r--r--src/config/ConfigDescriptions.hpp18
-rw-r--r--src/config/ConfigManager.cpp1
-rw-r--r--src/protocols/CTMControl.cpp14
-rw-r--r--src/protocols/CTMControl.hpp1
4 files changed, 34 insertions, 0 deletions
diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp
index e1c9cb46..17657983 100644
--- a/src/config/ConfigDescriptions.hpp
+++ b/src/config/ConfigDescriptions.hpp
@@ -1289,6 +1289,24 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
.type = CONFIG_OPTION_BOOL,
.data = SConfigOptionDescription::SBoolData{false},
},
+ SConfigOptionDescription{
+ .value = "render:expand_undersized_textures",
+ .description = "Whether to expand textures that have not yet resized to be larger, or to just stretch them instead.",
+ .type = CONFIG_OPTION_BOOL,
+ .data = SConfigOptionDescription::SBoolData{true},
+ },
+ SConfigOptionDescription{
+ .value = "render:xp_mode",
+ .description = "Disable back buffer and bottom layer rendering.",
+ .type = CONFIG_OPTION_BOOL,
+ .data = SConfigOptionDescription::SBoolData{true},
+ },
+ SConfigOptionDescription{
+ .value = "render:ctm_animation",
+ .description = "Whether to enable a fade animation for CTM changes (hyprsunset). 2 means 'auto' (Yes on everything but Nvidia).",
+ .type = CONFIG_OPTION_INT,
+ .data = SConfigOptionDescription::SRangeData{2, 0, 2},
+ },
/*
* cursor:
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 0b8e68f6..67df5bf4 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -614,6 +614,7 @@ CConfigManager::CConfigManager() {
m_pConfig->addConfigValue("render:direct_scanout", Hyprlang::INT{0});
m_pConfig->addConfigValue("render:expand_undersized_textures", Hyprlang::INT{1});
m_pConfig->addConfigValue("render:xp_mode", Hyprlang::INT{0});
+ m_pConfig->addConfigValue("render:ctm_animation", Hyprlang::INT{2});
m_pConfig->addConfigValue("ecosystem:no_update_news", Hyprlang::INT{0});
diff --git a/src/protocols/CTMControl.cpp b/src/protocols/CTMControl.cpp
index 42c84e8f..250c6326 100644
--- a/src/protocols/CTMControl.cpp
+++ b/src/protocols/CTMControl.cpp
@@ -1,6 +1,8 @@
#include "CTMControl.hpp"
#include "../Compositor.hpp"
+#include "../render/Renderer.hpp"
#include "core/Output.hpp"
+#include "../config/ConfigValue.hpp"
CHyprlandCTMControlResource::CHyprlandCTMControlResource(SP<CHyprlandCtmControlManagerV1> resource_) : resource(resource_) {
if (!good())
@@ -81,12 +83,24 @@ void CHyprlandCTMControlProtocol::destroyResource(CHyprlandCTMControlResource* r
std::erase_if(m_vManagers, [&](const auto& other) { return other.get() == res; });
}
+bool CHyprlandCTMControlProtocol::isCTMAnimationEnabled() {
+ static auto PENABLEANIM = CConfigValue<Hyprlang::INT>("render:ctm_animation");
+
+ if (*PENABLEANIM == 2)
+ return !g_pHyprRenderer->isNvidia();
+ return *PENABLEANIM;
+}
+
CHyprlandCTMControlProtocol::SCTMData::SCTMData() {
progress.create(g_pConfigManager->getAnimationPropertyConfig("__internal_fadeCTM"), AVARDAMAGE_NONE);
progress.setValueAndWarp(0.F);
}
void CHyprlandCTMControlProtocol::setCTM(PHLMONITOR monitor, const Mat3x3& ctm) {
+ if (!isCTMAnimationEnabled()) {
+ monitor->setCTM(ctm);
+ return;
+ }
std::erase_if(m_mCTMDatas, [](const auto& el) { return !el.first; });
diff --git a/src/protocols/CTMControl.hpp b/src/protocols/CTMControl.hpp
index 51820f20..dea2c258 100644
--- a/src/protocols/CTMControl.hpp
+++ b/src/protocols/CTMControl.hpp
@@ -34,6 +34,7 @@ class CHyprlandCTMControlProtocol : public IWaylandProtocol {
void destroyResource(CHyprlandCTMControlResource* resource);
void setCTM(PHLMONITOR monitor, const Mat3x3& ctm);
+ bool isCTMAnimationEnabled();
//
std::vector<SP<CHyprlandCTMControlResource>> m_vManagers;