summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index beeb0f5a..cf8ed0ba 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -69,6 +69,8 @@ CHyprRenderer::CHyprRenderer() {
m_nvidia = true;
else if (name.contains("i915"))
m_intel = true;
+ else if (name.contains("softpipe") || name.contains("Software Rasterizer") || name.contains("llvmpipe"))
+ m_software = true;
Debug::log(LOG, "DRM driver information: {} v{}.{}.{} from {} description {}", name, DRMV->version_major, DRMV->version_minor, DRMV->version_patchlevel,
std::string{DRMV->date, DRMV->date_len}, std::string{DRMV->desc, DRMV->desc_len});
@@ -79,7 +81,7 @@ CHyprRenderer::CHyprRenderer() {
} else {
Debug::log(LOG, "Aq backend has no session, omitting full DRM node checks");
- const auto DRMV = drmGetVersion(g_pCompositor->m_drmFD);
+ const auto DRMV = drmGetVersion(g_pCompositor->m_drm.fd);
if (DRMV) {
std::string name = std::string{DRMV->name, DRMV->name_len};
@@ -89,6 +91,8 @@ CHyprRenderer::CHyprRenderer() {
m_nvidia = true;
else if (name.contains("i915"))
m_intel = true;
+ else if (name.contains("softpipe") || name.contains("Software Rasterizer") || name.contains("llvmpipe"))
+ m_software = true;
Debug::log(LOG, "Primary DRM driver information: {} v{}.{}.{} from {} description {}", name, DRMV->version_major, DRMV->version_minor, DRMV->version_patchlevel,
std::string{DRMV->date, DRMV->date_len}, std::string{DRMV->desc, DRMV->desc_len});
@@ -2234,8 +2238,8 @@ void CHyprRenderer::endRender(const std::function<void()>& renderingDoneCallback
if (!g_pHyprOpenGL->explicitSyncSupported()) {
Debug::log(TRACE, "renderer: Explicit sync unsupported, falling back to implicit in endRender");
- // nvidia doesn't have implicit sync, so we have to explicitly wait here
- if (isNvidia() && *PNVIDIAANTIFLICKER)
+ // nvidia doesn't have implicit sync, so we have to explicitly wait here, llvmpipe and other software renderer seems to bug out aswell.
+ if ((isNvidia() && *PNVIDIAANTIFLICKER) || isSoftware())
glFinish();
else
glFlush(); // mark an implicit sync point
@@ -2295,6 +2299,10 @@ bool CHyprRenderer::isIntel() {
return m_intel;
}
+bool CHyprRenderer::isSoftware() {
+ return m_software;
+}
+
bool CHyprRenderer::isMgpu() {
return m_mgpu;
}