From ceec1943ffad717ff99cd72c60922738e318a445 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Thu, 3 Jul 2025 12:37:33 +0200 Subject: [PATCH] compositor: dont send around int max values we know the buffersize use it instead of int max values that can potentially cause math issues and slowdowns. minor improvement to glmark2 aswell. --- src/protocols/core/Compositor.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 371da0937..9f3a54076 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -96,7 +96,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : m_resource(re if (m_pending.bufferSize != m_current.bufferSize) { m_pending.updated.bits.damage = true; - m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.bufferDamage = CBox{{}, m_pending.bufferSize}; } }); @@ -175,7 +175,12 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : m_resource(re }); m_resource->setDamageBuffer([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { m_pending.updated.bits.damage = true; - m_pending.bufferDamage.add(CBox{x, y, w, h}); + const auto damageSize = Vector2D(w, h); + + if (damageSize > m_pending.bufferSize) + m_pending.bufferDamage.add(CBox{{x, y}, m_pending.bufferSize}); + else + m_pending.bufferDamage.add(CBox{{x, y}, damageSize}); }); m_resource->setSetBufferScale([this](CWlSurface* r, int32_t scale) { @@ -186,7 +191,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : m_resource(re m_pending.updated.bits.damage = true; m_pending.scale = scale; - m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.bufferDamage = CBox{{}, m_pending.bufferSize}; }); m_resource->setSetBufferTransform([this](CWlSurface* r, uint32_t tr) { @@ -197,14 +202,14 @@ CWLSurfaceResource::CWLSurfaceResource(SP resource_) : m_resource(re m_pending.updated.bits.damage = true; m_pending.transform = (wl_output_transform)tr; - m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.bufferDamage = CBox{{}, m_pending.bufferSize}; }); m_resource->setSetInputRegion([this](CWlSurface* r, wl_resource* region) { m_pending.updated.bits.input = true; if (!region) { - m_pending.input = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.input = CBox{{}, m_pending.bufferSize}; return; } @@ -437,8 +442,8 @@ void CWLSurfaceResource::map() { frame(Time::steadyNow()); - m_current.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; - m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_current.bufferDamage = CBox{{}, m_current.bufferSize}; + m_pending.bufferDamage = CBox{{}, m_pending.bufferSize}; } void CWLSurfaceResource::unmap() {