Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Plasma
KWin
Commits
907cf72b
Commit
907cf72b
authored
Feb 25, 2022
by
Xaver Hugl
Browse files
backends/drm: only update modes if actually necessary
This prevents some unneeded modesets
parent
72d9711e
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/backends/drm/drm_gpu.cpp
View file @
907cf72b
...
...
@@ -263,9 +263,7 @@ bool DrmGpu::updateOutputs()
conn
->
updateProperties
();
}
if
(
conn
->
isConnected
())
{
if
(
auto
output
=
findOutput
(
conn
->
id
()))
{
output
->
updateModes
();
}
else
if
(
!
findLeaseOutput
(
conn
->
id
()))
{
if
(
conn
->
isNonDesktop
()
?
!
findLeaseOutput
(
conn
->
id
())
:
!
findOutput
(
conn
->
id
()))
{
qCDebug
(
KWIN_DRM
,
"New %soutput on GPU %s: %s"
,
conn
->
isNonDesktop
()
?
"non-desktop "
:
""
,
qPrintable
(
m_devNode
),
qPrintable
(
conn
->
modelName
()));
m_pipelines
<<
conn
->
pipeline
();
if
(
conn
->
isNonDesktop
())
{
...
...
src/backends/drm/drm_object_connector.cpp
View file @
907cf72b
...
...
@@ -13,6 +13,7 @@
#include
"logging.h"
#include
"drm_pipeline.h"
#include
"drm_object_crtc.h"
#include
"drm_output.h"
#include
<main.h>
// frameworks
...
...
@@ -286,11 +287,19 @@ bool DrmConnector::needsModeset() const
void
DrmConnector
::
updateModes
()
{
m_modes
.
clear
();
// reload modes
for
(
int
i
=
0
;
i
<
m_conn
->
count_modes
;
i
++
)
{
m_modes
.
append
(
QSharedPointer
<
DrmConnectorMode
>::
create
(
this
,
m_conn
->
modes
[
i
]));
bool
equal
=
m_conn
->
count_modes
==
m_modes
.
count
();
for
(
int
i
=
0
;
equal
&&
i
<
m_conn
->
count_modes
;
i
++
)
{
equal
&=
checkIfEqual
(
m_modes
[
i
]
->
nativeMode
(),
&
m_conn
->
modes
[
i
]);
}
if
(
!
equal
)
{
// reload modes
m_modes
.
clear
();
for
(
int
i
=
0
;
i
<
m_conn
->
count_modes
;
i
++
)
{
m_modes
.
append
(
QSharedPointer
<
DrmConnectorMode
>::
create
(
this
,
m_conn
->
modes
[
i
]));
}
if
(
const
auto
output
=
dynamic_cast
<
DrmOutput
*>
(
m_pipeline
->
displayDevice
()))
{
output
->
updateModes
();
}
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment