mutter/src/backends/meta-crtc.h
Sebastian Wick af8ef6cf02 native/crtc-kms: Unset config of CRTCs which are not part of a modeset
This allows us to keep track when primary and cursor plane assignments
on a CRTC are unassigned. With this commit, all planes which are
assigned are actually in use and can't be assigned to anything else.

We'll make use of that fact when we search for a leasable primary plane.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3746>
2024-06-20 09:31:02 +00:00

142 lines
4.4 KiB
C

/*
* Copyright (C) 2017 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <glib-object.h>
#include "backends/meta-backend-types.h"
#include "backends/meta-crtc-mode.h"
#include "backends/meta-monitor-transform.h"
#include "core/util-private.h"
#include "meta/boxes.h"
typedef struct _MetaCrtcConfig
{
graphene_rect_t layout;
MetaMonitorTransform transform;
MetaCrtcMode *mode;
} MetaCrtcConfig;
#define META_TYPE_CRTC (meta_crtc_get_type ())
META_EXPORT_TEST
G_DECLARE_DERIVABLE_TYPE (MetaCrtc, meta_crtc, META, CRTC, GObject)
struct _MetaCrtcClass
{
GObjectClass parent_class;
size_t (* get_gamma_lut_size) (MetaCrtc *crtc);
MetaGammaLut * (* get_gamma_lut) (MetaCrtc *crtc);
void (* set_gamma_lut) (MetaCrtc *crtc,
const MetaGammaLut *lut);
gboolean (* assign_extra) (MetaCrtc *crtc,
MetaCrtcAssignment *crtc_assignment,
GPtrArray *crtc_assignments,
GError **error);
void (* set_config) (MetaCrtc *crtc,
const MetaCrtcConfig *config,
gpointer backend_private);
void (* unset_config) (MetaCrtc *crtc);
gboolean (* is_leased) (MetaCrtc *crtc);
};
META_EXPORT_TEST
uint64_t meta_crtc_get_id (MetaCrtc *crtc);
META_EXPORT_TEST
MetaBackend * meta_crtc_get_backend (MetaCrtc *crtc);
META_EXPORT_TEST
MetaGpu * meta_crtc_get_gpu (MetaCrtc *crtc);
META_EXPORT_TEST
const GList * meta_crtc_get_outputs (MetaCrtc *crtc);
void meta_crtc_assign_output (MetaCrtc *crtc,
MetaOutput *output);
META_EXPORT_TEST
void meta_crtc_unassign_output (MetaCrtc *crtc,
MetaOutput *output);
MetaMonitorTransform meta_crtc_get_all_transforms (MetaCrtc *crtc);
META_EXPORT_TEST
void meta_crtc_set_config (MetaCrtc *crtc,
MetaCrtcConfig *config,
gpointer backend_private);
META_EXPORT_TEST
void meta_crtc_unset_config (MetaCrtc *crtc);
META_EXPORT_TEST
const MetaCrtcConfig * meta_crtc_get_config (MetaCrtc *crtc);
gboolean meta_crtc_assign_extra (MetaCrtc *crtc,
MetaCrtcAssignment *crtc_assignment,
GPtrArray *crtc_assignments,
GError **error);
size_t meta_crtc_get_gamma_lut_size (MetaCrtc *crtc);
MetaGammaLut * meta_crtc_get_gamma_lut (MetaCrtc *crtc);
void meta_crtc_set_gamma_lut (MetaCrtc *crtc,
const MetaGammaLut *lut);
META_EXPORT_TEST
void meta_gamma_lut_free (MetaGammaLut *lut);
META_EXPORT_TEST
MetaGammaLut * meta_gamma_lut_new (int size,
const uint16_t *red,
const uint16_t *green,
const uint16_t *blue);
META_EXPORT_TEST
MetaGammaLut * meta_gamma_lut_new_sized (int size);
MetaGammaLut *meta_gamma_lut_new_identity (int size);
gboolean meta_gamma_lut_is_identity (const MetaGammaLut *lut);
META_EXPORT_TEST
MetaGammaLut * meta_gamma_lut_copy (const MetaGammaLut *gamma);
MetaGammaLut * meta_gamma_lut_copy_to_size (const MetaGammaLut *gamma,
int target_size);
META_EXPORT_TEST
gboolean meta_gamma_lut_equal (const MetaGammaLut *gamma,
const MetaGammaLut *other_gamma);
META_EXPORT_TEST
MetaCrtcConfig * meta_crtc_config_new (graphene_rect_t *layout,
MetaCrtcMode *mode,
MetaMonitorTransform transform);
gboolean meta_crtc_is_leased (MetaCrtc *crtc);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaGammaLut, meta_gamma_lut_free)