diff --git a/src/wayland/buffer/dmabuf.cpp b/src/wayland/buffer/dmabuf.cpp index 47167020..c6c7724f 100644 --- a/src/wayland/buffer/dmabuf.cpp +++ b/src/wayland/buffer/dmabuf.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -48,42 +47,7 @@ Q_LOGGING_CATEGORY(logDmabuf, "quickshell.wayland.buffer.dmabuf", QtWarningMsg); LinuxDmabufManager* MANAGER = nullptr; // NOLINT -class FourCCStr { -public: - explicit FourCCStr(uint32_t code) - : chars( - {static_cast(code >> 0 & 0xff), - static_cast(code >> 8 & 0xff), - static_cast(code >> 16 & 0xff), - static_cast(code >> 24 & 0xff), - '\0'} - ) { - for (auto i = 3; i != 0; i--) { - if (chars[i] == ' ') chars[i] = '\0'; - else break; - } - } - - [[nodiscard]] const char* cStr() const { return this->chars.data(); } - -private: - std::array chars {}; -}; - -class FourCCModStr { -public: - explicit FourCCModStr(uint64_t code): drmStr(drmGetFormatModifierName(code)) {} - ~FourCCModStr() { - if (this->drmStr) drmFree(this->drmStr); - } - - Q_DISABLE_COPY_MOVE(FourCCModStr); - - [[nodiscard]] const char* cStr() const { return this->drmStr; } - -private: - char* drmStr; -}; +} // namespace QDebug& operator<<(QDebug& debug, const FourCCStr& fourcc) { debug << fourcc.cStr(); @@ -95,8 +59,6 @@ QDebug& operator<<(QDebug& debug, const FourCCModStr& fourcc) { return debug; } -} // namespace - QDebug& operator<<(QDebug& debug, const WlDmaBuffer* buffer) { auto saver = QDebugStateSaver(debug); debug.nospace(); diff --git a/src/wayland/buffer/dmabuf.hpp b/src/wayland/buffer/dmabuf.hpp index 97b5576f..a05e82a1 100644 --- a/src/wayland/buffer/dmabuf.hpp +++ b/src/wayland/buffer/dmabuf.hpp @@ -17,6 +17,7 @@ #include #include #include +#include #include "manager.hpp" #include "qsg.hpp" @@ -28,6 +29,45 @@ class WlBufferManagerPrivate; namespace qs::wayland::buffer::dmabuf { class LinuxDmabufManager; +class FourCCStr { +public: + explicit FourCCStr(uint32_t code) + : chars( + {static_cast(code >> 0 & 0xff), + static_cast(code >> 8 & 0xff), + static_cast(code >> 16 & 0xff), + static_cast(code >> 24 & 0xff), + '\0'} + ) { + for (auto i = 3; i != 0; i--) { + if (chars[i] == ' ') chars[i] = '\0'; + else break; + } + } + + [[nodiscard]] const char* cStr() const { return this->chars.data(); } + +private: + std::array chars {}; +}; + +class FourCCModStr { +public: + explicit FourCCModStr(uint64_t code): drmStr(drmGetFormatModifierName(code)) {} + ~FourCCModStr() { + if (this->drmStr) drmFree(this->drmStr); + } + + Q_DISABLE_COPY_MOVE(FourCCModStr); + + [[nodiscard]] const char* cStr() const { return this->drmStr; } + +private: + char* drmStr; +}; + +QDebug& operator<<(QDebug& debug, const FourCCStr& fourcc); +QDebug& operator<<(QDebug& debug, const FourCCModStr& fourcc); class GbmDeviceHandle { public: diff --git a/src/wayland/buffer/manager.cpp b/src/wayland/buffer/manager.cpp index dde71a88..4c2e267e 100644 --- a/src/wayland/buffer/manager.cpp +++ b/src/wayland/buffer/manager.cpp @@ -17,6 +17,10 @@ namespace qs::wayland::buffer { +namespace { +Q_LOGGING_CATEGORY(logBuffer, "quickshell.wayland.buffer", QtWarningMsg); +} + WlBuffer* WlBufferSwapchain::createBackbuffer(const WlBufferRequest& request, bool* newBuffer) { auto& buffer = this->presentSecondBuffer ? this->buffer1 : this->buffer2; @@ -42,9 +46,28 @@ bool WlBufferManager::isReady() const { return this->p->mReady; } [[nodiscard]] WlBuffer* WlBufferManager::createBuffer(const WlBufferRequest& request) { static const bool dmabufDisabled = qEnvironmentVariableIsSet("QS_DISABLE_DMABUF"); + qCDebug(logBuffer).nospace() << "Creating buffer from request at " << request.width << 'x' + << request.height; + qCDebug(logBuffer).nospace() << " Dmabuf requests on device " << request.dmabuf.device + << " (disabled: " << dmabufDisabled << ')'; + + for (const auto& [format, modifiers]: request.dmabuf.formats) { + qCDebug(logBuffer) << " Format" << dmabuf::FourCCStr(format); + + for (const auto& modifier: modifiers) { + qCDebug(logBuffer) << " Explicit Modifier" << dmabuf::FourCCModStr(modifier); + } + } + + qCDebug(logBuffer).nospace() << " Shm requests"; + + for (const auto& format: request.shm.formats) { + qCDebug(logBuffer) << " Format" << format; + } + if (!dmabufDisabled) { if (auto* buf = this->p->dmabuf.createDmabuf(request)) return buf; - qCWarning(shm::logShm) << "DMA buffer creation failed, falling back to SHM."; + qCWarning(logBuffer) << "DMA buffer creation failed, falling back to SHM."; } return shm::ShmbufManager::createShmbuf(request); diff --git a/src/wayland/buffer/shm.cpp b/src/wayland/buffer/shm.cpp index 8973cdfb..59a8e914 100644 --- a/src/wayland/buffer/shm.cpp +++ b/src/wayland/buffer/shm.cpp @@ -17,7 +17,9 @@ namespace qs::wayland::buffer::shm { +namespace { Q_LOGGING_CATEGORY(logShm, "quickshell.wayland.buffer.shm", QtWarningMsg); +} bool WlShmBuffer::isCompatible(const WlBufferRequest& request) const { if (QSize(static_cast(request.width), static_cast(request.height)) != this->size()) { diff --git a/src/wayland/buffer/shm.hpp b/src/wayland/buffer/shm.hpp index 12af26e3..f3597cbc 100644 --- a/src/wayland/buffer/shm.hpp +++ b/src/wayland/buffer/shm.hpp @@ -14,8 +14,6 @@ namespace qs::wayland::buffer::shm { -Q_DECLARE_LOGGING_CATEGORY(logShm); - class WlShmBuffer: public WlBuffer { public: ~WlShmBuffer() override;