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
d2d00492
Commit
d2d00492
authored
Apr 20, 2022
by
Xaver Hugl
Browse files
backends/drm: fix some problems with rotation
source and buffer rotation / sizes were used wrongly in a few places
parent
c3954eab
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/backends/drm/drm_lease_egl_gbm_layer.cpp
View file @
d2d00492
...
...
@@ -30,7 +30,7 @@ DrmLeaseEglGbmLayer::DrmLeaseEglGbmLayer(EglGbmBackend *backend, DrmPipeline *pi
QSharedPointer
<
DrmBuffer
>
DrmLeaseEglGbmLayer
::
testBuffer
()
{
const
auto
mods
=
m_pipeline
->
formats
().
value
(
DRM_FORMAT_XRGB8888
);
const
auto
size
=
m_pipeline
->
source
Size
();
const
auto
size
=
m_pipeline
->
buffer
Size
();
if
(
!
m_buffer
||
m_buffer
->
size
()
!=
size
||
!
(
mods
.
isEmpty
()
||
mods
.
contains
(
m_buffer
->
modifier
())))
{
gbm_bo
*
newBo
;
if
(
mods
.
isEmpty
())
{
...
...
src/backends/drm/drm_pipeline.cpp
View file @
d2d00492
...
...
@@ -368,15 +368,6 @@ QSize DrmPipeline::bufferSize() const
return
modeSize
;
}
QSize
DrmPipeline
::
sourceSize
()
const
{
const
auto
modeSize
=
pending
.
mode
->
size
();
if
(
pending
.
sourceTransformation
&
(
DrmPlane
::
Transformation
::
Rotate90
|
DrmPlane
::
Transformation
::
Rotate270
))
{
return
modeSize
.
transposed
();
}
return
modeSize
;
}
bool
DrmPipeline
::
isCursorVisible
()
const
{
const
QRect
mode
=
QRect
(
QPoint
(),
pending
.
mode
->
size
());
...
...
src/backends/drm/drm_pipeline.h
View file @
d2d00492
...
...
@@ -79,10 +79,6 @@ public:
bool
modesetPresentPending
()
const
;
void
resetModesetPresentPending
();
void
printDebugInfo
()
const
;
/**
* which size buffers for rendering should have
*/
QSize
sourceSize
()
const
;
/**
* what size buffers submitted to this pipeline should have
*/
...
...
src/backends/drm/drm_qpainter_layer.cpp
View file @
d2d00492
...
...
@@ -33,7 +33,7 @@ DrmQPainterLayer::DrmQPainterLayer(DrmQPainterBackend *backend, DrmPipeline *pip
OutputLayerBeginFrameInfo
DrmQPainterLayer
::
beginFrame
()
{
if
(
!
doesSwapchainFit
())
{
m_swapchain
=
QSharedPointer
<
DumbSwapchain
>::
create
(
m_pipeline
->
gpu
(),
m_pipeline
->
source
Size
(),
DRM_FORMAT_XRGB8888
);
m_swapchain
=
QSharedPointer
<
DumbSwapchain
>::
create
(
m_pipeline
->
gpu
(),
m_pipeline
->
buffer
Size
(),
DRM_FORMAT_XRGB8888
);
}
QRegion
needsRepaint
;
if
(
!
m_swapchain
->
acquireBuffer
(
&
needsRepaint
))
{
...
...
@@ -55,14 +55,14 @@ void DrmQPainterLayer::endFrame(const QRegion &renderedRegion, const QRegion &da
QSharedPointer
<
DrmBuffer
>
DrmQPainterLayer
::
testBuffer
()
{
if
(
!
doesSwapchainFit
())
{
m_swapchain
=
QSharedPointer
<
DumbSwapchain
>::
create
(
m_pipeline
->
gpu
(),
m_pipeline
->
source
Size
(),
DRM_FORMAT_XRGB8888
);
m_swapchain
=
QSharedPointer
<
DumbSwapchain
>::
create
(
m_pipeline
->
gpu
(),
m_pipeline
->
buffer
Size
(),
DRM_FORMAT_XRGB8888
);
}
return
m_swapchain
->
currentBuffer
();
}
bool
DrmQPainterLayer
::
doesSwapchainFit
()
const
{
return
m_swapchain
&&
m_swapchain
->
size
()
==
m_pipeline
->
source
Size
();
return
m_swapchain
&&
m_swapchain
->
size
()
==
m_pipeline
->
buffer
Size
();
}
QSharedPointer
<
DrmBuffer
>
DrmQPainterLayer
::
currentBuffer
()
const
...
...
@@ -112,7 +112,7 @@ DrmLeaseQPainterLayer::DrmLeaseQPainterLayer(DrmQPainterBackend *backend, DrmPip
QSharedPointer
<
DrmBuffer
>
DrmLeaseQPainterLayer
::
testBuffer
()
{
const
auto
size
=
m_pipeline
->
source
Size
();
const
auto
size
=
m_pipeline
->
buffer
Size
();
if
(
!
m_buffer
||
m_buffer
->
size
()
!=
size
)
{
m_buffer
=
QSharedPointer
<
DrmDumbBuffer
>::
create
(
m_pipeline
->
gpu
(),
size
,
DRM_FORMAT_XRGB8888
);
}
...
...
src/backends/drm/egl_gbm_layer.cpp
View file @
d2d00492
...
...
@@ -64,7 +64,7 @@ void EglGbmLayer::aboutToStartPainting(const QRegion &damagedRegion)
void
EglGbmLayer
::
endFrame
(
const
QRegion
&
renderedRegion
,
const
QRegion
&
damagedRegion
)
{
Q_UNUSED
(
renderedRegion
)
const
auto
ret
=
m_surface
.
endRendering
(
m_pipeline
->
pending
.
buffer
Transformation
,
damagedRegion
);
const
auto
ret
=
m_surface
.
endRendering
(
m_pipeline
->
pending
.
source
Transformation
,
damagedRegion
);
if
(
ret
.
has_value
())
{
std
::
tie
(
m_currentBuffer
,
m_currentDamage
)
=
ret
.
value
();
}
...
...
@@ -77,7 +77,7 @@ QRegion EglGbmLayer::currentDamage() const
QSharedPointer
<
DrmBuffer
>
EglGbmLayer
::
testBuffer
()
{
if
(
!
m_surface
.
doesSurfaceFit
(
m_pipeline
->
source
Size
(),
m_pipeline
->
formats
()))
{
if
(
!
m_surface
.
doesSurfaceFit
(
m_pipeline
->
buffer
Size
(),
m_pipeline
->
formats
()))
{
renderTestBuffer
();
}
return
m_currentBuffer
;
...
...
@@ -115,7 +115,7 @@ bool EglGbmLayer::scanout(SurfaceItem *surfaceItem)
}
const
auto
surface
=
item
->
surface
();
const
auto
buffer
=
qobject_cast
<
KWaylandServer
::
LinuxDmaBufV1ClientBuffer
*>
(
surface
->
buffer
());
if
(
!
buffer
||
buffer
->
planes
().
isEmpty
()
||
buffer
->
size
()
!=
m_pipeline
->
source
Size
())
{
if
(
!
buffer
||
buffer
->
planes
().
isEmpty
()
||
buffer
->
size
()
!=
m_pipeline
->
buffer
Size
())
{
return
false
;
}
...
...
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