21#include <drm_fourcc.h>
29static OutputTransform drmToOutputTransform(DrmPipeline *pipeline)
36 switch (angle % 360) {
52 , m_surface(pipeline->gpu(), eglBackend)
53 , m_dmabufFeedback(pipeline->gpu(), eglBackend)
59 m_scanoutBuffer.reset();
69 m_currentDamage = damagedRegion;
76 return m_currentDamage;
86 if (m_scanoutBuffer) {
103 static const bool directScanoutDisabled = qEnvironmentVariableIntValue(
"KWIN_DRM_NO_DIRECT_SCANOUT", &valid) == 1 && valid;
104 if (directScanoutDisabled) {
113 if (!item || !item->
surface()) {
116 const auto surface = item->
surface();
120 const auto buffer = surface->
buffer();
126 if (!dmabufAttributes) {
131 if (!formats.contains(dmabufAttributes->
format)) {
139 if (!formats[dmabufAttributes->
format].contains(dmabufAttributes->
modifier)) {
153 m_scanoutBuffer.reset();
160 return m_scanoutBuffer ? m_scanoutBuffer : m_surface.
currentBuffer();
165 return m_scanoutBuffer !=
nullptr;
170 m_scanoutBuffer.reset();
std::shared_ptr< GLTexture > importDmaBufAsTexture(const DmaBufAttributes &attributes) const
void scanoutFailed(SurfaceInterface *surface, const QMap< uint32_t, QList< uint64_t > > &formats)
void scanoutSuccessful(SurfaceInterface *surface)
DrmBackend * platform() const
std::shared_ptr< DrmFramebuffer > importBuffer(GraphicsBuffer *buffer, FileDescriptor &&explicitFence)
bool needsColormanagement() const
QVector3D channelFactors() const
DrmOutput * output() const
const std::shared_ptr< IccProfile > & iccProfile() const
QMap< uint32_t, QList< uint64_t > > formats() const
const ColorDescription & colorDescription() const
std::shared_ptr< DrmConnectorMode > mode() const
DrmPipeline *const m_pipeline
static int32_t transformationToDegrees(Transformations transformation)
OpenGL Backend using Egl on a GBM surface.
ColorDescription colorDescription() const
void releaseBuffers() override
std::optional< OutputLayerBeginFrameInfo > beginFrame() override
std::shared_ptr< DrmFramebuffer > currentBuffer() const override
bool hasDirectScanoutBuffer() const override
bool checkTestBuffer() override
EglGbmLayer(EglGbmBackend *eglBackend, DrmPipeline *pipeline)
bool scanout(SurfaceItem *surfaceItem) override
QRegion currentDamage() const override
bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override
std::chrono::nanoseconds queryRenderTime() const override
std::shared_ptr< GLTexture > texture() const override
std::optional< OutputLayerBeginFrameInfo > startRendering(const QSize &bufferSize, OutputTransform transformation, const QMap< uint32_t, QList< uint64_t > > &formats, const ColorDescription &colorDescription, const QVector3D &channelFactors, const std::shared_ptr< IccProfile > &iccProfile, bool enableColormanagement)
std::shared_ptr< GLTexture > texture() const
std::chrono::nanoseconds queryRenderTime() const
EglGbmBackend * eglBackend() const
const ColorDescription & colorDescription() const
bool endRendering(const QRegion &damagedRegion)
std::shared_ptr< DrmFramebuffer > currentBuffer() const
std::shared_ptr< DrmFramebuffer > renderTestBuffer(const QSize &bufferSize, const QMap< uint32_t, QList< uint64_t > > &formats)
const ColorDescription & colorDescription() const
OutputTransform transform() const
GraphicsBuffer * buffer() const
QRegion mapFromBuffer(const QRegion ®ion) const
SurfaceInterface * surface() const