[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