aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/drm/drm.c8
-rw-r--r--backend/drm/legacy.c15
2 files changed, 15 insertions, 8 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 403e5d7c..daf6b379 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -419,14 +419,6 @@ static bool drm_connector_set_pending_fb(struct wlr_drm_connector *conn,
}
break;
case WLR_OUTPUT_STATE_BUFFER_SCANOUT:;
- /* Legacy never gets to have nice things. But I doubt this would ever work,
- * and there is no reliable way to try, without risking messing up the
- * modesetting state. */
- if (drm->iface == &legacy_iface) {
- wlr_drm_conn_log(conn, WLR_DEBUG,
- "Cannot use direct scan-out with legacy KMS API");
- return false;
- }
if (!drm_fb_import(&plane->pending_fb, drm, state->buffer,
&crtc->primary->formats)) {
wlr_drm_conn_log(conn, WLR_DEBUG,
diff --git a/backend/drm/legacy.c b/backend/drm/legacy.c
index ca23bb1c..7c18b3e3 100644
--- a/backend/drm/legacy.c
+++ b/backend/drm/legacy.c
@@ -8,9 +8,24 @@
#include "backend/drm/iface.h"
#include "backend/drm/util.h"
+static bool legacy_crtc_test(struct wlr_drm_connector *conn,
+ const struct wlr_output_state *state) {
+ if ((state->committed & WLR_OUTPUT_STATE_BUFFER) &&
+ state->buffer_type == WLR_OUTPUT_STATE_BUFFER_SCANOUT) {
+ wlr_drm_conn_log(conn, WLR_DEBUG,
+ "Cannot use direct scan-out with legacy KMS API");
+ return false;
+ }
+
+ return true;
+}
+
static bool legacy_crtc_commit(struct wlr_drm_backend *drm,
struct wlr_drm_connector *conn, const struct wlr_output_state *state,
uint32_t flags, bool test_only) {
+ if (!legacy_crtc_test(conn, state)) {
+ return false;
+ }
if (test_only) {
return true;
}