diff --git a/plugins/platforms/hwcomposer/egl_hwcomposer_backend.cpp b/plugins/platforms/hwcomposer/egl_hwcomposer_backend.cpp --- a/plugins/platforms/hwcomposer/egl_hwcomposer_backend.cpp +++ b/plugins/platforms/hwcomposer/egl_hwcomposer_backend.cpp @@ -130,6 +130,10 @@ qCWarning(KWIN_HWCOMPOSER) << "Error occurred while creating context " << error; return false; } + + QSize overall = m_backend->size(); + glViewport(0, 0, overall.width(), overall.height()); + return true; } diff --git a/plugins/platforms/hwcomposer/hwcomposer_backend.h b/plugins/platforms/hwcomposer/hwcomposer_backend.h --- a/plugins/platforms/hwcomposer/hwcomposer_backend.h +++ b/plugins/platforms/hwcomposer/hwcomposer_backend.h @@ -79,11 +79,11 @@ Outputs outputs() const override; Outputs enabledOutputs() const override; - QSize size() const { - return screenSize(); - } + QSize size() const; QSize screenSize() const override; + int scale() const; + HwcomposerWindow *createSurface(); hwc_composer_device_1_t *device() const { diff --git a/plugins/platforms/hwcomposer/hwcomposer_backend.cpp b/plugins/platforms/hwcomposer/hwcomposer_backend.cpp --- a/plugins/platforms/hwcomposer/hwcomposer_backend.cpp +++ b/plugins/platforms/hwcomposer/hwcomposer_backend.cpp @@ -253,14 +253,30 @@ setReady(true); } -QSize HwcomposerBackend::screenSize() const +QSize HwcomposerBackend::size() const { if (m_output) { return m_output->pixelSize(); } return QSize(); } +QSize HwcomposerBackend::screenSize() const +{ + if (m_output) { + return m_output->pixelSize() / m_output->scale(); + } + return QSize(); +} + +int HwcomposerBackend::scale() const + { + if (m_output) { + return m_output->scale(); + } + return 1; +} + void HwcomposerBackend::initLights() { hw_module_t *lightsModule = nullptr; @@ -511,6 +527,11 @@ setInternal(true); setEnabled(true); setDpmsSupported(true); + + int scale = qEnvironmentVariableIntValue("KWIN_HWCOMPOSER_SCALE"); + if (scale > 1) { + setScale(scale); + } setWaylandMode(m_pixelSize, mode.refreshRate); }