[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kwin/fredrik/vulkan] /: options: Add a Vulkan device setting
From:       Fredrik_Höglund <null () kde ! org>
Date:       2018-02-16 17:01:48
Message-ID: E1emjOO-0004Yx-Og () code ! kde ! org
[Download RAW message or body]

Git commit acb0599ed3186f990ae44865b8b6b236144bdf63 by Fredrik Höglund.
Committed on 16/02/2018 at 16:58.
Pushed by fredrik into branch 'fredrik/vulkan'.

options: Add a Vulkan device setting

M  +22   -0    options.cpp
M  +44   -0    options.h

https://commits.kde.org/kwin/acb0599ed3186f990ae44865b8b6b236144bdf63

diff --git a/options.cpp b/options.cpp
index 34a27e428..281bad74c 100644
--- a/options.cpp
+++ b/options.cpp
@@ -124,6 +124,7 @@ Options::Options(QObject *parent)
     , m_glCoreProfile(Options::defaultGLCoreProfile())
     , m_glPreferBufferSwap(Options::defaultGlPreferBufferSwap())
     , m_glPlatformInterface(Options::defaultGlPlatformInterface())
+    , m_vulkanDevice(0, 0, 0)
     , m_windowsBlockCompositing(true)
     , OpTitlebarDblClick(Options::defaultOperationTitlebarDblClick())
     , CmdActiveTitlebar1(Options::defaultCommandActiveTitlebar1())
@@ -732,6 +733,14 @@ void Options::setGlPreferBufferSwap(char glPreferBufferSwap)
     emit glPreferBufferSwapChanged();
 }
 
+void Options::setVulkanDevice(const VulkanDeviceId &device)
+{
+    if (m_vulkanDevice != device) {
+        m_vulkanDevice = device;
+        emit vulkanDeviceChanged();
+    }
+}
+
 void Options::setGlPlatformInterface(OpenGLPlatformInterface interface)
 {
     // check environment variable
@@ -987,6 +996,19 @@ void Options::reloadCompositingSettings(bool force)
 
     m_xrenderSmoothScale = config.readEntry("XRenderSmoothScale", false);
 
+    const QStringList vulkanDeviceEntry = config.readEntry("VulkanDevice", \
QStringList()); +    if (vulkanDeviceEntry.count() == 3) {
+        uint32_t index, vendorId, deviceId;
+        bool ok = true;
+        if (ok) index    = vulkanDeviceEntry.at(0).toUInt(&ok, 0);
+        if (ok) vendorId = vulkanDeviceEntry.at(1).toUInt(&ok, 0);
+        if (ok) deviceId = vulkanDeviceEntry.at(2).toUInt(&ok, 0);
+        if (!ok) index = vendorId = deviceId = 0;
+        setVulkanDevice(VulkanDeviceId(index, vendorId, deviceId));
+    } else {
+        setVulkanDevice(VulkanDeviceId(0, 0, 0));
+    }
+
     HiddenPreviews previews = Options::defaultHiddenPreviews();
     // 4 - off, 5 - shown, 6 - always, other are old values
     int hps = config.readEntry("HiddenPreviews", 5);
diff --git a/options.h b/options.h
index fe35ae0e9..ded06b83f 100644
--- a/options.h
+++ b/options.h
@@ -45,6 +45,39 @@ enum HiddenPreviews {
 
 class Settings;
 
+
+/**
+ * Tuple of a physical device index, vendor ID and device ID.
+ */
+class VulkanDeviceId
+{
+public:
+    VulkanDeviceId(uint32_t index, uint32_t vendorId, uint32_t deviceId)
+        : m_index(index), m_vendorId(vendorId), m_deviceId(deviceId) {}
+
+    uint32_t index() const { return m_index; }
+    uint32_t vendorId() const { return m_vendorId; }
+    uint32_t deviceId() const { return m_deviceId; }
+
+    bool operator == (const VulkanDeviceId &other) const {
+        return m_index == other.m_index &&
+               m_vendorId == other.m_vendorId &&
+               m_deviceId == other.m_deviceId;
+    }
+
+    bool operator != (const VulkanDeviceId &other) const {
+        return m_index != other.m_index ||
+               m_vendorId != other.m_vendorId ||
+               m_deviceId != other.m_deviceId;
+    }
+
+private:
+    uint32_t m_index;
+    uint32_t m_vendorId;
+    uint32_t m_deviceId;
+};
+
+
 class KWIN_EXPORT Options : public QObject
 {
     Q_OBJECT
@@ -188,6 +221,7 @@ class KWIN_EXPORT Options : public QObject
     Q_PROPERTY(bool glStrictBindingFollowsDriver READ isGlStrictBindingFollowsDriver \
                WRITE setGlStrictBindingFollowsDriver NOTIFY \
                glStrictBindingFollowsDriverChanged)
     Q_PROPERTY(bool glCoreProfile READ glCoreProfile WRITE setGLCoreProfile NOTIFY \
                glCoreProfileChanged)
     Q_PROPERTY(GlSwapStrategy glPreferBufferSwap READ glPreferBufferSwap WRITE \
setGlPreferBufferSwap NOTIFY glPreferBufferSwapChanged) +    \
Q_PROPERTY(VulkanDeviceId vulkanDevice READ vulkanDevice WRITE setVulkanDevice NOTIFY \
                vulkanDeviceChanged)
     Q_PROPERTY(KWin::OpenGLPlatformInterface glPlatformInterface READ \
                glPlatformInterface WRITE setGlPlatformInterface NOTIFY \
                glPlatformInterfaceChanged)
     Q_PROPERTY(bool windowsBlockCompositing READ windowsBlockCompositing WRITE \
setWindowsBlockCompositing NOTIFY windowsBlockCompositingChanged)  public:
@@ -590,6 +624,10 @@ public:
         return m_glPreferBufferSwap;
     }
 
+    VulkanDeviceId vulkanDevice() const {
+        return m_vulkanDevice;
+    }
+
     bool windowsBlockCompositing() const
     {
         return m_windowsBlockCompositing;
@@ -658,6 +696,7 @@ public:
     void setGLCoreProfile(bool glCoreProfile);
     void setGlPreferBufferSwap(char glPreferBufferSwap);
     void setGlPlatformInterface(OpenGLPlatformInterface interface);
+    void setVulkanDevice(const VulkanDeviceId &device);
     void setWindowsBlockCompositing(bool set);
 
     // default values
@@ -766,6 +805,9 @@ public:
     static GlSwapStrategy defaultGlPreferBufferSwap() {
         return AutoSwapStrategy;
     }
+    static VulkanDeviceId defaultVulkanDevice() {
+        return VulkanDeviceId(0, 0, 0);
+    }
     static OpenGLPlatformInterface defaultGlPlatformInterface() {
         return kwinApp()->shouldUseWaylandForCompositing() ? EglPlatformInterface : \
GlxPlatformInterface;  };
@@ -849,6 +891,7 @@ Q_SIGNALS:
     void glCoreProfileChanged();
     void glPreferBufferSwapChanged();
     void glPlatformInterfaceChanged();
+    void vulkanDeviceChanged();
     void windowsBlockCompositingChanged();
 
     void configChanged();
@@ -895,6 +938,7 @@ private:
     bool m_glCoreProfile;
     GlSwapStrategy m_glPreferBufferSwap;
     OpenGLPlatformInterface m_glPlatformInterface;
+    VulkanDeviceId m_vulkanDevice;
     bool m_windowsBlockCompositing;
 
     WindowOperation OpTitlebarDblClick;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic