wayland/color-management: Update to upstream wp_color_management_v1

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4291>
This commit is contained in:
Sebastian Wick 2025-02-19 01:28:15 +01:00 committed by Marge Bot
parent b1ef99bf23
commit 4fe1e41ab3
11 changed files with 256 additions and 1658 deletions

View File

@ -106,7 +106,7 @@ variables:
- .skip-git-clone - .skip-git-clone
variables: variables:
FDO_DISTRIBUTION_VERSION: 41 FDO_DISTRIBUTION_VERSION: 41
BASE_TAG: '2025-02-13.0' BASE_TAG: '2025-02-19.1'
MUTTER_USER: 'meta-user' MUTTER_USER: 'meta-user'
FDO_DISTRIBUTION_PACKAGES: FDO_DISTRIBUTION_PACKAGES:
accountsservice-devel accountsservice-devel
@ -158,10 +158,6 @@ variables:
https://gitlab.gnome.org/GNOME/gi-docgen.git \ https://gitlab.gnome.org/GNOME/gi-docgen.git \
main main
./.gitlab-ci/install-meson-project.sh \
https://gitlab.freedesktop.org/wayland/wayland-protocols.git \
1.38
./.gitlab-ci/install-common-dependencies.sh ./.gitlab-ci/install-common-dependencies.sh
rpm -e --nodeps gnome-bluetooth-libs-devel \ rpm -e --nodeps gnome-bluetooth-libs-devel \

View File

@ -149,3 +149,11 @@ then
https://gitlab.gnome.org/GNOME/gjs.git \ https://gitlab.gnome.org/GNOME/gjs.git \
master master
fi fi
if ! pkgconf --atleast-version 1.41 wayland-protocols
then
./$SCRIPTS_DIR/install-meson-project.sh \
"${OPTIONS[@]}" \
https://gitlab.freedesktop.org/wayland/wayland-protocols.git \
1.41
fi

View File

@ -149,6 +149,13 @@ static const ClutterLuminance sdr_default_luminance = {
.ref = 80.0f, .ref = 80.0f,
}; };
static const ClutterLuminance bt709_default_luminance = {
.type = CLUTTER_LUMINANCE_TYPE_DERIVED,
.min = 0.01f,
.max = 100.0f,
.ref = 100.0f,
};
static const ClutterLuminance pq_default_luminance = { static const ClutterLuminance pq_default_luminance = {
.type = CLUTTER_LUMINANCE_TYPE_DERIVED, .type = CLUTTER_LUMINANCE_TYPE_DERIVED,
.min = 0.005f, .min = 0.005f,
@ -165,9 +172,10 @@ clutter_eotf_get_default_luminance (ClutterEOTF eotf)
switch (eotf.tf_name) switch (eotf.tf_name)
{ {
case CLUTTER_TRANSFER_FUNCTION_SRGB: case CLUTTER_TRANSFER_FUNCTION_SRGB:
case CLUTTER_TRANSFER_FUNCTION_BT709:
case CLUTTER_TRANSFER_FUNCTION_LINEAR: case CLUTTER_TRANSFER_FUNCTION_LINEAR:
return &sdr_default_luminance; return &sdr_default_luminance;
case CLUTTER_TRANSFER_FUNCTION_BT709:
return &bt709_default_luminance;
case CLUTTER_TRANSFER_FUNCTION_PQ: case CLUTTER_TRANSFER_FUNCTION_PQ:
return &pq_default_luminance; return &pq_default_luminance;
} }

View File

@ -47,7 +47,7 @@ gudev_req = '>= 238'
# wayland version requirements # wayland version requirements
wayland_server_req = '>= 1.23' wayland_server_req = '>= 1.23'
wayland_protocols_req = '>= 1.38' wayland_protocols_req = '>= 1.41'
# native backend version requirements # native backend version requirements
libinput_req = '>= 1.27.0' libinput_req = '>= 1.27.0'

View File

@ -1118,7 +1118,7 @@ if have_wayland
# - protocol stability ('private', 'stable' or 'unstable') # - protocol stability ('private', 'stable' or 'unstable')
# - protocol version (if stability is 'unstable') # - protocol version (if stability is 'unstable')
wayland_protocols = [ wayland_protocols = [
['color-management-v1', 'private', ], ['color-management', 'staging', 'v1', ],
['commit-timing', 'staging', 'v1', ], ['commit-timing', 'staging', 'v1', ],
['cursor-shape-v1', 'private', ], ['cursor-shape-v1', 'private', ],
['drm-lease', 'staging', 'v1', ], ['drm-lease', 'staging', 'v1', ],

View File

@ -90,6 +90,12 @@ wait_for_configure (WaylandDisplay *display)
wayland_display_dispatch (display); wayland_display_dispatch (display);
} }
static uint32_t
float_to_scaled_uint32_chromaticity (float value)
{
return (uint32_t) (value * 1000000);
}
static uint32_t static uint32_t
float_to_scaled_uint32 (float value) float_to_scaled_uint32 (float value)
{ {
@ -98,7 +104,7 @@ float_to_scaled_uint32 (float value)
static void static void
handle_image_description_failed (void *data, handle_image_description_failed (void *data,
struct xx_image_description_v4 *image_description_v4, struct wp_image_description_v1 *image_description_v4,
uint32_t cause, uint32_t cause,
const char *msg) const char *msg)
@ -110,7 +116,7 @@ handle_image_description_failed (void *data,
static void static void
handle_image_description_ready (void *data, handle_image_description_ready (void *data,
struct xx_image_description_v4 *image_description_v4, struct wp_image_description_v1 *image_description_v4,
uint32_t identity) uint32_t identity)
{ {
ImageDescriptionContext *image_description_context = data; ImageDescriptionContext *image_description_context = data;
@ -118,7 +124,7 @@ handle_image_description_ready (void *data,
image_description_context->image_description_id = identity; image_description_context->image_description_id = identity;
} }
static const struct xx_image_description_v4_listener image_description_listener = { static const struct wp_image_description_v1_listener image_description_listener = {
handle_image_description_failed, handle_image_description_failed,
handle_image_description_ready, handle_image_description_ready,
}; };
@ -134,7 +140,7 @@ wait_for_image_description_ready (ImageDescriptionContext *image_description,
static void static void
create_image_description_from_params (WaylandDisplay *display, create_image_description_from_params (WaylandDisplay *display,
struct xx_image_description_v4 **image_description, struct wp_image_description_v1 **image_description,
int primaries_named, int primaries_named,
Primaries *primaries, Primaries *primaries,
int tf_named, int tf_named,
@ -144,41 +150,41 @@ create_image_description_from_params (WaylandDisplay *display,
float ref_lum) float ref_lum)
{ {
struct xx_image_description_creator_params_v4 *creator_params; struct wp_image_description_creator_params_v1 *creator_params;
ImageDescriptionContext image_description_context; ImageDescriptionContext image_description_context;
creator_params = creator_params =
xx_color_manager_v4_new_parametric_creator (display->color_management_mgr); wp_color_manager_v1_create_parametric_creator (display->color_management_mgr);
if (primaries_named != -1) if (primaries_named != -1)
xx_image_description_creator_params_v4_set_primaries_named ( wp_image_description_creator_params_v1_set_primaries_named (
creator_params, creator_params,
primaries_named); primaries_named);
if (primaries) if (primaries)
xx_image_description_creator_params_v4_set_primaries ( wp_image_description_creator_params_v1_set_primaries (
creator_params, creator_params,
float_to_scaled_uint32 (primaries->r_x), float_to_scaled_uint32_chromaticity (primaries->r_x),
float_to_scaled_uint32 (primaries->r_y), float_to_scaled_uint32_chromaticity (primaries->r_y),
float_to_scaled_uint32 (primaries->g_x), float_to_scaled_uint32_chromaticity (primaries->g_x),
float_to_scaled_uint32 (primaries->g_y), float_to_scaled_uint32_chromaticity (primaries->g_y),
float_to_scaled_uint32 (primaries->b_x), float_to_scaled_uint32_chromaticity (primaries->b_x),
float_to_scaled_uint32 (primaries->b_y), float_to_scaled_uint32_chromaticity (primaries->b_y),
float_to_scaled_uint32 (primaries->w_x), float_to_scaled_uint32_chromaticity (primaries->w_x),
float_to_scaled_uint32 (primaries->w_y)); float_to_scaled_uint32_chromaticity (primaries->w_y));
if (tf_named != -1) if (tf_named != -1)
xx_image_description_creator_params_v4_set_tf_named ( wp_image_description_creator_params_v1_set_tf_named (
creator_params, creator_params,
tf_named); tf_named);
if (tf_power >= 1.0f) if (tf_power >= 1.0f)
xx_image_description_creator_params_v4_set_tf_power ( wp_image_description_creator_params_v1_set_tf_power (
creator_params, creator_params,
float_to_scaled_uint32 (tf_power)); float_to_scaled_uint32 (tf_power));
if (min_lum >= 0.0f && max_lum > 0.0f && ref_lum >= 0.0f) if (min_lum >= 0.0f && max_lum > 0.0f && ref_lum >= 0.0f)
xx_image_description_creator_params_v4_set_luminances ( wp_image_description_creator_params_v1_set_luminances (
creator_params, creator_params,
float_to_scaled_uint32 (min_lum), float_to_scaled_uint32 (min_lum),
(uint32_t) max_lum, (uint32_t) max_lum,
@ -188,8 +194,8 @@ create_image_description_from_params (WaylandDisplay *display,
image_description_context.creation_failed = FALSE; image_description_context.creation_failed = FALSE;
*image_description = *image_description =
xx_image_description_creator_params_v4_create (creator_params); wp_image_description_creator_params_v1_create (creator_params);
xx_image_description_v4_add_listener ( wp_image_description_v1_add_listener (
*image_description, *image_description,
&image_description_listener, &image_description_listener,
&image_description_context); &image_description_context);
@ -208,8 +214,8 @@ main (int argc,
struct xdg_toplevel *xdg_toplevel; struct xdg_toplevel *xdg_toplevel;
struct xdg_surface *xdg_surface; struct xdg_surface *xdg_surface;
struct wl_surface *surface; struct wl_surface *surface;
struct xx_color_management_surface_v4 *color_surface; struct wp_color_management_surface_v1 *color_surface;
struct xx_image_description_v4 *image_description; struct wp_image_description_v1 *image_description;
display = wayland_display_new (WAYLAND_DISPLAY_CAPABILITY_TEST_DRIVER); display = wayland_display_new (WAYLAND_DISPLAY_CAPABILITY_TEST_DRIVER);
@ -220,7 +226,7 @@ main (int argc,
xdg_toplevel_add_listener (xdg_toplevel, &xdg_toplevel_listener, NULL); xdg_toplevel_add_listener (xdg_toplevel, &xdg_toplevel_listener, NULL);
xdg_toplevel_set_title (xdg_toplevel, "color-management"); xdg_toplevel_set_title (xdg_toplevel, "color-management");
color_surface = color_surface =
xx_color_manager_v4_get_surface (display->color_management_mgr, surface); wp_color_manager_v1_get_surface (display->color_management_mgr, surface);
wl_surface_commit (surface); wl_surface_commit (surface);
wait_for_configure (display); wait_for_configure (display);
@ -230,42 +236,42 @@ main (int argc,
create_image_description_from_params (display, create_image_description_from_params (display,
&image_description, &image_description,
XX_COLOR_MANAGER_V4_PRIMARIES_BT2020, WP_COLOR_MANAGER_V1_PRIMARIES_BT2020,
NULL, NULL,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_ST2084_PQ, WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_ST2084_PQ,
-1.0f, -1.0f,
0.005f, 0.005f,
10000.0f, 10000.0f,
303.0f); 303.0f);
xx_color_management_surface_v4_set_image_description ( wp_color_management_surface_v1_set_image_description (
color_surface, color_surface,
image_description, image_description,
XX_COLOR_MANAGER_V4_RENDER_INTENT_PERCEPTUAL); WP_COLOR_MANAGER_V1_RENDER_INTENT_PERCEPTUAL);
wl_surface_commit (surface); wl_surface_commit (surface);
xx_image_description_v4_destroy (image_description); wp_image_description_v1_destroy (image_description);
test_driver_sync_point (display->test_driver, 1, NULL); test_driver_sync_point (display->test_driver, 1, NULL);
wait_for_sync_event (display, 1); wait_for_sync_event (display, 1);
create_image_description_from_params (display, create_image_description_from_params (display,
&image_description, &image_description,
XX_COLOR_MANAGER_V4_PRIMARIES_SRGB, WP_COLOR_MANAGER_V1_PRIMARIES_SRGB,
NULL, NULL,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_SRGB, WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_SRGB,
-1.0f, -1.0f,
0.2f, 0.2f,
80.0f, 80.0f,
70.0f); 70.0f);
xx_color_management_surface_v4_set_image_description ( wp_color_management_surface_v1_set_image_description (
color_surface, color_surface,
image_description, image_description,
XX_COLOR_MANAGER_V4_RENDER_INTENT_PERCEPTUAL); WP_COLOR_MANAGER_V1_RENDER_INTENT_PERCEPTUAL);
wl_surface_commit (surface); wl_surface_commit (surface);
xx_image_description_v4_destroy (image_description); wp_image_description_v1_destroy (image_description);
test_driver_sync_point (display->test_driver, 2, NULL); test_driver_sync_point (display->test_driver, 2, NULL);
wait_for_sync_event (display, 2); wait_for_sync_event (display, 2);
@ -279,19 +285,19 @@ main (int argc,
-1.0f, -1.0f,
-1.0f, -1.0f,
-1.0f); -1.0f);
xx_color_management_surface_v4_set_image_description ( wp_color_management_surface_v1_set_image_description (
color_surface, color_surface,
image_description, image_description,
XX_COLOR_MANAGER_V4_RENDER_INTENT_PERCEPTUAL); WP_COLOR_MANAGER_V1_RENDER_INTENT_PERCEPTUAL);
wl_surface_commit (surface); wl_surface_commit (surface);
xx_image_description_v4_destroy (image_description); wp_image_description_v1_destroy (image_description);
test_driver_sync_point (display->test_driver, 3, NULL); test_driver_sync_point (display->test_driver, 3, NULL);
wait_for_sync_event (display, 3); wait_for_sync_event (display, 3);
xx_color_management_surface_v4_destroy (color_surface); wp_color_management_surface_v1_destroy (color_surface);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

View File

@ -448,11 +448,11 @@ handle_registry_global (void *user_data,
wl_registry_bind (registry, id, wl_registry_bind (registry, id,
&wp_single_pixel_buffer_manager_v1_interface, 1); &wp_single_pixel_buffer_manager_v1_interface, 1);
} }
else if (strcmp (interface, xx_color_manager_v4_interface.name) == 0) else if (strcmp (interface, wp_color_manager_v1_interface.name) == 0)
{ {
display->color_management_mgr = display->color_management_mgr =
wl_registry_bind (registry, id, wl_registry_bind (registry, id,
&xx_color_manager_v4_interface, 1); &wp_color_manager_v1_interface, 1);
} }
else if (strcmp (interface, wp_viewporter_interface.name) == 0) else if (strcmp (interface, wp_viewporter_interface.name) == 0)
{ {

View File

@ -43,7 +43,7 @@ typedef struct _WaylandDisplay
struct zwp_linux_dmabuf_v1 *linux_dmabuf; struct zwp_linux_dmabuf_v1 *linux_dmabuf;
struct wp_fractional_scale_manager_v1 *fractional_scale_mgr; struct wp_fractional_scale_manager_v1 *fractional_scale_mgr;
struct wp_single_pixel_buffer_manager_v1 *single_pixel_mgr; struct wp_single_pixel_buffer_manager_v1 *single_pixel_mgr;
struct xx_color_manager_v4 *color_management_mgr; struct wp_color_manager_v1 *color_management_mgr;
struct wp_viewporter *viewporter; struct wp_viewporter *viewporter;
struct xdg_wm_base *xdg_wm_base; struct xdg_wm_base *xdg_wm_base;
struct wl_seat *wl_seat; struct wl_seat *wl_seat;

View File

@ -166,6 +166,18 @@ get_clutter_color_manager (MetaWaylandColorManager *color_manager)
return clutter_context_get_color_manager (clutter_context); return clutter_context_get_color_manager (clutter_context);
} }
static float
scaled_uint32_to_float_chromaticity (uint32_t value)
{
return value * 0.000001f;
}
static uint32_t
float_to_scaled_uint32_chromaticity (float value)
{
return (uint32_t) (value * 1000000);
}
static float static float
scaled_uint32_to_float (uint32_t value) scaled_uint32_to_float (uint32_t value)
{ {
@ -179,28 +191,28 @@ float_to_scaled_uint32 (float value)
} }
static gboolean static gboolean
wayland_tf_to_clutter (enum xx_color_manager_v4_transfer_function tf, wayland_tf_to_clutter (enum wp_color_manager_v1_transfer_function tf,
ClutterEOTF *eotf) ClutterEOTF *eotf)
{ {
switch (tf) switch (tf)
{ {
case XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA22: case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA22:
eotf->type = CLUTTER_EOTF_TYPE_GAMMA; eotf->type = CLUTTER_EOTF_TYPE_GAMMA;
eotf->gamma_exp = 2.2f; eotf->gamma_exp = 2.2f;
return TRUE; return TRUE;
case XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA28: case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA28:
eotf->type = CLUTTER_EOTF_TYPE_GAMMA; eotf->type = CLUTTER_EOTF_TYPE_GAMMA;
eotf->gamma_exp = 2.8f; eotf->gamma_exp = 2.8f;
return TRUE; return TRUE;
case XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_SRGB: case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_SRGB:
eotf->type = CLUTTER_EOTF_TYPE_NAMED; eotf->type = CLUTTER_EOTF_TYPE_NAMED;
eotf->tf_name = CLUTTER_TRANSFER_FUNCTION_SRGB; eotf->tf_name = CLUTTER_TRANSFER_FUNCTION_SRGB;
return TRUE; return TRUE;
case XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_ST2084_PQ: case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_ST2084_PQ:
eotf->type = CLUTTER_EOTF_TYPE_NAMED; eotf->type = CLUTTER_EOTF_TYPE_NAMED;
eotf->tf_name = CLUTTER_TRANSFER_FUNCTION_PQ; eotf->tf_name = CLUTTER_TRANSFER_FUNCTION_PQ;
return TRUE; return TRUE;
case XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_BT709: case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_BT1886:
eotf->type = CLUTTER_EOTF_TYPE_NAMED; eotf->type = CLUTTER_EOTF_TYPE_NAMED;
eotf->tf_name = CLUTTER_TRANSFER_FUNCTION_BT709; eotf->tf_name = CLUTTER_TRANSFER_FUNCTION_BT709;
return TRUE; return TRUE;
@ -209,38 +221,38 @@ wayland_tf_to_clutter (enum xx_color_manager_v4_transfer_function tf,
} }
} }
static enum xx_color_manager_v4_transfer_function static enum wp_color_manager_v1_transfer_function
clutter_tf_to_wayland (ClutterTransferFunction tf) clutter_tf_to_wayland (ClutterTransferFunction tf)
{ {
switch (tf) switch (tf)
{ {
case CLUTTER_TRANSFER_FUNCTION_SRGB: case CLUTTER_TRANSFER_FUNCTION_SRGB:
return XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_SRGB; return WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_SRGB;
case CLUTTER_TRANSFER_FUNCTION_PQ: case CLUTTER_TRANSFER_FUNCTION_PQ:
return XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_ST2084_PQ; return WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_ST2084_PQ;
case CLUTTER_TRANSFER_FUNCTION_BT709: case CLUTTER_TRANSFER_FUNCTION_BT709:
return XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_BT709; return WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_BT1886;
case CLUTTER_TRANSFER_FUNCTION_LINEAR: case CLUTTER_TRANSFER_FUNCTION_LINEAR:
return XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_LINEAR; return WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_EXT_LINEAR;
} }
g_assert_not_reached (); g_assert_not_reached ();
} }
static gboolean static gboolean
wayland_primaries_to_clutter (enum xx_color_manager_v4_primaries primaries, wayland_primaries_to_clutter (enum wp_color_manager_v1_primaries primaries,
ClutterColorimetry *colorimetry) ClutterColorimetry *colorimetry)
{ {
switch (primaries) switch (primaries)
{ {
case XX_COLOR_MANAGER_V4_PRIMARIES_SRGB: case WP_COLOR_MANAGER_V1_PRIMARIES_SRGB:
colorimetry->type = CLUTTER_COLORIMETRY_TYPE_COLORSPACE; colorimetry->type = CLUTTER_COLORIMETRY_TYPE_COLORSPACE;
colorimetry->colorspace = CLUTTER_COLORSPACE_SRGB; colorimetry->colorspace = CLUTTER_COLORSPACE_SRGB;
return TRUE; return TRUE;
case XX_COLOR_MANAGER_V4_PRIMARIES_BT2020: case WP_COLOR_MANAGER_V1_PRIMARIES_BT2020:
colorimetry->type = CLUTTER_COLORIMETRY_TYPE_COLORSPACE; colorimetry->type = CLUTTER_COLORIMETRY_TYPE_COLORSPACE;
colorimetry->colorspace = CLUTTER_COLORSPACE_BT2020; colorimetry->colorspace = CLUTTER_COLORSPACE_BT2020;
return TRUE; return TRUE;
case XX_COLOR_MANAGER_V4_PRIMARIES_NTSC: case WP_COLOR_MANAGER_V1_PRIMARIES_NTSC:
colorimetry->type = CLUTTER_COLORIMETRY_TYPE_COLORSPACE; colorimetry->type = CLUTTER_COLORIMETRY_TYPE_COLORSPACE;
colorimetry->colorspace = CLUTTER_COLORSPACE_NTSC; colorimetry->colorspace = CLUTTER_COLORSPACE_NTSC;
return TRUE; return TRUE;
@ -249,17 +261,17 @@ wayland_primaries_to_clutter (enum xx_color_manager_v4_primaries primaries,
} }
} }
static enum xx_color_manager_v4_primaries static enum wp_color_manager_v1_primaries
clutter_colorspace_to_wayland (ClutterColorspace colorspace) clutter_colorspace_to_wayland (ClutterColorspace colorspace)
{ {
switch (colorspace) switch (colorspace)
{ {
case CLUTTER_COLORSPACE_SRGB: case CLUTTER_COLORSPACE_SRGB:
return XX_COLOR_MANAGER_V4_PRIMARIES_SRGB; return WP_COLOR_MANAGER_V1_PRIMARIES_SRGB;
case CLUTTER_COLORSPACE_BT2020: case CLUTTER_COLORSPACE_BT2020:
return XX_COLOR_MANAGER_V4_PRIMARIES_BT2020; return WP_COLOR_MANAGER_V1_PRIMARIES_BT2020;
case CLUTTER_COLORSPACE_NTSC: case CLUTTER_COLORSPACE_NTSC:
return XX_COLOR_MANAGER_V4_PRIMARIES_NTSC; return WP_COLOR_MANAGER_V1_PRIMARIES_NTSC;
} }
g_assert_not_reached (); g_assert_not_reached ();
} }
@ -307,7 +319,7 @@ meta_wayland_image_description_new (MetaWaylandColorManager *color_manager,
static MetaWaylandImageDescription * static MetaWaylandImageDescription *
meta_wayland_image_description_new_failed (MetaWaylandColorManager *color_manager, meta_wayland_image_description_new_failed (MetaWaylandColorManager *color_manager,
struct wl_resource *resource, struct wl_resource *resource,
enum xx_image_description_v4_cause cause, enum wp_image_description_v1_cause cause,
const char *message) const char *message)
{ {
MetaWaylandImageDescription *image_desc; MetaWaylandImageDescription *image_desc;
@ -315,7 +327,7 @@ meta_wayland_image_description_new_failed (MetaWaylandColorManager *c
image_desc = meta_wayland_image_description_new (color_manager, resource); image_desc = meta_wayland_image_description_new (color_manager, resource);
image_desc->state = META_WAYLAND_IMAGE_DESCRIPTION_STATE_FAILED; image_desc->state = META_WAYLAND_IMAGE_DESCRIPTION_STATE_FAILED;
image_desc->has_info = FALSE; image_desc->has_info = FALSE;
xx_image_description_v4_send_failed (resource, cause, message); wp_image_description_v1_send_failed (resource, cause, message);
return image_desc; return image_desc;
} }
@ -332,7 +344,7 @@ meta_wayland_image_description_new_color_state (MetaWaylandColorManager
image_desc->state = META_WAYLAND_IMAGE_DESCRIPTION_STATE_READY; image_desc->state = META_WAYLAND_IMAGE_DESCRIPTION_STATE_READY;
image_desc->has_info = !!(flags & META_WAYLAND_IMAGE_DESCRIPTION_FLAGS_ALLOW_INFO); image_desc->has_info = !!(flags & META_WAYLAND_IMAGE_DESCRIPTION_FLAGS_ALLOW_INFO);
image_desc->color_state = g_object_ref (color_state); image_desc->color_state = g_object_ref (color_state);
xx_image_description_v4_send_ready (resource, wp_image_description_v1_send_ready (resource,
clutter_color_state_get_id (color_state)); clutter_color_state_get_id (color_state));
return image_desc; return image_desc;
@ -365,8 +377,8 @@ static void
send_information (struct wl_resource *info_resource, send_information (struct wl_resource *info_resource,
ClutterColorState *color_state) ClutterColorState *color_state)
{ {
enum xx_color_manager_v4_primaries primaries_named; enum wp_color_manager_v1_primaries primaries_named;
enum xx_color_manager_v4_transfer_function tf; enum wp_color_manager_v1_transfer_function tf;
ClutterColorStateParams *color_state_params; ClutterColorStateParams *color_state_params;
const ClutterColorimetry *colorimetry; const ClutterColorimetry *colorimetry;
const ClutterPrimaries *primaries; const ClutterPrimaries *primaries;
@ -380,32 +392,32 @@ send_information (struct wl_resource *info_resource,
{ {
case CLUTTER_COLORIMETRY_TYPE_COLORSPACE: case CLUTTER_COLORIMETRY_TYPE_COLORSPACE:
primaries_named = clutter_colorspace_to_wayland (colorimetry->colorspace); primaries_named = clutter_colorspace_to_wayland (colorimetry->colorspace);
xx_image_description_info_v4_send_primaries_named (info_resource, wp_image_description_info_v1_send_primaries_named (info_resource,
primaries_named); primaries_named);
primaries = clutter_colorspace_to_primaries (colorimetry->colorspace); primaries = clutter_colorspace_to_primaries (colorimetry->colorspace);
xx_image_description_info_v4_send_primaries ( wp_image_description_info_v1_send_primaries (
info_resource, info_resource,
float_to_scaled_uint32 (primaries->r_x), float_to_scaled_uint32_chromaticity (primaries->r_x),
float_to_scaled_uint32 (primaries->r_y), float_to_scaled_uint32_chromaticity (primaries->r_y),
float_to_scaled_uint32 (primaries->g_x), float_to_scaled_uint32_chromaticity (primaries->g_x),
float_to_scaled_uint32 (primaries->g_y), float_to_scaled_uint32_chromaticity (primaries->g_y),
float_to_scaled_uint32 (primaries->b_x), float_to_scaled_uint32_chromaticity (primaries->b_x),
float_to_scaled_uint32 (primaries->b_y), float_to_scaled_uint32_chromaticity (primaries->b_y),
float_to_scaled_uint32 (primaries->w_x), float_to_scaled_uint32_chromaticity (primaries->w_x),
float_to_scaled_uint32 (primaries->w_y)); float_to_scaled_uint32_chromaticity (primaries->w_y));
break; break;
case CLUTTER_COLORIMETRY_TYPE_PRIMARIES: case CLUTTER_COLORIMETRY_TYPE_PRIMARIES:
xx_image_description_info_v4_send_primaries ( wp_image_description_info_v1_send_primaries (
info_resource, info_resource,
float_to_scaled_uint32 (colorimetry->primaries->r_x), float_to_scaled_uint32_chromaticity (colorimetry->primaries->r_x),
float_to_scaled_uint32 (colorimetry->primaries->r_y), float_to_scaled_uint32_chromaticity (colorimetry->primaries->r_y),
float_to_scaled_uint32 (colorimetry->primaries->g_x), float_to_scaled_uint32_chromaticity (colorimetry->primaries->g_x),
float_to_scaled_uint32 (colorimetry->primaries->g_y), float_to_scaled_uint32_chromaticity (colorimetry->primaries->g_y),
float_to_scaled_uint32 (colorimetry->primaries->b_x), float_to_scaled_uint32_chromaticity (colorimetry->primaries->b_x),
float_to_scaled_uint32 (colorimetry->primaries->b_y), float_to_scaled_uint32_chromaticity (colorimetry->primaries->b_y),
float_to_scaled_uint32 (colorimetry->primaries->w_x), float_to_scaled_uint32_chromaticity (colorimetry->primaries->w_x),
float_to_scaled_uint32 (colorimetry->primaries->w_y)); float_to_scaled_uint32_chromaticity (colorimetry->primaries->w_y));
break; break;
} }
@ -414,23 +426,23 @@ send_information (struct wl_resource *info_resource,
{ {
case CLUTTER_EOTF_TYPE_NAMED: case CLUTTER_EOTF_TYPE_NAMED:
tf = clutter_tf_to_wayland (eotf->tf_name); tf = clutter_tf_to_wayland (eotf->tf_name);
xx_image_description_info_v4_send_tf_named (info_resource, tf); wp_image_description_info_v1_send_tf_named (info_resource, tf);
break; break;
case CLUTTER_EOTF_TYPE_GAMMA: case CLUTTER_EOTF_TYPE_GAMMA:
if (G_APPROX_VALUE (eotf->gamma_exp, 2.2f, 0.0001f)) if (G_APPROX_VALUE (eotf->gamma_exp, 2.2f, 0.0001f))
xx_image_description_info_v4_send_tf_named (info_resource, wp_image_description_info_v1_send_tf_named (info_resource,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA22); WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA22);
else if (G_APPROX_VALUE (eotf->gamma_exp, 2.8f, 0.0001f)) else if (G_APPROX_VALUE (eotf->gamma_exp, 2.8f, 0.0001f))
xx_image_description_info_v4_send_tf_named (info_resource, wp_image_description_info_v1_send_tf_named (info_resource,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA28); WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA28);
else else
xx_image_description_info_v4_send_tf_power (info_resource, wp_image_description_info_v1_send_tf_power (info_resource,
float_to_scaled_uint32 (eotf->gamma_exp)); float_to_scaled_uint32 (eotf->gamma_exp));
break; break;
} }
lum = clutter_color_state_params_get_luminance (color_state_params); lum = clutter_color_state_params_get_luminance (color_state_params);
xx_image_description_info_v4_send_luminances (info_resource, wp_image_description_info_v1_send_luminances (info_resource,
float_to_scaled_uint32 (lum->min), float_to_scaled_uint32 (lum->min),
(uint32_t) lum->max, (uint32_t) lum->max,
(uint32_t) lum->ref); (uint32_t) lum->ref);
@ -447,7 +459,7 @@ image_description_get_information (struct wl_client *client,
if (image_desc->state != META_WAYLAND_IMAGE_DESCRIPTION_STATE_READY) if (image_desc->state != META_WAYLAND_IMAGE_DESCRIPTION_STATE_READY)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_V4_ERROR_NOT_READY, WP_IMAGE_DESCRIPTION_V1_ERROR_NOT_READY,
"The image description is not ready"); "The image description is not ready");
return; return;
} }
@ -455,7 +467,7 @@ image_description_get_information (struct wl_client *client,
if (!image_desc->has_info) if (!image_desc->has_info)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_V4_ERROR_NO_INFORMATION, WP_IMAGE_DESCRIPTION_V1_ERROR_NO_INFORMATION,
"The image description has no information"); "The image description has no information");
return; return;
} }
@ -464,17 +476,17 @@ image_description_get_information (struct wl_client *client,
info_resource = info_resource =
wl_resource_create (client, wl_resource_create (client,
&xx_image_description_info_v4_interface, &wp_image_description_info_v1_interface,
wl_resource_get_version (resource), wl_resource_get_version (resource),
id); id);
send_information (info_resource, image_desc->color_state); send_information (info_resource, image_desc->color_state);
xx_image_description_info_v4_send_done (info_resource); wp_image_description_info_v1_send_done (info_resource);
wl_resource_destroy (info_resource); wl_resource_destroy (info_resource);
} }
static const struct xx_image_description_v4_interface static const struct wp_image_description_v1_interface
meta_wayland_image_description_interface = meta_wayland_image_description_interface =
{ {
image_description_destroy, image_description_destroy,
@ -527,7 +539,8 @@ update_preferred_color_state (MetaWaylandColorManagementSurface *cm_surface)
{ {
struct wl_resource *resource = l->data; struct wl_resource *resource = l->data;
xx_color_management_feedback_surface_v4_send_preferred_changed (resource); wp_color_management_surface_feedback_v1_send_preferred_changed (resource,
clutter_color_state_get_id (color_state));
} }
} }
@ -670,9 +683,8 @@ color_management_surface_set_image_description (struct wl_client *client,
if (!cm_surface) if (!cm_surface)
{ {
/* FIXME: the next version will have an ERROR_INERT */
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_COLOR_MANAGEMENT_SURFACE_V4_ERROR_IMAGE_DESCRIPTION, WP_COLOR_MANAGEMENT_SURFACE_V1_ERROR_INERT,
"Underlying surface object has been destroyed"); "Underlying surface object has been destroyed");
return; return;
} }
@ -681,18 +693,18 @@ color_management_surface_set_image_description (struct wl_client *client,
image_desc->state != META_WAYLAND_IMAGE_DESCRIPTION_STATE_READY) image_desc->state != META_WAYLAND_IMAGE_DESCRIPTION_STATE_READY)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_COLOR_MANAGEMENT_SURFACE_V4_ERROR_IMAGE_DESCRIPTION, WP_COLOR_MANAGEMENT_SURFACE_V1_ERROR_IMAGE_DESCRIPTION,
"Trying to set an image description which is not ready"); "Trying to set an image description which is not ready");
return; return;
} }
switch (render_intent) switch (render_intent)
{ {
case XX_COLOR_MANAGER_V4_RENDER_INTENT_PERCEPTUAL: case WP_COLOR_MANAGER_V1_RENDER_INTENT_PERCEPTUAL:
break; break;
default: default:
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_COLOR_MANAGEMENT_SURFACE_V4_ERROR_RENDER_INTENT, WP_COLOR_MANAGEMENT_SURFACE_V1_ERROR_RENDER_INTENT,
"Trying to use an unsupported rendering intent"); "Trying to use an unsupported rendering intent");
return; return;
} }
@ -709,9 +721,8 @@ color_management_surface_unset_image_description (struct wl_client *client,
if (!cm_surface) if (!cm_surface)
{ {
/* FIXME: the next version will have an ERROR_INERT */
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_COLOR_MANAGEMENT_SURFACE_V4_ERROR_IMAGE_DESCRIPTION, WP_COLOR_MANAGEMENT_SURFACE_V1_ERROR_INERT,
"Underlying surface object has been destroyed"); "Underlying surface object has been destroyed");
return; return;
} }
@ -719,7 +730,7 @@ color_management_surface_unset_image_description (struct wl_client *client,
set_image_description (cm_surface, NULL); set_image_description (cm_surface, NULL);
} }
static const struct xx_color_management_surface_v4_interface static const struct wp_color_management_surface_v1_interface
meta_wayland_color_management_surface_interface = meta_wayland_color_management_surface_interface =
{ {
color_management_surface_destroy, color_management_surface_destroy,
@ -829,7 +840,7 @@ color_management_output_get_image_description (struct wl_client *client,
image_desc_resource = image_desc_resource =
wl_resource_create (client, wl_resource_create (client,
&xx_image_description_v4_interface, &wp_image_description_v1_interface,
wl_resource_get_version (resource), wl_resource_get_version (resource),
id); id);
@ -851,7 +862,7 @@ color_management_output_get_image_description (struct wl_client *client,
image_desc = image_desc =
meta_wayland_image_description_new_failed (color_manager, meta_wayland_image_description_new_failed (color_manager,
image_desc_resource, image_desc_resource,
XX_IMAGE_DESCRIPTION_V4_CAUSE_NO_OUTPUT, WP_IMAGE_DESCRIPTION_V1_CAUSE_NO_OUTPUT,
"Underlying output object has been destroyed"); "Underlying output object has been destroyed");
} }
@ -861,7 +872,7 @@ color_management_output_get_image_description (struct wl_client *client,
image_description_destructor); image_description_destructor);
} }
static const struct xx_color_management_output_v4_interface static const struct wp_color_management_output_v1_interface
meta_wayland_color_management_output_interface = meta_wayland_color_management_output_interface =
{ {
color_management_output_destroy, color_management_output_destroy,
@ -915,14 +926,14 @@ creator_params_create (struct wl_client *client,
if (!creator_params->is_colorimetry_set || !creator_params->is_eotf_set) if (!creator_params->is_colorimetry_set || !creator_params->is_eotf_set)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INCOMPLETE_SET, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INCOMPLETE_SET,
"Not all required parameters were set"); "Not all required parameters were set");
return; return;
} }
image_desc_resource = image_desc_resource =
wl_resource_create (client, wl_resource_create (client,
&xx_image_description_v4_interface, &wp_image_description_v1_interface,
wl_resource_get_version (resource), wl_resource_get_version (resource),
id); id);
@ -958,7 +969,7 @@ creator_params_set_tf_named (struct wl_client *client,
if (creator_params->is_eotf_set) if (creator_params->is_eotf_set)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET,
"The transfer characteristics were already set"); "The transfer characteristics were already set");
return; return;
} }
@ -966,7 +977,7 @@ creator_params_set_tf_named (struct wl_client *client,
if (!wayland_tf_to_clutter (tf, &eotf)) if (!wayland_tf_to_clutter (tf, &eotf))
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_TF, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INVALID_TF,
"The named transfer function is not supported"); "The named transfer function is not supported");
return; return;
} }
@ -986,7 +997,7 @@ creator_params_set_tf_power (struct wl_client *client,
if (creator_params->is_eotf_set) if (creator_params->is_eotf_set)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET,
"The transfer characteristics were already set"); "The transfer characteristics were already set");
return; return;
} }
@ -994,7 +1005,7 @@ creator_params_set_tf_power (struct wl_client *client,
if (eexp < 10000 || eexp > 100000) if (eexp < 10000 || eexp > 100000)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_TF, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INVALID_TF,
"The exponent must be between 1.0 and 10.0"); "The exponent must be between 1.0 and 10.0");
return; return;
} }
@ -1016,7 +1027,7 @@ creator_params_set_primaries_named (struct wl_client *client,
if (creator_params->is_colorimetry_set) if (creator_params->is_colorimetry_set)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET,
"The primaries were already set"); "The primaries were already set");
return; return;
} }
@ -1024,7 +1035,7 @@ creator_params_set_primaries_named (struct wl_client *client,
if (!wayland_primaries_to_clutter (primaries, &colorimetry)) if (!wayland_primaries_to_clutter (primaries, &colorimetry))
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_PRIMARIES, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INVALID_PRIMARIES_NAMED,
"The named primaries are not supported"); "The named primaries are not supported");
return; return;
} }
@ -1052,20 +1063,20 @@ creator_params_set_primaries (struct wl_client *client,
if (creator_params->is_colorimetry_set) if (creator_params->is_colorimetry_set)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET,
"The primaries were already set"); "The primaries were already set");
return; return;
} }
primaries = g_new0 (ClutterPrimaries, 1); primaries = g_new0 (ClutterPrimaries, 1);
primaries->r_x = scaled_uint32_to_float (r_x); primaries->r_x = scaled_uint32_to_float_chromaticity (r_x);
primaries->r_y = scaled_uint32_to_float (r_y); primaries->r_y = scaled_uint32_to_float_chromaticity (r_y);
primaries->g_x = scaled_uint32_to_float (g_x); primaries->g_x = scaled_uint32_to_float_chromaticity (g_x);
primaries->g_y = scaled_uint32_to_float (g_y); primaries->g_y = scaled_uint32_to_float_chromaticity (g_y);
primaries->b_x = scaled_uint32_to_float (b_x); primaries->b_x = scaled_uint32_to_float_chromaticity (b_x);
primaries->b_y = scaled_uint32_to_float (b_y); primaries->b_y = scaled_uint32_to_float_chromaticity (b_y);
primaries->w_x = scaled_uint32_to_float (w_x); primaries->w_x = scaled_uint32_to_float_chromaticity (w_x);
primaries->w_y = scaled_uint32_to_float (w_y); primaries->w_y = scaled_uint32_to_float_chromaticity (w_y);
if (primaries->r_x < 0.0f || primaries->r_x > 1.0f || if (primaries->r_x < 0.0f || primaries->r_x > 1.0f ||
primaries->r_y < 0.0f || primaries->r_y > 1.0f || primaries->r_y < 0.0f || primaries->r_y > 1.0f ||
@ -1099,7 +1110,7 @@ creator_params_set_luminance (struct wl_client *client,
if (creator_params->is_luminance_set) if (creator_params->is_luminance_set)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_ALREADY_SET, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_ALREADY_SET,
"The luminance was already set"); "The luminance was already set");
return; return;
} }
@ -1108,18 +1119,18 @@ creator_params_set_luminance (struct wl_client *client,
max = (float) max_lum; max = (float) max_lum;
ref = (float) reference_lum; ref = (float) reference_lum;
if (max < ref) if (max <= min)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_LUMINANCE, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INVALID_LUMINANCE,
"The maximum luminance is smaller than the reference luminance"); "The maximum luminance is smaller than the minimum luminance");
return; return;
} }
if (ref <= min) if (ref <= min)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_LUMINANCE, WP_IMAGE_DESCRIPTION_CREATOR_PARAMS_V1_ERROR_INVALID_LUMINANCE,
"The reference luminance is less or equal to the minimum luminance"); "The reference luminance is less or equal to the minimum luminance");
return; return;
} }
@ -1144,7 +1155,7 @@ creator_params_set_mastering_display_primaries (struct wl_client *client,
int32_t w_y) int32_t w_y)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_MASTERING, WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE,
"Setting mastering display primaries is not supported"); "Setting mastering display primaries is not supported");
} }
@ -1155,7 +1166,7 @@ creator_params_set_mastering_luminance (struct wl_client *client,
uint32_t max_lum) uint32_t max_lum)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_IMAGE_DESCRIPTION_CREATOR_PARAMS_V4_ERROR_INVALID_MASTERING, WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE,
"Setting mastering display luminances is not supported"); "Setting mastering display luminances is not supported");
} }
@ -1177,7 +1188,7 @@ creator_params_set_max_fall (struct wl_client *client,
/* FIXME: technically we must send errors in some cases */ /* FIXME: technically we must send errors in some cases */
} }
static const struct xx_image_description_creator_params_v4_interface static const struct wp_image_description_creator_params_v1_interface
meta_wayland_image_description_creator_params_interface = meta_wayland_image_description_creator_params_interface =
{ {
creator_params_create, creator_params_create,
@ -1220,7 +1231,7 @@ color_manager_get_output (struct wl_client *client,
cm_output_resource = cm_output_resource =
wl_resource_create (client, wl_resource_create (client,
&xx_color_management_output_v4_interface, &wp_color_management_output_v1_interface,
wl_resource_get_version (resource), wl_resource_get_version (resource),
id); id);
@ -1253,14 +1264,14 @@ color_manager_get_surface (struct wl_client *client,
if (cm_surface->resource) if (cm_surface->resource)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_COLOR_MANAGER_V4_ERROR_SURFACE_EXISTS, WP_COLOR_MANAGER_V1_ERROR_SURFACE_EXISTS,
"surface already requested"); "surface already requested");
return; return;
} }
cm_surface->resource = cm_surface->resource =
wl_resource_create (client, wl_resource_create (client,
&xx_color_management_surface_v4_interface, &wp_color_management_surface_v1_interface,
wl_resource_get_version (resource), wl_resource_get_version (resource),
id); id);
@ -1271,14 +1282,14 @@ color_manager_get_surface (struct wl_client *client,
} }
static void static void
color_management_feedback_surface_destroy (struct wl_client *client, color_management_surface_feedback_destroy (struct wl_client *client,
struct wl_resource *resource) struct wl_resource *resource)
{ {
wl_resource_destroy (resource); wl_resource_destroy (resource);
} }
static void static void
color_management_feedback_surface_get_preferred (struct wl_client *client, color_management_surface_feedback_get_preferred (struct wl_client *client,
struct wl_resource *resource, struct wl_resource *resource,
uint32_t id) uint32_t id)
{ {
@ -1292,14 +1303,14 @@ color_management_feedback_surface_get_preferred (struct wl_client *client,
if (!surface) if (!surface)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_COLOR_MANAGEMENT_FEEDBACK_SURFACE_V4_ERROR_INERT, WP_COLOR_MANAGEMENT_SURFACE_FEEDBACK_V1_ERROR_INERT,
"Underlying surface object has been destroyed"); "Underlying surface object has been destroyed");
return; return;
} }
image_desc_resource = image_desc_resource =
wl_resource_create (client, wl_resource_create (client,
&xx_image_description_v4_interface, &wp_image_description_v1_interface,
wl_resource_get_version (resource), wl_resource_get_version (resource),
id); id);
@ -1316,15 +1327,25 @@ color_management_feedback_surface_get_preferred (struct wl_client *client,
image_description_destructor); image_description_destructor);
} }
static const struct xx_color_management_feedback_surface_v4_interface static void
meta_wayland_color_management_feedback_surface_interface = color_management_surface_feedback_get_preferred_parametric (struct wl_client *client,
struct wl_resource *resource,
uint32_t id)
{ {
color_management_feedback_surface_destroy, /* we currently only support parametric ones, so this is the same as get_preferred */
color_management_feedback_surface_get_preferred, color_management_surface_feedback_get_preferred (client, resource, id);
}
static const struct wp_color_management_surface_feedback_v1_interface
meta_wayland_color_management_surface_feedback_interface =
{
color_management_surface_feedback_destroy,
color_management_surface_feedback_get_preferred,
color_management_surface_feedback_get_preferred_parametric,
}; };
static void static void
color_management_feedback_surface_destructor (struct wl_resource *resource) color_management_surface_feedback_destructor (struct wl_resource *resource)
{ {
MetaWaylandColorManagementSurface *cm_surface = MetaWaylandColorManagementSurface *cm_surface =
wl_resource_get_user_data (resource); wl_resource_get_user_data (resource);
@ -1337,7 +1358,7 @@ color_management_feedback_surface_destructor (struct wl_resource *resource)
} }
static void static void
color_manager_get_feedback_surface (struct wl_client *client, color_manager_get_surface_feedback (struct wl_client *client,
struct wl_resource *resource, struct wl_resource *resource,
uint32_t id, uint32_t id,
struct wl_resource *surface_resource) struct wl_resource *surface_resource)
@ -1345,42 +1366,42 @@ color_manager_get_feedback_surface (struct wl_client *client,
MetaWaylandColorManager *color_manager = wl_resource_get_user_data (resource); MetaWaylandColorManager *color_manager = wl_resource_get_user_data (resource);
MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource); MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource);
MetaWaylandColorManagementSurface *cm_surface; MetaWaylandColorManagementSurface *cm_surface;
struct wl_resource *cm_feedback_surface_resource; struct wl_resource *cm_surface_feedback_resource;
cm_surface = ensure_color_management_surface (color_manager, surface); cm_surface = ensure_color_management_surface (color_manager, surface);
cm_feedback_surface_resource = cm_surface_feedback_resource =
wl_resource_create (client, wl_resource_create (client,
&xx_color_management_feedback_surface_v4_interface, &wp_color_management_surface_feedback_v1_interface,
wl_resource_get_version (resource), wl_resource_get_version (resource),
id); id);
wl_resource_set_implementation (cm_feedback_surface_resource, wl_resource_set_implementation (cm_surface_feedback_resource,
&meta_wayland_color_management_feedback_surface_interface, &meta_wayland_color_management_surface_feedback_interface,
cm_surface, cm_surface,
color_management_feedback_surface_destructor); color_management_surface_feedback_destructor);
cm_surface->feedback_resources = cm_surface->feedback_resources =
g_list_prepend (cm_surface->feedback_resources, g_list_prepend (cm_surface->feedback_resources,
cm_feedback_surface_resource); cm_surface_feedback_resource);
update_preferred_color_state (cm_surface); update_preferred_color_state (cm_surface);
} }
static void static void
color_manager_new_icc_creator (struct wl_client *client, color_manager_create_icc_creator (struct wl_client *client,
struct wl_resource *resource, struct wl_resource *resource,
uint32_t id) uint32_t id)
{ {
wl_resource_post_error (resource, wl_resource_post_error (resource,
XX_COLOR_MANAGER_V4_ERROR_UNSUPPORTED_FEATURE, WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE,
"ICC-based image description creator is unsupported"); "ICC-based image description creator is unsupported");
} }
static void static void
color_manager_new_parametric_creator (struct wl_client *client, color_manager_create_parametric_creator (struct wl_client *client,
struct wl_resource *resource, struct wl_resource *resource,
uint32_t id) uint32_t id)
{ {
MetaWaylandColorManager *color_manager = wl_resource_get_user_data (resource); MetaWaylandColorManager *color_manager = wl_resource_get_user_data (resource);
MetaWaylandCreatorParams *creator_params; MetaWaylandCreatorParams *creator_params;
@ -1388,7 +1409,7 @@ color_manager_new_parametric_creator (struct wl_client *client,
creator_resource = creator_resource =
wl_resource_create (client, wl_resource_create (client,
&xx_image_description_creator_params_v4_interface, &wp_image_description_creator_params_v1_interface,
wl_resource_get_version (resource), wl_resource_get_version (resource),
id); id);
@ -1402,45 +1423,57 @@ color_manager_new_parametric_creator (struct wl_client *client,
} }
static void static void
color_manager_send_supported_events (struct wl_resource *resource) color_manager_create_windows_scrgb (struct wl_client *client,
struct wl_resource *resource,
uint32_t id)
{ {
xx_color_manager_v4_send_supported_intent (resource, wl_resource_post_error (resource,
XX_COLOR_MANAGER_V4_RENDER_INTENT_PERCEPTUAL); WP_COLOR_MANAGER_V1_ERROR_UNSUPPORTED_FEATURE,
xx_color_manager_v4_send_supported_feature (resource, "Windows scRGB is not supported");
XX_COLOR_MANAGER_V4_FEATURE_PARAMETRIC);
xx_color_manager_v4_send_supported_feature (resource,
XX_COLOR_MANAGER_V4_FEATURE_SET_PRIMARIES);
xx_color_manager_v4_send_supported_feature (resource,
XX_COLOR_MANAGER_V4_FEATURE_SET_TF_POWER);
xx_color_manager_v4_send_supported_feature (resource,
XX_COLOR_MANAGER_V4_FEATURE_SET_LUMINANCES);
xx_color_manager_v4_send_supported_tf_named (resource,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA22);
xx_color_manager_v4_send_supported_tf_named (resource,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_GAMMA28);
xx_color_manager_v4_send_supported_tf_named (resource,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_SRGB);
xx_color_manager_v4_send_supported_tf_named (resource,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_ST2084_PQ);
xx_color_manager_v4_send_supported_tf_named (resource,
XX_COLOR_MANAGER_V4_TRANSFER_FUNCTION_BT709);
xx_color_manager_v4_send_supported_primaries_named (resource,
XX_COLOR_MANAGER_V4_PRIMARIES_SRGB);
xx_color_manager_v4_send_supported_primaries_named (resource,
XX_COLOR_MANAGER_V4_PRIMARIES_BT2020);
xx_color_manager_v4_send_supported_primaries_named (resource,
XX_COLOR_MANAGER_V4_PRIMARIES_NTSC);
} }
static const struct xx_color_manager_v4_interface static void
color_manager_send_supported_events (struct wl_resource *resource)
{
wp_color_manager_v1_send_supported_intent (resource,
WP_COLOR_MANAGER_V1_RENDER_INTENT_PERCEPTUAL);
wp_color_manager_v1_send_supported_feature (resource,
WP_COLOR_MANAGER_V1_FEATURE_PARAMETRIC);
wp_color_manager_v1_send_supported_feature (resource,
WP_COLOR_MANAGER_V1_FEATURE_SET_PRIMARIES);
wp_color_manager_v1_send_supported_feature (resource,
WP_COLOR_MANAGER_V1_FEATURE_SET_TF_POWER);
wp_color_manager_v1_send_supported_feature (resource,
WP_COLOR_MANAGER_V1_FEATURE_SET_LUMINANCES);
wp_color_manager_v1_send_supported_tf_named (resource,
WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA22);
wp_color_manager_v1_send_supported_tf_named (resource,
WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA28);
wp_color_manager_v1_send_supported_tf_named (resource,
WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_SRGB);
wp_color_manager_v1_send_supported_tf_named (resource,
WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_ST2084_PQ);
wp_color_manager_v1_send_supported_tf_named (resource,
WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_BT1886);
wp_color_manager_v1_send_supported_primaries_named (resource,
WP_COLOR_MANAGER_V1_PRIMARIES_SRGB);
wp_color_manager_v1_send_supported_primaries_named (resource,
WP_COLOR_MANAGER_V1_PRIMARIES_BT2020);
wp_color_manager_v1_send_supported_primaries_named (resource,
WP_COLOR_MANAGER_V1_PRIMARIES_NTSC);
wp_color_manager_v1_send_done (resource);
}
static const struct wp_color_manager_v1_interface
meta_wayland_color_manager_interface = meta_wayland_color_manager_interface =
{ {
color_manager_destroy, color_manager_destroy,
color_manager_get_output, color_manager_get_output,
color_manager_get_surface, color_manager_get_surface,
color_manager_get_feedback_surface, color_manager_get_surface_feedback,
color_manager_new_icc_creator, color_manager_create_icc_creator,
color_manager_new_parametric_creator, color_manager_create_parametric_creator,
color_manager_create_windows_scrgb,
}; };
static void static void
@ -1453,7 +1486,7 @@ color_management_bind (struct wl_client *client,
struct wl_resource *resource; struct wl_resource *resource;
resource = wl_resource_create (client, resource = wl_resource_create (client,
&xx_color_manager_v4_interface, &wp_color_manager_v1_interface,
version, version,
id); id);
@ -1487,7 +1520,7 @@ update_output_color_state (MetaWaylandColorManager *color_manager,
{ {
struct wl_resource *resource = l->data; struct wl_resource *resource = l->data;
xx_color_management_output_v4_send_image_description_changed (resource); wp_color_management_output_v1_send_image_description_changed (resource);
} }
} }
@ -1573,8 +1606,8 @@ update_enabled (MetaWaylandColorManager *color_manager)
{ {
color_manager->global = color_manager->global =
wl_global_create (compositor->wayland_display, wl_global_create (compositor->wayland_display,
&xx_color_manager_v4_interface, &wp_color_manager_v1_interface,
META_XX_COLOR_MANAGEMENT_VERSION, META_WP_COLOR_MANAGEMENT_VERSION,
color_manager, color_manager,
color_management_bind); color_management_bind);

View File

@ -57,7 +57,7 @@
#define META_WP_SINGLE_PIXEL_BUFFER_V1_VERSION 1 #define META_WP_SINGLE_PIXEL_BUFFER_V1_VERSION 1
#define META_MUTTER_X11_INTEROP_VERSION 1 #define META_MUTTER_X11_INTEROP_VERSION 1
#define META_WP_FRACTIONAL_SCALE_VERSION 1 #define META_WP_FRACTIONAL_SCALE_VERSION 1
#define META_XX_COLOR_MANAGEMENT_VERSION 1 #define META_WP_COLOR_MANAGEMENT_VERSION 1
#define META_XDG_DIALOG_VERSION 1 #define META_XDG_DIALOG_VERSION 1
#define META_WP_DRM_LEASE_DEVICE_V1_VERSION 1 #define META_WP_DRM_LEASE_DEVICE_V1_VERSION 1
#define META_XDG_SESSION_MANAGER_V1_VERSION 1 #define META_XDG_SESSION_MANAGER_V1_VERSION 1

File diff suppressed because it is too large Load Diff