summaryrefslogtreecommitdiff
path: root/src/render/OpenGL.cpp
diff options
context:
space:
mode:
authorPppp1116 <pcaiadoguerreiro@gmail.com>2026-03-26 00:08:49 +0000
committerGitHub <noreply@github.com>2026-03-26 00:08:49 +0000
commit855b1cba40ab972dc7c03ccd76ff5aacbeed099d (patch)
treedaaa6cf286c6c8da833a3a286b861c380901cd36 /src/render/OpenGL.cpp
parent2e5e800e4b334240689df5a4c2c4607f751da908 (diff)
renderer: small fixes in OpenGL.cpp and OpenGL.hpp (#13842)
* render: add EGL error details to dmabuf query failures * linux-dmabuf: tighten plane modifier checks and feedback safety
Diffstat (limited to 'src/render/OpenGL.cpp')
-rw-r--r--src/render/OpenGL.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp
index d466dc82..16e892ca 100644
--- a/src/render/OpenGL.cpp
+++ b/src/render/OpenGL.cpp
@@ -120,7 +120,7 @@ static int openRenderNode(int drmFd) {
drmVersion* render_version = drmGetVersion(drmFd);
if (render_version && render_version->name) {
- Log::logger->log(Log::DEBUG, "DRM dev versionName", render_version->name);
+ Log::logger->log(Log::DEBUG, "DRM dev versionName {}", render_version->name);
if (strcmp(render_version->name, "evdi") == 0) {
free(renderName); // NOLINT(cppcoreguidelines-no-malloc)
renderName = strdup("/dev/dri/card0");
@@ -409,14 +409,14 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() : m_drmFD(g_pCompositor->m_drmRenderNode.fd >
m_pressedHistoryKilled <<= 1;
m_pressedHistoryKilled |= killing ? 1 : 0;
#if POINTER_PRESSED_HISTORY_LENGTH < 32
- m_pressedHistoryKilled &= (1 >> POINTER_PRESSED_HISTORY_LENGTH) - 1;
+ m_pressedHistoryKilled &= (1U << POINTER_PRESSED_HISTORY_LENGTH) - 1;
#endif
// shift touch flag in
m_pressedHistoryTouched <<= 1;
m_pressedHistoryTouched |= touch ? 1 : 0;
#if POINTER_PRESSED_HISTORY_LENGTH < 32
- m_pressedHistoryTouched &= (1 >> POINTER_PRESSED_HISTORY_LENGTH) - 1;
+ m_pressedHistoryTouched &= (1U << POINTER_PRESSED_HISTORY_LENGTH) - 1;
#endif
};
@@ -474,7 +474,11 @@ std::optional<std::vector<uint64_t>> CHyprOpenGLImpl::getModsForFormat(EGLint fo
mods.resize(len);
external.resize(len);
- m_proc.eglQueryDmaBufModifiersEXT(m_eglDisplay, format, len, mods.data(), external.data(), &len);
+ if (!m_proc.eglQueryDmaBufModifiersEXT(m_eglDisplay, format, len, mods.data(), external.data(), &len)) {
+ const auto err = eglGetError();
+ Log::logger->log(Log::ERR, "EGL: Failed to query mods (2) for format 0x{:x}, eglGetError: 0x{:x}", format, err);
+ return std::nullopt;
+ }
std::vector<uint64_t> result;
// reserve number of elements to avoid reallocations
@@ -516,9 +520,17 @@ void CHyprOpenGLImpl::initDRMFormats() {
Log::logger->log(Log::WARN, "EGL: No mod support");
} else {
EGLint len = 0;
- m_proc.eglQueryDmaBufFormatsEXT(m_eglDisplay, 0, nullptr, &len);
+ if (!m_proc.eglQueryDmaBufFormatsEXT(m_eglDisplay, 0, nullptr, &len)) {
+ const auto err = eglGetError();
+ Log::logger->log(Log::ERR, "EGL: Failed to query formats, eglGetError: 0x{:x}", err);
+ return;
+ }
formats.resize(len);
- m_proc.eglQueryDmaBufFormatsEXT(m_eglDisplay, len, formats.data(), &len);
+ if (!m_proc.eglQueryDmaBufFormatsEXT(m_eglDisplay, len, formats.data(), &len)) {
+ const auto err = eglGetError();
+ Log::logger->log(Log::ERR, "EGL: Failed to query formats (2), eglGetError: 0x{:x}", err);
+ return;
+ }
}
if (formats.empty()) {
@@ -750,6 +762,7 @@ void CHyprOpenGLImpl::begin(PHLMONITOR pMonitor, const CRegion& damage_, SP<IFra
void CHyprOpenGLImpl::end() {
static auto PZOOMDISABLEAA = CConfigValue<Hyprlang::INT>("cursor:zoom_disable_aa");
auto& m_renderData = g_pHyprRenderer->m_renderData;
+ const auto PMONITOR = m_renderData.pMonitor;
TRACY_GPU_ZONE("RenderEnd");
g_pHyprRenderer->m_renderData.currentWindow.reset();
@@ -825,9 +838,8 @@ void CHyprOpenGLImpl::end() {
// if we dropped to offMain, release it now.
// if there is a plugin constantly using it, this might be a bit slow,
// but I haven't seen a single plugin yet use these, so it's better to drop a bit of vram.
- if UNLIKELY (g_pHyprRenderer->m_renderData.pMonitor && g_pHyprRenderer->m_renderData.pMonitor->m_offMainFB &&
- g_pHyprRenderer->m_renderData.pMonitor->m_offMainFB->isAllocated())
- g_pHyprRenderer->m_renderData.pMonitor->m_offMainFB->release();
+ if UNLIKELY (PMONITOR && PMONITOR->m_offMainFB && PMONITOR->m_offMainFB->isAllocated())
+ PMONITOR->m_offMainFB->release();
static const auto GLDEBUG = CConfigValue<Hyprlang::INT>("debug:gl_debugging");