Skip to content

Commit

Permalink
ctm: disable fade animation by default on nvidia
Browse files Browse the repository at this point in the history
Fixes #8891, the nvidia driver dies when we spam CTM too much.
  • Loading branch information
vaxerski committed Dec 30, 2024
1 parent cb211d8 commit 8c14c2a
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/config/ConfigDescriptions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
1 change: 1 addition & 0 deletions src/config/ConfigManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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});

Expand Down
14 changes: 14 additions & 0 deletions src/protocols/CTMControl.cpp
Original file line number Diff line number Diff line change
@@ -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())
Expand Down Expand Up @@ -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; });

Expand Down
1 change: 1 addition & 0 deletions src/protocols/CTMControl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 8c14c2a

Please sign in to comment.