Save any value of the kernel non-desktop property in the xf86Output
structure to avoid non-desktop outputs in the default configuration.

v2: Support X server 1.13

Signed-off-by: Keith Packard <kei...@keithp.com>
Reviewed-by: Adam Jackson <a...@nwnk.net>
---
 configure.ac          |  6 ++++++
 src/drmmode_display.c | 15 ++++++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 2593f52..378b5aa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -164,6 +164,12 @@ AC_CHECK_DECL(RegionDuplicate,
              [#include <xorg-server.h>
               #include <regionstr.h>])
 
+AC_CHECK_DECL(RROutputSetNonDesktop,
+             [AC_DEFINE(HAVE_NONDESKTOP, 1,
+             [Have non-desktop property support API])], [],
+             [#include <xorg-server.h>
+              #include <randrstr.h>])
+
 AC_CHECK_DECL(fbGlyphs,
              [AC_DEFINE(HAVE_FBGLYPHS, 1, [Have fbGlyphs API])], [],
              [#include <X11/Xmd.h>
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 9364a88..92cb947 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2597,6 +2597,9 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr 
drmmode, drmModeResPtr mode_r
        drmModePropertyBlobPtr path_blob = NULL;
        char name[32];
        int i;
+#ifdef HAVE_NONDESKTOP
+       Bool nonDesktop = FALSE;
+#endif
        const char *s;
 
        koutput =
@@ -2606,6 +2609,11 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr 
drmmode, drmModeResPtr mode_r
                return 0;
 
        path_blob = koutput_get_prop_blob(pAMDGPUEnt->fd, koutput, "PATH");
+#ifdef HAVE_NONDESKTOP
+       i = koutput_get_prop_idx(pAMDGPUEnt->fd, koutput, DRM_MODE_PROP_RANGE, 
RR_PROPERTY_NON_DESKTOP);
+       if (i >= 0)
+               nonDesktop = koutput->prop_values[i] != 0;
+#endif
 
        kencoders = calloc(sizeof(drmModeEncoderPtr), koutput->count_encoders);
        if (!kencoders) {
@@ -2638,6 +2646,9 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr 
drmmode, drmModeResPtr mode_r
                        drmmode_output = output->driver_private;
                        drmmode_output->output_id = mode_res->connectors[num];
                        drmmode_output->mode_output = koutput;
+#ifdef HAVE_NONDESKTOP
+                       output->non_desktop = nonDesktop;
+#endif
                        for (i = 0; i < koutput->count_encoders; i++) {
                                drmModeFreeEncoder(kencoders[i]);
                        }
@@ -2681,7 +2692,9 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr 
drmmode, drmModeResPtr mode_r
        output->interlaceAllowed = TRUE;
        output->doubleScanAllowed = TRUE;
        output->driver_private = drmmode_output;
-
+#ifdef HAVE_NONDESKTOP
+       output->non_desktop = nonDesktop;
+#endif
        output->possible_crtcs = 0xffffffff;
        for (i = 0; i < koutput->count_encoders; i++) {
                output->possible_crtcs &= kencoders[i]->possible_crtcs;
-- 
2.17.1

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to