backends/drm: fix modifier check
If we force a linear modifier, the modifier list can't match up with the display, which causes the surface to be recreated every frame. CCBUG: 462625
This commit is contained in:
parent
ca7f7a42c8
commit
3d9ccaf742
2 changed files with 4 additions and 2 deletions
|
@ -216,7 +216,7 @@ bool EglGbmLayerSurface::doesSurfaceFit(const Surface &surface, const QSize &siz
|
||||||
return surface.gbmSurface
|
return surface.gbmSurface
|
||||||
&& surface.gbmSurface->size() == size
|
&& surface.gbmSurface->size() == size
|
||||||
&& formats.contains(surface.gbmSurface->format())
|
&& formats.contains(surface.gbmSurface->format())
|
||||||
&& (surface.gbmSurface->modifiers().empty() || surface.gbmSurface->modifiers() == formats[surface.gbmSurface->format()]);
|
&& (surface.forceLinear || surface.gbmSurface->modifiers().empty() || surface.gbmSurface->modifiers() == formats[surface.gbmSurface->format()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<EglGbmLayerSurface::Surface> EglGbmLayerSurface::createSurface(const QSize &size, const QMap<uint32_t, QVector<uint64_t>> &formats) const
|
std::optional<EglGbmLayerSurface::Surface> EglGbmLayerSurface::createSurface(const QSize &size, const QMap<uint32_t, QVector<uint64_t>> &formats) const
|
||||||
|
@ -279,7 +279,8 @@ std::optional<EglGbmLayerSurface::Surface> EglGbmLayerSurface::createSurface(con
|
||||||
{
|
{
|
||||||
Surface ret;
|
Surface ret;
|
||||||
ret.importMode = importMode;
|
ret.importMode = importMode;
|
||||||
ret.gbmSurface = createGbmSurface(size, format, modifiers, importMode == MultiGpuImportMode::DumbBuffer || m_bufferTarget != BufferTarget::Normal);
|
ret.forceLinear = importMode == MultiGpuImportMode::DumbBuffer || m_bufferTarget != BufferTarget::Normal;
|
||||||
|
ret.gbmSurface = createGbmSurface(size, format, modifiers, ret.forceLinear);
|
||||||
if (!ret.gbmSurface) {
|
if (!ret.gbmSurface) {
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@ private:
|
||||||
MultiGpuImportMode importMode;
|
MultiGpuImportMode importMode;
|
||||||
std::shared_ptr<GbmBuffer> currentBuffer;
|
std::shared_ptr<GbmBuffer> currentBuffer;
|
||||||
std::shared_ptr<DrmFramebuffer> currentFramebuffer;
|
std::shared_ptr<DrmFramebuffer> currentFramebuffer;
|
||||||
|
bool forceLinear = false;
|
||||||
};
|
};
|
||||||
bool checkSurface(const QSize &size, const QMap<uint32_t, QVector<uint64_t>> &formats);
|
bool checkSurface(const QSize &size, const QMap<uint32_t, QVector<uint64_t>> &formats);
|
||||||
bool doesSurfaceFit(const Surface &surface, const QSize &size, const QMap<uint32_t, QVector<uint64_t>> &formats) const;
|
bool doesSurfaceFit(const Surface &surface, const QSize &size, const QMap<uint32_t, QVector<uint64_t>> &formats) const;
|
||||||
|
|
Loading…
Reference in a new issue