backends/drm: re-allow HDR on NVidia with driver version 565.57.01+

The bug that made me disable it by default was fixed in that version

CCBUG: 488941
wilder/Plasma/6.3
Xaver Hugl 1 year ago
parent 3e267091b1
commit cb9d538948
  1. 21
      src/backends/drm/drm_gpu.cpp
  2. 3
      src/backends/drm/drm_gpu.h
  3. 2
      src/backends/drm/drm_output.cpp

@ -24,17 +24,17 @@
#include "drm_output.h" #include "drm_output.h"
#include "drm_pipeline.h" #include "drm_pipeline.h"
#include "drm_plane.h" #include "drm_plane.h"
// system
#include <QFile>
#include <algorithm> #include <algorithm>
#include <drm_fourcc.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <gbm.h>
#include <libdrm/drm_mode.h>
#include <poll.h> #include <poll.h>
#include <ranges> #include <ranges>
#include <unistd.h> #include <unistd.h>
// drm
#include <drm_fourcc.h>
#include <gbm.h>
#include <libdrm/drm_mode.h>
#include <xf86drm.h> #include <xf86drm.h>
#include <xf86drmMode.h> #include <xf86drmMode.h>
@ -86,6 +86,12 @@ DrmGpu::DrmGpu(DrmBackend *backend, int fd, std::unique_ptr<DrmDevice> &&device)
m_isVmwgfx = strstr(version->name, "vmwgfx"); m_isVmwgfx = strstr(version->name, "vmwgfx");
m_isVirtualMachine = strstr(version->name, "virtio") || strstr(version->name, "qxl") m_isVirtualMachine = strstr(version->name, "virtio") || strstr(version->name, "qxl")
|| strstr(version->name, "vmwgfx") || strstr(version->name, "vboxvideo"); || strstr(version->name, "vmwgfx") || strstr(version->name, "vboxvideo");
if (m_isNVidia) {
QFile moduleVersion("/sys/module/nvidia_drm/version");
if (moduleVersion.open(QIODeviceBase::OpenModeFlag::ReadOnly)) {
m_nvidiaDriverVersion = Version::parseString(moduleVersion.readLine(100));
}
}
m_socketNotifier = std::make_unique<QSocketNotifier>(fd, QSocketNotifier::Read); m_socketNotifier = std::make_unique<QSocketNotifier>(fd, QSocketNotifier::Read);
connect(m_socketNotifier.get(), &QSocketNotifier::activated, this, &DrmGpu::dispatchEvents); connect(m_socketNotifier.get(), &QSocketNotifier::activated, this, &DrmGpu::dispatchEvents);
@ -676,6 +682,11 @@ bool DrmGpu::isVirtualMachine() const
return m_isVirtualMachine; return m_isVirtualMachine;
} }
std::optional<Version> DrmGpu::nvidiaDriverVersion() const
{
return m_nvidiaDriverVersion;
}
bool DrmGpu::isRemoved() const bool DrmGpu::isRemoved() const
{ {
return m_isRemoved; return m_isRemoved;

@ -11,6 +11,7 @@
#include "core/drmdevice.h" #include "core/drmdevice.h"
#include "drm_pipeline.h" #include "drm_pipeline.h"
#include "utils/filedescriptor.h" #include "utils/filedescriptor.h"
#include "utils/version.h"
#include <QList> #include <QList>
#include <QPointer> #include <QPointer>
@ -87,6 +88,7 @@ public:
bool isAmdgpu() const; bool isAmdgpu() const;
bool isVmwgfx() const; bool isVmwgfx() const;
bool isVirtualMachine() const; bool isVirtualMachine() const;
std::optional<Version> nvidiaDriverVersion() const;
EglDisplay *eglDisplay() const; EglDisplay *eglDisplay() const;
DrmBackend *platform() const; DrmBackend *platform() const;
/** /**
@ -150,6 +152,7 @@ private:
clockid_t m_presentationClock; clockid_t m_presentationClock;
std::unique_ptr<EglDisplay> m_eglDisplay; std::unique_ptr<EglDisplay> m_eglDisplay;
DrmBackend *const m_platform; DrmBackend *const m_platform;
std::optional<Version> m_nvidiaDriverVersion;
std::vector<std::unique_ptr<DrmPlane>> m_planes; std::vector<std::unique_ptr<DrmPlane>> m_planes;
std::vector<std::unique_ptr<DrmCrtc>> m_crtcs; std::vector<std::unique_ptr<DrmCrtc>> m_crtcs;

@ -259,7 +259,7 @@ Output::Capabilities DrmOutput::computeCapabilities() const
if (m_gpu->isI915()) { if (m_gpu->isI915()) {
allowColorspace &= s_allowColorspaceIntel || linuxKernelVersion() >= Version(6, 11); allowColorspace &= s_allowColorspaceIntel || linuxKernelVersion() >= Version(6, 11);
} else if (m_gpu->isNVidia()) { } else if (m_gpu->isNVidia()) {
allowColorspace &= s_allowColorspaceNVidia; allowColorspace &= s_allowColorspaceNVidia || m_gpu->nvidiaDriverVersion() >= Version(565, 57, 1);
} }
if (allowColorspace) { if (allowColorspace) {
capabilities |= Capability::WideColorGamut; capabilities |= Capability::WideColorGamut;

Loading…
Cancel
Save