backends/drm: fix flicker with rotation on mobile
When we use a shadow buffer, we always render to the whole surface - setting the damage region is incorrect and invokes undefined behavior. On the Lima driver this caused flickering on screen rotation. To fix this, don't set a damage region when we use a shadow buffer, which is effectively setting the damage region to the full surface
This commit is contained in:
parent
3d3fcd7ab4
commit
29625218d3
1 changed files with 4 additions and 0 deletions
|
@ -105,6 +105,10 @@ OutputLayerBeginFrameInfo EglGbmLayerSurface::startRendering(const QSize &buffer
|
|||
|
||||
void EglGbmLayerSurface::aboutToStartPainting(DrmOutput *output, const QRegion &damagedRegion)
|
||||
{
|
||||
if (m_shadowBuffer) {
|
||||
// with a shadow buffer, we always fully damage the surface
|
||||
return;
|
||||
}
|
||||
if (m_gbmSurface && m_gbmSurface->bufferAge() > 0 && !damagedRegion.isEmpty() && m_eglBackend->supportsPartialUpdate()) {
|
||||
QVector<EGLint> rects = output->regionToRects(damagedRegion);
|
||||
const bool correct = eglSetDamageRegionKHR(m_eglBackend->eglDisplay(), m_gbmSurface->eglSurface(), rects.data(), rects.count() / 4);
|
||||
|
|
Loading…
Reference in a new issue