mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-02 09:01:38 -05:00
output: make wlr_output_set_gamma atomic
wlr_output_set_gamma is now double-buffered and applies the gamma LUT on the next output commit.
This commit is contained in:
parent
7693fdb8a7
commit
347bdb6d9a
9 changed files with 100 additions and 105 deletions
|
|
@ -44,7 +44,6 @@ struct wlr_drm_plane {
|
|||
|
||||
enum wlr_drm_crtc_field {
|
||||
WLR_DRM_CRTC_MODE = 1 << 0,
|
||||
WLR_DRM_CRTC_GAMMA_LUT = 1 << 1,
|
||||
};
|
||||
|
||||
struct wlr_drm_crtc {
|
||||
|
|
@ -72,9 +71,6 @@ struct wlr_drm_crtc {
|
|||
uint32_t *overlays;
|
||||
|
||||
union wlr_drm_crtc_props props;
|
||||
|
||||
uint16_t *gamma_table;
|
||||
size_t gamma_table_size;
|
||||
};
|
||||
|
||||
struct wlr_drm_backend {
|
||||
|
|
@ -156,16 +152,11 @@ void restore_drm_outputs(struct wlr_drm_backend *drm);
|
|||
void scan_drm_connectors(struct wlr_drm_backend *state);
|
||||
int handle_drm_event(int fd, uint32_t mask, void *data);
|
||||
bool enable_drm_connector(struct wlr_output *output, bool enable);
|
||||
bool set_drm_connector_gamma(struct wlr_output *output, size_t size,
|
||||
const uint16_t *r, const uint16_t *g, const uint16_t *b);
|
||||
bool drm_connector_set_mode(struct wlr_output *output,
|
||||
struct wlr_output_mode *mode);
|
||||
size_t drm_crtc_get_gamma_lut_size(struct wlr_drm_backend *drm,
|
||||
struct wlr_drm_crtc *crtc);
|
||||
|
||||
struct wlr_drm_fb *plane_get_next_fb(struct wlr_drm_plane *plane);
|
||||
|
||||
bool legacy_crtc_set_cursor(struct wlr_drm_backend *drm,
|
||||
struct wlr_drm_crtc *crtc, struct gbm_bo *bo);
|
||||
bool legacy_crtc_move_cursor(struct wlr_drm_backend *drm,
|
||||
struct wlr_drm_crtc *crtc, int x, int y);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -22,6 +22,6 @@ extern const struct wlr_drm_interface atomic_iface;
|
|||
extern const struct wlr_drm_interface legacy_iface;
|
||||
|
||||
bool drm_legacy_crtc_set_gamma(struct wlr_drm_backend *drm,
|
||||
struct wlr_drm_crtc *crtc);
|
||||
struct wlr_drm_crtc *crtc, size_t size, uint16_t *lut);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ struct wlr_output_impl {
|
|||
bool (*test)(struct wlr_output *output);
|
||||
bool (*commit)(struct wlr_output *output);
|
||||
void (*rollback)(struct wlr_output *output);
|
||||
bool (*set_gamma)(struct wlr_output *output, size_t size,
|
||||
const uint16_t *r, const uint16_t *g, const uint16_t *b);
|
||||
size_t (*get_gamma_size)(struct wlr_output *output);
|
||||
bool (*export_dmabuf)(struct wlr_output *output,
|
||||
struct wlr_dmabuf_attributes *attribs);
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ enum wlr_output_state_field {
|
|||
WLR_OUTPUT_STATE_SCALE = 1 << 4,
|
||||
WLR_OUTPUT_STATE_TRANSFORM = 1 << 5,
|
||||
WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED = 1 << 6,
|
||||
WLR_OUTPUT_STATE_GAMMA_LUT = 1 << 7,
|
||||
};
|
||||
|
||||
enum wlr_output_state_buffer_type {
|
||||
|
|
@ -94,6 +95,10 @@ struct wlr_output_state {
|
|||
int32_t width, height;
|
||||
int32_t refresh; // mHz, may be zero
|
||||
} custom_mode;
|
||||
|
||||
// only valid if WLR_OUTPUT_STATE_GAMMA_LUT
|
||||
uint16_t *gamma_lut;
|
||||
size_t gamma_lut_size;
|
||||
};
|
||||
|
||||
struct wlr_output_impl;
|
||||
|
|
@ -375,8 +380,10 @@ size_t wlr_output_get_gamma_size(struct wlr_output *output);
|
|||
* the value returned by `wlr_output_get_gamma_size`.
|
||||
*
|
||||
* Providing zero-sized ramps resets the gamma table.
|
||||
*
|
||||
* The gamma table is double-buffered state, see `wlr_output_commit`.
|
||||
*/
|
||||
bool wlr_output_set_gamma(struct wlr_output *output, size_t size,
|
||||
void wlr_output_set_gamma(struct wlr_output *output, size_t size,
|
||||
const uint16_t *r, const uint16_t *g, const uint16_t *b);
|
||||
bool wlr_output_export_dmabuf(struct wlr_output *output,
|
||||
struct wlr_dmabuf_attributes *attribs);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue