mirror of
https://github.com/hyprwm/Hyprland
synced 2025-01-10 16:49:48 +01:00
core: use cpu-buffer hw cursors on nvidia by default
This commit is contained in:
parent
ad64726f5d
commit
b320bc2dc6
2 changed files with 11 additions and 9 deletions
|
@ -578,7 +578,7 @@ CConfigManager::CConfigManager() {
|
||||||
m_pConfig->addConfigValue("opengl:nvidia_anti_flicker", Hyprlang::INT{1});
|
m_pConfig->addConfigValue("opengl:nvidia_anti_flicker", Hyprlang::INT{1});
|
||||||
m_pConfig->addConfigValue("opengl:force_introspection", Hyprlang::INT{1}); // TODO: remove this. I don't think it does us any good to disable intro.
|
m_pConfig->addConfigValue("opengl:force_introspection", Hyprlang::INT{1}); // TODO: remove this. I don't think it does us any good to disable intro.
|
||||||
|
|
||||||
m_pConfig->addConfigValue("cursor:no_hardware_cursors", Hyprlang::INT{2});
|
m_pConfig->addConfigValue("cursor:no_hardware_cursors", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("cursor:no_break_fs_vrr", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:no_break_fs_vrr", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("cursor:min_refresh_rate", Hyprlang::INT{24});
|
m_pConfig->addConfigValue("cursor:min_refresh_rate", Hyprlang::INT{24});
|
||||||
m_pConfig->addConfigValue("cursor:hotspot_padding", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:hotspot_padding", Hyprlang::INT{0});
|
||||||
|
@ -593,7 +593,7 @@ CConfigManager::CConfigManager() {
|
||||||
m_pConfig->addConfigValue("cursor:sync_gsettings_theme", Hyprlang::INT{1});
|
m_pConfig->addConfigValue("cursor:sync_gsettings_theme", Hyprlang::INT{1});
|
||||||
m_pConfig->addConfigValue("cursor:hide_on_key_press", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:hide_on_key_press", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("cursor:hide_on_touch", Hyprlang::INT{1});
|
m_pConfig->addConfigValue("cursor:hide_on_touch", Hyprlang::INT{1});
|
||||||
m_pConfig->addConfigValue("cursor:use_cpu_buffer", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:use_cpu_buffer", Hyprlang::INT{2});
|
||||||
m_pConfig->addConfigValue("cursor:warp_back_after_non_mouse_input", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("cursor:warp_back_after_non_mouse_input", Hyprlang::INT{0});
|
||||||
|
|
||||||
m_pConfig->addConfigValue("autogenerated", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("autogenerated", Hyprlang::INT{0});
|
||||||
|
@ -2741,7 +2741,7 @@ bool CConfigManager::shouldUseSoftwareCursors() {
|
||||||
switch (*PNOHW) {
|
switch (*PNOHW) {
|
||||||
case 0: return false;
|
case 0: return false;
|
||||||
case 1: return true;
|
case 1: return true;
|
||||||
default: return g_pHyprRenderer->isNvidia();
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -376,7 +376,9 @@ SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
|
||||||
auto maxSize = state->monitor->output->cursorPlaneSize();
|
auto maxSize = state->monitor->output->cursorPlaneSize();
|
||||||
auto const& cursorSize = currentCursorImage.size;
|
auto const& cursorSize = currentCursorImage.size;
|
||||||
|
|
||||||
static auto PDUMB = CConfigValue<Hyprlang::INT>("cursor:use_cpu_buffer");
|
static auto PCPUBUFFER = CConfigValue<Hyprlang::INT>("cursor:use_cpu_buffer");
|
||||||
|
|
||||||
|
const bool shouldUseCpuBuffer = *PCPUBUFFER == 1 || (*PCPUBUFFER != 0 && g_pHyprRenderer->isNvidia());
|
||||||
|
|
||||||
if (maxSize == Vector2D{})
|
if (maxSize == Vector2D{})
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -390,12 +392,12 @@ SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
|
||||||
maxSize = cursorSize;
|
maxSize = cursorSize;
|
||||||
|
|
||||||
if (!state->monitor->cursorSwapchain || maxSize != state->monitor->cursorSwapchain->currentOptions().size ||
|
if (!state->monitor->cursorSwapchain || maxSize != state->monitor->cursorSwapchain->currentOptions().size ||
|
||||||
*PDUMB != (state->monitor->cursorSwapchain->getAllocator()->type() != Aquamarine::AQ_ALLOCATOR_TYPE_GBM)) {
|
shouldUseCpuBuffer != (state->monitor->cursorSwapchain->getAllocator()->type() != Aquamarine::AQ_ALLOCATOR_TYPE_GBM)) {
|
||||||
|
|
||||||
if (!state->monitor->cursorSwapchain || *PDUMB != (state->monitor->cursorSwapchain->getAllocator()->type() != Aquamarine::AQ_ALLOCATOR_TYPE_GBM)) {
|
if (!state->monitor->cursorSwapchain || shouldUseCpuBuffer != (state->monitor->cursorSwapchain->getAllocator()->type() != Aquamarine::AQ_ALLOCATOR_TYPE_GBM)) {
|
||||||
|
|
||||||
auto allocator = state->monitor->output->getBackend()->preferredAllocator();
|
auto allocator = state->monitor->output->getBackend()->preferredAllocator();
|
||||||
if (*PDUMB) {
|
if (shouldUseCpuBuffer) {
|
||||||
for (const auto& a : state->monitor->output->getBackend()->getAllocators()) {
|
for (const auto& a : state->monitor->output->getBackend()->getAllocators()) {
|
||||||
if (a->type() == Aquamarine::AQ_ALLOCATOR_TYPE_DRM_DUMB) {
|
if (a->type() == Aquamarine::AQ_ALLOCATOR_TYPE_DRM_DUMB) {
|
||||||
allocator = a;
|
allocator = a;
|
||||||
|
@ -415,7 +417,7 @@ SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
|
||||||
options.multigpu = state->monitor->output->getBackend()->preferredAllocator()->drmFD() != g_pCompositor->m_iDRMFD;
|
options.multigpu = state->monitor->output->getBackend()->preferredAllocator()->drmFD() != g_pCompositor->m_iDRMFD;
|
||||||
// We do not set the format (unless shm). If it's unset (DRM_FORMAT_INVALID) then the swapchain will pick for us,
|
// We do not set the format (unless shm). 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.
|
// but if it's set, we don't wanna change it.
|
||||||
if (*PDUMB)
|
if (shouldUseCpuBuffer)
|
||||||
options.format = DRM_FORMAT_ARGB8888;
|
options.format = DRM_FORMAT_ARGB8888;
|
||||||
|
|
||||||
if (!state->monitor->cursorSwapchain->reconfigure(options)) {
|
if (!state->monitor->cursorSwapchain->reconfigure(options)) {
|
||||||
|
@ -438,7 +440,7 @@ SP<Aquamarine::IBuffer> CPointerManager::renderHWCursorBuffer(SP<CPointerManager
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*PDUMB) {
|
if (shouldUseCpuBuffer) {
|
||||||
// get the texture data if available.
|
// get the texture data if available.
|
||||||
auto texData = texture->dataCopy();
|
auto texData = texture->dataCopy();
|
||||||
if (texData.empty()) {
|
if (texData.empty()) {
|
||||||
|
|
Loading…
Reference in a new issue