diff options
| author | Ikalco <73481042+ikalco@users.noreply.github.com> | 2024-08-31 08:07:52 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-31 15:07:52 +0200 |
| commit | 838ed87d6ffae0dbdc8a3ecaac2c8be006f6d053 (patch) | |
| tree | d7d37c307663aef82efa7340378d5763542e74cd /src/helpers/Monitor.cpp | |
| parent | 76b82fdde7d3f38cb70db0bec3318a7fb6c27a0c (diff) | |
renderer: minor direct scanout fixes (#7594)
Diffstat (limited to 'src/helpers/Monitor.cpp')
| -rw-r--r-- | src/helpers/Monitor.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 685009fd..5b01d651 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -832,6 +832,21 @@ bool CMonitor::attemptDirectScanout() { // FIXME: make sure the buffer actually follows the available scanout dmabuf formats // and comes from the appropriate device. This may implode on multi-gpu!! + + const auto params = PSURFACE->current.buffer->buffer->dmabuf(); + // scanout buffer isn't dmabuf, so no scanout + if (!params.success) + return false; + + // entering into scanout, so save monitor format + if (lastScanout.expired()) + prevDrmFormat = drmFormat; + + if (drmFormat != params.format) { + output->state->setFormat(params.format); + drmFormat = params.format; + } + output->state->setBuffer(PSURFACE->current.buffer->buffer.lock()); output->state->setPresentationMode(tearingState.activelyTearing ? Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_IMMEDIATE : Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_VSYNC); |
