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

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

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

kcmkwin/compositing: Add a Vulkan V-sync setting

M  +37   -0    kcmkwin/kwincompositing/compositing.cpp
M  +5    -0    kcmkwin/kwincompositing/compositing.h
M  +28   -2    kcmkwin/kwincompositing/compositing.ui
M  +9    -1    kcmkwin/kwincompositing/main.cpp

https://commits.kde.org/kwin/1f3be08c8fcc92853a0ee5e84719f9d9ce0e337b

diff --git a/kcmkwin/kwincompositing/compositing.cpp \
b/kcmkwin/kwincompositing/compositing.cpp index 2032a074a..e9b651646 100644
--- a/kcmkwin/kwincompositing/compositing.cpp
+++ b/kcmkwin/kwincompositing/compositing.cpp
@@ -49,6 +49,7 @@ Compositing::Compositing(QObject *parent)
     , m_xrScaleFilter(false)
     , m_glSwapStrategy(0)
     , m_vkDevice(0)
+    , m_vkVSync(1)
     , m_compositingType(0)
     , m_compositingEnabled(true)
     , m_changed(false)
@@ -69,6 +70,7 @@ Compositing::Compositing(QObject *parent)
     connect(this, &Compositing::xrScaleFilterChanged,        this, \
                &Compositing::changed);
     connect(this, &Compositing::glSwapStrategyChanged,       this, \
                &Compositing::changed);
     connect(this, &Compositing::vkDeviceChanged,             this, \
&Compositing::changed); +    connect(this, &Compositing::vkVSyncChanged,              \
                this, &Compositing::changed);
     connect(this, &Compositing::compositingTypeChanged,      this, \
                &Compositing::changed);
     connect(this, &Compositing::compositingEnabledChanged,   this, \
                &Compositing::changed);
     connect(this, &Compositing::openGLPlatformInterfaceChanged, this, \
&Compositing::changed); @@ -124,6 +126,14 @@ void Compositing::reset()
     setVkDevice(row != -1 ? row : 0);
 #endif
 
+    const QString vulkanVSync = kwinConfig.readEntry("VulkanVSync", "Doublebuffer");
+    if (vulkanVSync == "Off")
+        setVkVSync(0);
+    else if (vulkanVSync == "Triplebuffer")
+        setVkVSync(2);
+    else
+        setVkVSync(1);
+
     auto type = [&kwinConfig]{
         const QString backend = kwinConfig.readEntry("Backend", "OpenGL");
         const bool glCore = kwinConfig.readEntry("GLCore", false);
@@ -158,6 +168,7 @@ void Compositing::defaults()
     setXrScaleFilter(false);
     setGlSwapStrategy(1);
     setVkDevice(0);
+    setVkVSync(1);
     setCompositingType(CompositingType::OPENGL20_INDEX);
     const QModelIndex index = \
m_openGLPlatformInterfaceModel->indexForKey(QStringLiteral("glx"));  \
setOpenGLPlatformInterface(index.isValid() ? index.row() : 0); @@ -227,6 +238,11 @@ \
int Compositing::vkDevice() const  return m_vkDevice;
 }
 
+int Compositing::vkVSync() const
+{
+    return m_vkVSync;
+}
+
 int Compositing::compositingType() const
 {
     return m_compositingType;
@@ -273,6 +289,15 @@ void Compositing::setVkDevice(int device)
     emit vkDeviceChanged(device);
 }
 
+void Compositing::setVkVSync(int vsync)
+{
+    if (vsync == m_vkVSync) {
+        return;
+    }
+    m_vkVSync = vsync;
+    emit vkVSyncChanged(vsync);
+}
+
 void Compositing::setWindowThumbnail(int index)
 {
     if (index == m_windowThumbnail) {
@@ -348,6 +373,18 @@ void Compositing::save()
         kwinConfig.writeEntry("VulkanDevice", entry);
     }
 #endif
+    switch (vkVSync()) {
+    case 0:
+        kwinConfig.writeEntry("VulkanVSync", "Off");
+        break;
+    default:
+    case 1:
+        kwinConfig.writeEntry("VulkanVSync", "Doublebuffer");
+        break;
+    case 2:
+        kwinConfig.writeEntry("VulkanVSync", "Triplebuffer");
+        break;
+    }
     QString backend;
     bool glCore = false;
     switch (compositingType()) {
diff --git a/kcmkwin/kwincompositing/compositing.h \
b/kcmkwin/kwincompositing/compositing.h index ca6498824..ecb2b2850 100644
--- a/kcmkwin/kwincompositing/compositing.h
+++ b/kcmkwin/kwincompositing/compositing.h
@@ -42,6 +42,7 @@ class Compositing : public QObject
     Q_PROPERTY(int glScaleFilter READ glScaleFilter WRITE setGlScaleFilter NOTIFY \
                glScaleFilterChanged)
     Q_PROPERTY(bool xrScaleFilter READ xrScaleFilter WRITE setXrScaleFilter NOTIFY \
                xrScaleFilterChanged)
     Q_PROPERTY(int glSwapStrategy READ glSwapStrategy WRITE setGlSwapStrategy NOTIFY \
glSwapStrategyChanged) +    Q_PROPERTY(int vkVSync READ vkVSync WRITE setVkVSync \
                NOTIFY vkVSyncChanged)
     Q_PROPERTY(int compositingType READ compositingType WRITE setCompositingType \
                NOTIFY compositingTypeChanged)
     Q_PROPERTY(bool compositingEnabled READ compositingEnabled WRITE \
                setCompositingEnabled NOTIFY compositingEnabledChanged)
     Q_PROPERTY(KWin::Compositing::OpenGLPlatformInterfaceModel \
*openGLPlatformInterfaceModel READ openGLPlatformInterfaceModel CONSTANT) @@ -60,6 \
+61,7 @@ public:  bool xrScaleFilter() const;
     int glSwapStrategy() const;
     int vkDevice() const;
+    int vkVSync() const;
     int compositingType() const;
     bool compositingEnabled() const;
     int openGLPlatformInterface() const;
@@ -75,6 +77,7 @@ public:
     void setXrScaleFilter(bool filter);
     void setGlSwapStrategy(int strategy);
     void setVkDevice(int device);
+    void setVkVSync(int vsync);
     void setCompositingType(int index);
     void setCompositingEnabled(bool enalbed);
     void setOpenGLPlatformInterface(int interface);
@@ -94,6 +97,7 @@ Q_SIGNALS:
     void xrScaleFilterChanged(int);
     void glSwapStrategyChanged(int);
     void vkDeviceChanged(int);
+    void vkVSyncChanged(int);
     void compositingTypeChanged(int);
     void compositingEnabledChanged(bool);
     void openGLPlatformInterfaceChanged(int);
@@ -106,6 +110,7 @@ private:
     bool m_xrScaleFilter;
     int m_glSwapStrategy;
     int m_vkDevice;
+    int m_vkVSync;
     int m_compositingType;
     bool m_compositingEnabled;
     bool m_changed;
diff --git a/kcmkwin/kwincompositing/compositing.ui \
b/kcmkwin/kwincompositing/compositing.ui index 858e45eb5..0888a5cb0 100644
--- a/kcmkwin/kwincompositing/compositing.ui
+++ b/kcmkwin/kwincompositing/compositing.ui
@@ -255,13 +255,39 @@ Alternatively, you might want to use the XRender backend \
instead.</string>  </widget>
    </item>
    <item row="11" column="0">
+    <widget class="QLabel" name="vulkanVSyncLabel">
+     <property name="text">
+      <string>V-Sync:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="11" column="1">
+    <widget class="QComboBox" name="vulkanVSync">
+     <item>
+      <property name="text">
+       <string>Off</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Double buffer</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Triple buffer</string>
+      </property>
+     </item>
+    </widget>
+   </item>
+   <item row="12" column="0">
     <widget class="QLabel" name="label_6">
      <property name="text">
       <string>Keep window thumbnails:</string>
      </property>
     </widget>
    </item>
-   <item row="11" column="1">
+   <item row="12" column="1">
     <widget class="QComboBox" name="windowThumbnail">
      <item>
       <property name="text">
@@ -280,7 +306,7 @@ Alternatively, you might want to use the XRender backend \
instead.</string>  </item>
     </widget>
    </item>
-   <item row="12" column="1">
+   <item row="13" column="1">
     <widget class="QCheckBox" name="windowsBlockCompositing">
      <property name="toolTip">
       <string>Applications can set a hint to block compositing when the window is \
                open.
diff --git a/kcmkwin/kwincompositing/main.cpp b/kcmkwin/kwincompositing/main.cpp
index 65b2e1506..b9b24e755 100644
--- a/kcmkwin/kwincompositing/main.cpp
+++ b/kcmkwin/kwincompositing/main.cpp
@@ -161,6 +161,11 @@ void KWinCompositingSettings::init()
     connect(m_compositing, &Compositing::vkDeviceChanged, m_form.vulkanDevice, \
                &QComboBox::setCurrentIndex);
     connect(m_form.vulkanDevice, currentIndexChangedSignal, m_compositing, \
&Compositing::setVkDevice);  
+    // Vulkan V-sync setting
+    m_form.vulkanVSync->setCurrentIndex(m_compositing->vkVSync());
+    connect(m_compositing, &Compositing::vkVSyncChanged, m_form.vulkanVSync, \
&QComboBox::setCurrentIndex); +    connect(m_form.vulkanVSync, \
currentIndexChangedSignal, m_compositing, &Compositing::setVkVSync); +
     // windowThumbnail
     m_form.windowThumbnail->setCurrentIndex(m_compositing->windowThumbnail());
     connect(m_compositing, &Compositing::windowThumbnailChanged, \
m_form.windowThumbnail, &QComboBox::setCurrentIndex); @@ -199,7 +204,7 @@ void \
KWinCompositingSettings::init()  auto &layout = m_form.formLayout;
 
         // Remove all backend-specific rows from the form layout
-        for (auto *widget : { m_form.glScaleFilter, m_form.xrScaleFilter, \
m_form.tearingPrevention, m_form.vulkanDevice }) { +        for (auto *widget : { \
m_form.glScaleFilter, m_form.xrScaleFilter, m_form.tearingPrevention, \
m_form.vulkanDevice, m_form.vulkanVSync }) {  if (layout->indexOf(widget) != -1) {
                 layout->takeRow(widget);
             }
@@ -216,6 +221,7 @@ void KWinCompositingSettings::init()
             layout->insertRow(firstRow + 1, m_form.tearingPreventionLabel, \
m_form.tearingPrevention);  } else if (currentType == CompositingType::VULKAN_INDEX) \
                {
             layout->insertRow(firstRow + 0, m_form.vulkanDeviceLabel,      \
m_form.vulkanDevice); +            layout->insertRow(firstRow + 1, \
m_form.vulkanVSyncLabel,       m_form.vulkanVSync);  }
 
         m_form.glScaleFilter->setVisible(currentIsOpenGL);
@@ -226,6 +232,8 @@ void KWinCompositingSettings::init()
         m_form.tearingPreventionLabel->setVisible(currentType != \
                CompositingType::VULKAN_INDEX);
         m_form.vulkanDevice->setVisible(currentType == \
                CompositingType::VULKAN_INDEX);
         m_form.vulkanDeviceLabel->setVisible(currentType == \
CompositingType::VULKAN_INDEX); +        m_form.vulkanVSync->setVisible(currentType \
== CompositingType::VULKAN_INDEX); +        \
m_form.vulkanVSyncLabel->setVisible(currentType == CompositingType::VULKAN_INDEX);  \
};  showHideBasedOnType();
     connect(m_form.type, currentIndexChangedSignal,


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

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