[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