card: fix has_atomic if libdrm does not have atomic support
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 11 Nov 2015 18:50:55 +0000 (20:50 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 11 Nov 2015 18:50:55 +0000 (20:50 +0200)
If libdrm was missing DRM_CLIENT_CAP_ATOMIC, but the driver still
supported atomic modesetting, m_has_atomic was set to true. The end
result was that test apps thought they can use atomic modesetting, but
it wasn't functional in the libkmsxx.

libkms++/card.cpp

index 2bb6673b494901614e72c89c75b92dc5944d0be5..a0e395eb19acf40eb5ff8f76073d37444cfdd8b2 100644 (file)
 
 #include "kms++.h"
 
 
 #include "kms++.h"
 
-#ifndef DRM_CLIENT_CAP_ATOMIC
-#define DRM_CLIENT_CAP_ATOMIC 3
-#endif
-
 using namespace std;
 
 namespace kms
 using namespace std;
 
 namespace kms
@@ -42,12 +38,16 @@ Card::Card()
                m_has_universal_planes = false;
        }
 
                m_has_universal_planes = false;
        }
 
+#ifdef DRM_CLIENT_CAP_ATOMIC
        if (getenv("LIBKMSXX_DISABLE_ATOMIC") == 0) {
                r = drmSetClientCap(m_fd, DRM_CLIENT_CAP_ATOMIC, 1);
                m_has_atomic = r == 0;
        } else {
                m_has_atomic = false;
        }
        if (getenv("LIBKMSXX_DISABLE_ATOMIC") == 0) {
                r = drmSetClientCap(m_fd, DRM_CLIENT_CAP_ATOMIC, 1);
                m_has_atomic = r == 0;
        } else {
                m_has_atomic = false;
        }
+#else
+       m_has_atomic = false;
+#endif
 
        uint64_t has_dumb;
        r = drmGetCap(fd, DRM_CAP_DUMB_BUFFER, &has_dumb);
 
        uint64_t has_dumb;
        r = drmGetCap(fd, DRM_CAP_DUMB_BUFFER, &has_dumb);