61 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);
65 bool doesSurfaceFit(
const QSize &size,
const QMap<uint32_t, QList<uint64_t>> &formats)
const;
66 std::shared_ptr<GLTexture>
texture()
const;
69 std::shared_ptr<DrmFramebuffer>
renderTestBuffer(
const QSize &bufferSize,
const QMap<uint32_t, QList<uint64_t>> &formats);
76 enum class MultiGpuImportMode {
87 std::shared_ptr<EglContext> context;
88 std::shared_ptr<EglSwapchain> gbmSwapchain;
89 std::shared_ptr<EglSwapchainSlot> currentSlot;
91 std::unique_ptr<QPainterSwapchain> importDumbSwapchain;
92 std::shared_ptr<EglContext> importContext;
93 std::shared_ptr<EglSwapchain> importGbmSwapchain;
94 QHash<GraphicsBuffer *, std::shared_ptr<GLTexture>> importedTextureCache;
96 MultiGpuImportMode importMode;
97 std::shared_ptr<DrmFramebuffer> currentFramebuffer;
101 bool colormanagementEnabled =
false;
102 std::shared_ptr<GLTexture> shadowTexture;
103 std::unique_ptr<GLFramebuffer> shadowBuffer;
106 QVector3D channelFactors = {1, 1, 1};
107 std::unique_ptr<IccShader> iccShader;
108 std::shared_ptr<IccProfile> iccProfile;
111 std::unique_ptr<GLRenderTimeQuery> timeQuery;
112 std::unique_ptr<GLRenderTimeQuery> importTimeQuery;
113 std::chrono::steady_clock::time_point renderStart;
114 std::chrono::steady_clock::time_point renderEnd;
116 bool checkSurface(
const QSize &size,
const QMap<uint32_t, QList<uint64_t>> &formats);
117 bool doesSurfaceFit(Surface *surface,
const QSize &size,
const QMap<uint32_t, QList<uint64_t>> &formats)
const;
118 std::unique_ptr<Surface> createSurface(
const QSize &size,
const QMap<uint32_t, QList<uint64_t>> &formats)
const;
119 std::unique_ptr<Surface> createSurface(
const QSize &size, uint32_t
format,
const QList<uint64_t> &modifiers, MultiGpuImportMode importMode,
BufferTarget bufferTarget)
const;
120 std::shared_ptr<EglSwapchain> createGbmSwapchain(DrmGpu *gpu, EglContext *context,
const QSize &size, uint32_t
format,
const QList<uint64_t> &modifiers, MultiGpuImportMode importMode,
BufferTarget bufferTarget)
const;
122 std::shared_ptr<DrmFramebuffer> doRenderTestBuffer(Surface *surface)
const;
123 std::shared_ptr<DrmFramebuffer> importBuffer(Surface *surface, EglSwapchainSlot *source,
const FileDescriptor &readFence)
const;
124 std::shared_ptr<DrmFramebuffer> importWithEgl(Surface *surface, GraphicsBuffer *sourceBuffer,
const FileDescriptor &readFence)
const;
125 std::shared_ptr<DrmFramebuffer> importWithCpu(Surface *surface, EglSwapchainSlot *source)
const;
127 std::unique_ptr<Surface> m_surface;
128 std::unique_ptr<Surface> m_oldSurface;
131 EglGbmBackend *
const m_eglBackend;
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)