File 0001-backends-drm-Log-connector-CRTC-matching-steps.patch of Package failed_kwin6
From 6a9041012201287c4b9dc5ee0d8c61621ed98fa1 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Thu, 27 Feb 2025 16:52:33 +0200
Subject: [PATCH 1/2] backends/drm: Log connector<->CRTC matching steps
This can be useful for debugging purposes.
(cherry picked from commit 7f77db993236eca3f30f9bc844ce6e6425bf8472)
(cherry picked from commit bb263454548f65796e249adcf374aaebdc5e2db6)
---
src/backends/drm/drm_gpu.cpp | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/backends/drm/drm_gpu.cpp b/src/backends/drm/drm_gpu.cpp
index 9291b5296d..de0fd7e212 100644
--- a/src/backends/drm/drm_gpu.cpp
+++ b/src/backends/drm/drm_gpu.cpp
@@ -345,22 +345,23 @@ void DrmGpu::removeOutputs()
DrmPipeline::Error DrmGpu::checkCrtcAssignment(QList<DrmConnector *> connectors, const QList<DrmCrtc *> &crtcs)
{
+ qCDebug(KWIN_DRM) << "Attempting to match" << connectors << "with" << crtcs;
if (connectors.isEmpty() || crtcs.isEmpty()) {
- if (m_pipelines.isEmpty()) {
- // nothing to do
- return DrmPipeline::Error::None;
- }
if (!connectors.empty()) {
// we have no crtcs left to drive the remaining connectors
+ qCDebug(KWIN_DRM) << "Ran out of CRTCs";
return DrmPipeline::Error::InvalidArguments;
}
- return testPipelines();
+ const auto result = testPipelines();
+ qCDebug(KWIN_DRM) << "Testing CRTC assignment..." << (result == DrmPipeline::Error::None ? "passed" : "failed");
+ return result;
}
auto connector = connectors.takeFirst();
auto pipeline = connector->pipeline();
if (!pipeline->enabled() || !connector->isConnected()) {
// disabled pipelines don't need CRTCs
pipeline->setCrtc(nullptr);
+ qCDebug(KWIN_DRM) << "Unassigning CRTC from connector" << connector->id();
return checkCrtcAssignment(connectors, crtcs);
}
DrmCrtc *currentCrtc = nullptr;
@@ -375,6 +376,7 @@ DrmPipeline::Error DrmGpu::checkCrtcAssignment(QList<DrmConnector *> connectors,
auto crtcsLeft = crtcs;
crtcsLeft.removeOne(currentCrtc);
pipeline->setCrtc(currentCrtc);
+ qCDebug(KWIN_DRM) << "Assigning CRTC" << currentCrtc->id() << "to connector" << connector->id();
do {
DrmPipeline::Error err = checkCrtcAssignment(connectors, crtcsLeft);
if (err == DrmPipeline::Error::None || err == DrmPipeline::Error::NoPermission || err == DrmPipeline::Error::FramePending) {
@@ -388,6 +390,7 @@ DrmPipeline::Error DrmGpu::checkCrtcAssignment(QList<DrmConnector *> connectors,
auto crtcsLeft = crtcs;
crtcsLeft.removeOne(crtc);
pipeline->setCrtc(crtc);
+ qCDebug(KWIN_DRM) << "Assigning CRTC" << crtc->id() << "to connector" << connector->id();
do {
DrmPipeline::Error err = checkCrtcAssignment(connectors, crtcsLeft);
if (err == DrmPipeline::Error::None || err == DrmPipeline::Error::NoPermission || err == DrmPipeline::Error::FramePending) {
@@ -447,6 +450,10 @@ DrmPipeline::Error DrmGpu::testPendingConfiguration()
DrmPipeline::Error DrmGpu::testPipelines()
{
+ if (m_pipelines.isEmpty()) {
+ // nothing to do
+ return DrmPipeline::Error::None;
+ }
QList<DrmPipeline *> inactivePipelines;
std::copy_if(m_pipelines.constBegin(), m_pipelines.constEnd(), std::back_inserter(inactivePipelines), [](const auto pipeline) {
return pipeline->enabled() && !pipeline->active();
--
2.48.1