diff --git a/docs/features.md b/docs/features.md index 4531c49d..93e1f21f 100644 --- a/docs/features.md +++ b/docs/features.md @@ -174,7 +174,7 @@ Jay supports the following wayland protocols: | wl_shm | 2 | | | wl_subcompositor | 1 | | | wp_alpha_modifier_v1 | 1 | | -| wp_color_manager_v1 | 1 | | +| wp_color_manager_v1 | 2 | | | wp_commit_timing_manager_v1 | 1 | | | wp_content_type_manager_v1 | 1 | | | wp_cursor_shape_manager_v1 | 2 | | diff --git a/src/client/objects.rs b/src/client/objects.rs index 1b489ac9..d4449f84 100644 --- a/src/client/objects.rs +++ b/src/client/objects.rs @@ -2,7 +2,10 @@ use { crate::{ client::{Client, ClientError}, ifs::{ - color_management::wp_image_description_v1::WpImageDescriptionV1, + color_management::{ + wp_image_description_reference_v1::WpImageDescriptionReferenceV1, + wp_image_description_v1::WpImageDescriptionV1, + }, ext_foreign_toplevel_handle_v1::ExtForeignToplevelHandleV1, ext_image_capture_source_v1::ExtImageCaptureSourceV1, ext_image_copy::ext_image_copy_capture_session_v1::ExtImageCopyCaptureSessionV1, @@ -48,10 +51,11 @@ use { ExtImageCopyCaptureSessionV1Id, ExtWorkspaceGroupHandleV1Id, JayHeadErrorV1Id, JayOutputId, JayScreencastId, JayToplevelId, JayWorkspaceId, WlBufferId, WlDataSourceId, WlOutputId, WlPointerId, WlRegionId, WlRegistryId, WlSeatId, - WlSurfaceId, WpDrmLeaseConnectorV1Id, WpImageDescriptionV1Id, - WpLinuxDrmSyncobjTimelineV1Id, XdgPopupId, XdgPositionerId, XdgSurfaceId, - XdgToplevelId, XdgWmBaseId, ZwlrDataControlSourceV1Id, ZwlrOutputHeadV1Id, - ZwlrOutputModeV1Id, ZwpPrimarySelectionSourceV1Id, ZwpTabletToolV2Id, + WlSurfaceId, WpDrmLeaseConnectorV1Id, WpImageDescriptionReferenceV1Id, + WpImageDescriptionV1Id, WpLinuxDrmSyncobjTimelineV1Id, XdgPopupId, XdgPositionerId, + XdgSurfaceId, XdgToplevelId, XdgWmBaseId, ZwlrDataControlSourceV1Id, + ZwlrOutputHeadV1Id, ZwlrOutputModeV1Id, ZwpPrimarySelectionSourceV1Id, + ZwpTabletToolV2Id, }, }, std::{cell::RefCell, rc::Rc}, @@ -94,6 +98,8 @@ pub struct Objects { pub ext_workspace_groups: CopyHashMap>, pub wp_image_description: CopyHashMap>, + pub wp_image_description_reference: + CopyHashMap>, pub jay_head_errors: CopyHashMap>, ids: RefCell>, } @@ -136,6 +142,7 @@ impl Objects { ext_data_sources: Default::default(), ext_workspace_groups: Default::default(), wp_image_description: Default::default(), + wp_image_description_reference: Default::default(), jay_head_errors: Default::default(), ids: RefCell::new(vec![]), } @@ -182,6 +189,8 @@ impl Objects { self.ext_data_sources.clear(); self.ext_workspace_groups.clear(); self.jay_head_errors.clear(); + self.wp_image_description.clear(); + self.wp_image_description_reference.clear(); } pub fn id(&self, client_data: &Client) -> Result diff --git a/src/cmm/cmm_eotf.rs b/src/cmm/cmm_eotf.rs index 40cf1ccb..89e123aa 100644 --- a/src/cmm/cmm_eotf.rs +++ b/src/cmm/cmm_eotf.rs @@ -13,6 +13,7 @@ pub enum Eotf { Log316, St428, Pow(EotfPow), + CompoundPower24, } const MUL: u32 = 10_000; diff --git a/src/gfx_apis/vulkan/eotfs.rs b/src/gfx_apis/vulkan/eotfs.rs index 61d27a23..bf6ee707 100644 --- a/src/gfx_apis/vulkan/eotfs.rs +++ b/src/gfx_apis/vulkan/eotfs.rs @@ -11,6 +11,7 @@ pub const EOTF_LOG316: u32 = 9; pub const EOTF_ST428: u32 = 10; pub const EOTF_POW: u32 = 11; pub const EOTF_GAMMA24: u32 = 12; +pub const EOTF_COMPOUND_POWER_2_4: u32 = 13; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Linearize)] pub enum VulkanEotf { @@ -25,6 +26,7 @@ pub enum VulkanEotf { Log316, St428, Pow, + CompoundPower24, } pub trait EotfExt: Sized { @@ -54,6 +56,7 @@ impl EotfExt for Eotf { Log316, St428, Pow, + CompoundPower24, } } } @@ -72,6 +75,7 @@ impl VulkanEotf { Self::Log316 => EOTF_LOG316, Self::St428 => EOTF_ST428, Self::Pow => EOTF_POW, + Self::CompoundPower24 => EOTF_COMPOUND_POWER_2_4, } } } diff --git a/src/gfx_apis/vulkan/renderer.rs b/src/gfx_apis/vulkan/renderer.rs index 360b18b1..55ea4867 100644 --- a/src/gfx_apis/vulkan/renderer.rs +++ b/src/gfx_apis/vulkan/renderer.rs @@ -766,7 +766,7 @@ impl VulkanRenderer { } } }; - for (index, op) in opts.into_iter().enumerate() { + for (index, op) in opts.iter().enumerate() { match op { GfxApiOpt::Sync => { sync(memory); diff --git a/src/gfx_apis/vulkan/shaders/eotfs.glsl b/src/gfx_apis/vulkan/shaders/eotfs.glsl index 5538a96b..139f7a97 100644 --- a/src/gfx_apis/vulkan/shaders/eotfs.glsl +++ b/src/gfx_apis/vulkan/shaders/eotfs.glsl @@ -15,6 +15,7 @@ #define TF_ST428 10 #define TF_POW 11 #define TF_GAMMA24 12 +#define TF_COMPOUND_POWER_2_4 13 vec3 eotf_bt1886(vec3 c) { c = clamp(c, 0.0, 1.0); @@ -101,6 +102,22 @@ vec3 inv_eotf_st428(vec3 c) { return pow(vec3(48.0) * c / vec3(52.37), vec3(1.0 / 2.6)); } +vec3 eotf_compound_power_2_4(vec3 c) { + return mix( + c * vec3(1.0 / 12.92), + pow((c + vec3(0.055)) * vec3(1.0 / 1.055), vec3(2.4)), + greaterThanEqual(c, vec3(0.04045)) + ); +} + +vec3 inv_eotf_compound_power_2_4(vec3 c) { + return mix( + vec3(12.92) * c, + vec3(1.055) * pow(c, vec3(1.0 / 2.4)) - vec3(0.055), + greaterThanEqual(c, vec3(0.0031308)) + ); +} + vec3 apply_eotf(vec3 c) { switch (eotf) { case TF_LINEAR: return c; @@ -114,6 +131,7 @@ vec3 apply_eotf(vec3 c) { case TF_LOG316: return eotf_log316(c); case TF_ST428: return eotf_st428(c); case TF_POW: return sign(c) * pow(abs(c), vec3(cm_eotf_args.arg1)); + case TF_COMPOUND_POWER_2_4: return eotf_compound_power_2_4(c); default: return c; } } @@ -131,6 +149,7 @@ vec3 apply_inv_eotf(vec3 c) { case TF_LOG316: return inv_eotf_log316(c); case TF_ST428: return inv_eotf_st428(c); case TF_POW: return sign(c) * pow(abs(c), vec3(cm_inv_eotf_args.arg1)); + case TF_COMPOUND_POWER_2_4: return inv_eotf_compound_power_2_4(c); default: return c; } } diff --git a/src/gfx_apis/vulkan/shaders_bin/out.frag.spv b/src/gfx_apis/vulkan/shaders_bin/out.frag.spv index 749e0ff6..d7421166 100644 Binary files a/src/gfx_apis/vulkan/shaders_bin/out.frag.spv and b/src/gfx_apis/vulkan/shaders_bin/out.frag.spv differ diff --git a/src/gfx_apis/vulkan/shaders_bin/tex.frag.spv b/src/gfx_apis/vulkan/shaders_bin/tex.frag.spv index bc8cb903..6146efa8 100644 Binary files a/src/gfx_apis/vulkan/shaders_bin/tex.frag.spv and b/src/gfx_apis/vulkan/shaders_bin/tex.frag.spv differ diff --git a/src/gfx_apis/vulkan/shaders_hash.txt b/src/gfx_apis/vulkan/shaders_hash.txt index cbe56af7..9d144084 100644 --- a/src/gfx_apis/vulkan/shaders_hash.txt +++ b/src/gfx_apis/vulkan/shaders_hash.txt @@ -1,4 +1,4 @@ -f49076a6465a6790c72a6d290c13d5f14c7dae8ae3eed6ca71c57424e3306f66 src/gfx_apis/vulkan/shaders/eotfs.glsl +b6a0df1e231fab533499329636b7a580384784418baee06c147af5fcc384cf5c src/gfx_apis/vulkan/shaders/eotfs.glsl 8a38df18851cd13884499820f26939fb7319f45d913d867f254d8118d59fb117 src/gfx_apis/vulkan/shaders/fill.common.glsl 21c488d12aa5ad2f109ec44cb856dfe837e02ea9025b5ed64439d742c17cbf30 src/gfx_apis/vulkan/shaders/fill.frag 4fb481d8d73afdfb0d8f077eb8665d86f06c8a32a91e44ed369ef5dff554646d src/gfx_apis/vulkan/shaders/fill.vert diff --git a/src/ifs/color_management.rs b/src/ifs/color_management.rs index d55efdbf..ed955e1d 100644 --- a/src/ifs/color_management.rs +++ b/src/ifs/color_management.rs @@ -1,3 +1,4 @@ +use crate::object::Version; pub use consts::*; pub mod wp_color_management_output_v1; @@ -6,8 +7,13 @@ pub mod wp_color_manager_v1; pub mod wp_image_description_creator_icc_v1; pub mod wp_image_description_creator_params_v1; pub mod wp_image_description_info_v1; +pub mod wp_image_description_reference_v1; pub mod wp_image_description_v1; +const UNIQUE_CM_IDS_SINCE: Version = Version(2); +const SRGB_DEPRECATED_SINCE: Version = Version(2); +const COMPOUND_POWER_2_4_SINCE: Version = Version(2); + const PRIMARIES_MUL: f64 = 1_000_000.0; const PRIMARIES_MUL_INV: f64 = 1.0 / PRIMARIES_MUL; @@ -55,6 +61,7 @@ mod consts { pub const TRANSFER_FUNCTION_ST2084_PQ: u32 = 11; pub const TRANSFER_FUNCTION_ST428: u32 = 12; pub const TRANSFER_FUNCTION_HLG: u32 = 13; + pub const TRANSFER_FUNCTION_COMPOUND_POWER_2_4: u32 = 14; pub const CAUSE_LOW_VERSION: u32 = 0; pub const CAUSE_UNSUPPORTED: u32 = 1; diff --git a/src/ifs/color_management/wp_color_management_surface_feedback_v1.rs b/src/ifs/color_management/wp_color_management_surface_feedback_v1.rs index 04abbd39..50f3e2f6 100644 --- a/src/ifs/color_management/wp_color_management_surface_feedback_v1.rs +++ b/src/ifs/color_management/wp_color_management_surface_feedback_v1.rs @@ -3,7 +3,10 @@ use { client::{Client, ClientError}, cmm::cmm_description::ColorDescription, ifs::{ - color_management::wp_image_description_v1::WpImageDescriptionV1, wl_surface::WlSurface, + color_management::{ + UNIQUE_CM_IDS_SINCE, wp_image_description_v1::WpImageDescriptionV1, + }, + wl_surface::WlSurface, }, leaks::Tracker, object::{Object, Version}, @@ -43,10 +46,18 @@ impl WpColorManagementSurfaceFeedbackV1 { } pub fn send_preferred_changed(&self, cd: &ColorDescription) { - self.client.event(PreferredChanged { - self_id: self.id, - identity: cd.id.raw() as u32, - }); + let identity = cd.id.raw(); + if self.version >= UNIQUE_CM_IDS_SINCE { + self.client.event(PreferredChanged2 { + self_id: self.id, + identity, + }); + } else { + self.client.event(PreferredChanged { + self_id: self.id, + identity: identity as u32, + }); + } } } diff --git a/src/ifs/color_management/wp_color_manager_v1.rs b/src/ifs/color_management/wp_color_manager_v1.rs index 71977dd5..1b75c0b4 100644 --- a/src/ifs/color_management/wp_color_manager_v1.rs +++ b/src/ifs/color_management/wp_color_manager_v1.rs @@ -4,8 +4,9 @@ use { globals::{Global, GlobalName}, ifs::{ color_management::{ - FEATURE_EXTENDED_TARGET_VOLUME, FEATURE_SET_MASTERING_DISPLAY_PRIMARIES, - FEATURE_SET_TF_POWER, + COMPOUND_POWER_2_4_SINCE, FEATURE_EXTENDED_TARGET_VOLUME, + FEATURE_SET_MASTERING_DISPLAY_PRIMARIES, FEATURE_SET_TF_POWER, + SRGB_DEPRECATED_SINCE, TRANSFER_FUNCTION_COMPOUND_POWER_2_4, consts::{ FEATURE_PARAMETRIC, FEATURE_SET_LUMINANCES, FEATURE_SET_PRIMARIES, FEATURE_WINDOWS_SCRGB, PRIMARIES_ADOBE_RGB, PRIMARIES_BT2020, @@ -90,10 +91,15 @@ impl WpColorManagerV1 { self.send_supported_tf_named(TRANSFER_FUNCTION_EXT_LINEAR); self.send_supported_tf_named(TRANSFER_FUNCTION_LOG_100); self.send_supported_tf_named(TRANSFER_FUNCTION_LOG_316); - self.send_supported_tf_named(TRANSFER_FUNCTION_SRGB); - self.send_supported_tf_named(TRANSFER_FUNCTION_EXT_SRGB); + if self.version < SRGB_DEPRECATED_SINCE { + self.send_supported_tf_named(TRANSFER_FUNCTION_SRGB); + self.send_supported_tf_named(TRANSFER_FUNCTION_EXT_SRGB); + } self.send_supported_tf_named(TRANSFER_FUNCTION_ST2084_PQ); self.send_supported_tf_named(TRANSFER_FUNCTION_ST428); + if self.version >= COMPOUND_POWER_2_4_SINCE { + self.send_supported_tf_named(TRANSFER_FUNCTION_COMPOUND_POWER_2_4); + } self.send_supported_primaries_named(PRIMARIES_SRGB); self.send_supported_primaries_named(PRIMARIES_PAL_M); self.send_supported_primaries_named(PRIMARIES_PAL); @@ -249,6 +255,25 @@ impl WpColorManagerV1RequestHandler for WpColorManagerV1 { obj.send_ready(); Ok(()) } + + fn get_image_description( + &self, + req: GetImageDescription, + _slf: &Rc, + ) -> Result<(), Self::Error> { + let desc = self.client.lookup(req.reference)?; + let obj = Rc::new(WpImageDescriptionV1 { + id: req.image_description, + client: self.client.clone(), + version: self.version, + tracker: Default::default(), + description: Some(desc.description.clone()), + }); + track!(self.client, obj); + self.client.add_client_obj(&obj)?; + obj.send_ready(); + Ok(()) + } } global_base!( @@ -263,7 +288,7 @@ impl Global for WpColorManagerV1Global { } fn version(&self) -> u32 { - 1 + 2 } fn exposed(&self, state: &State) -> bool { diff --git a/src/ifs/color_management/wp_image_description_creator_params_v1.rs b/src/ifs/color_management/wp_image_description_creator_params_v1.rs index cc94695d..f6b7e4e8 100644 --- a/src/ifs/color_management/wp_image_description_creator_params_v1.rs +++ b/src/ifs/color_management/wp_image_description_creator_params_v1.rs @@ -7,7 +7,8 @@ use { cmm_primaries::{NamedPrimaries, Primaries}, }, ifs::color_management::{ - MIN_LUM_MUL_INV, PRIMARIES_MUL_INV, + COMPOUND_POWER_2_4_SINCE, MIN_LUM_MUL_INV, PRIMARIES_MUL_INV, SRGB_DEPRECATED_SINCE, + TRANSFER_FUNCTION_COMPOUND_POWER_2_4, consts::{ PRIMARIES_ADOBE_RGB, PRIMARIES_BT2020, PRIMARIES_CIE1931_XYZ, PRIMARIES_DCI_P3, PRIMARIES_DISPLAY_P3, PRIMARIES_GENERIC_FILM, PRIMARIES_NTSC, PRIMARIES_PAL, @@ -116,10 +117,13 @@ impl WpImageDescriptionCreatorParamsV1RequestHandler for WpImageDescriptionCreat TRANSFER_FUNCTION_EXT_LINEAR => Eotf::Linear, TRANSFER_FUNCTION_LOG_100 => Eotf::Log100, TRANSFER_FUNCTION_LOG_316 => Eotf::Log316, - TRANSFER_FUNCTION_SRGB => Eotf::Gamma22, - TRANSFER_FUNCTION_EXT_SRGB => Eotf::Gamma22, + TRANSFER_FUNCTION_SRGB if self.version < SRGB_DEPRECATED_SINCE => Eotf::Gamma22, + TRANSFER_FUNCTION_EXT_SRGB if self.version < SRGB_DEPRECATED_SINCE => Eotf::Gamma22, TRANSFER_FUNCTION_ST2084_PQ => Eotf::St2084Pq, TRANSFER_FUNCTION_ST428 => Eotf::St428, + TRANSFER_FUNCTION_COMPOUND_POWER_2_4 if self.version >= COMPOUND_POWER_2_4_SINCE => { + Eotf::CompoundPower24 + } _ => { return Err(WpImageDescriptionCreatorParamsV1Error::UnsupportedTf( req.tf, diff --git a/src/ifs/color_management/wp_image_description_info_v1.rs b/src/ifs/color_management/wp_image_description_info_v1.rs index 7a745389..9b19a15f 100644 --- a/src/ifs/color_management/wp_image_description_info_v1.rs +++ b/src/ifs/color_management/wp_image_description_info_v1.rs @@ -10,9 +10,10 @@ use { MIN_LUM_MUL, PRIMARIES_ADOBE_RGB, PRIMARIES_BT2020, PRIMARIES_CIE1931_XYZ, PRIMARIES_DCI_P3, PRIMARIES_DISPLAY_P3, PRIMARIES_GENERIC_FILM, PRIMARIES_MUL, PRIMARIES_NTSC, PRIMARIES_PAL, PRIMARIES_PAL_M, PRIMARIES_SRGB, - TRANSFER_FUNCTION_BT1886, TRANSFER_FUNCTION_EXT_LINEAR, TRANSFER_FUNCTION_GAMMA22, - TRANSFER_FUNCTION_GAMMA28, TRANSFER_FUNCTION_LOG_100, TRANSFER_FUNCTION_LOG_316, - TRANSFER_FUNCTION_ST240, TRANSFER_FUNCTION_ST428, TRANSFER_FUNCTION_ST2084_PQ, + TRANSFER_FUNCTION_BT1886, TRANSFER_FUNCTION_COMPOUND_POWER_2_4, + TRANSFER_FUNCTION_EXT_LINEAR, TRANSFER_FUNCTION_GAMMA22, TRANSFER_FUNCTION_GAMMA28, + TRANSFER_FUNCTION_LOG_100, TRANSFER_FUNCTION_LOG_316, TRANSFER_FUNCTION_ST240, + TRANSFER_FUNCTION_ST428, TRANSFER_FUNCTION_ST2084_PQ, }, leaks::Tracker, object::{Object, Version}, @@ -51,6 +52,7 @@ impl WpImageDescriptionInfoV1 { self.send_tf_power(e); break 'tf; } + Eotf::CompoundPower24 => TRANSFER_FUNCTION_COMPOUND_POWER_2_4, }; self.send_tf_named(tf); } diff --git a/src/ifs/color_management/wp_image_description_reference_v1.rs b/src/ifs/color_management/wp_image_description_reference_v1.rs new file mode 100644 index 00000000..ca65eaac --- /dev/null +++ b/src/ifs/color_management/wp_image_description_reference_v1.rs @@ -0,0 +1,48 @@ +use { + crate::{ + client::{Client, ClientError}, + cmm::cmm_description::ColorDescription, + leaks::Tracker, + object::{Object, Version}, + wire::{WpImageDescriptionReferenceV1Id, wp_image_description_reference_v1::*}, + }, + std::rc::Rc, + thiserror::Error, +}; + +#[expect(dead_code)] +pub struct WpImageDescriptionReferenceV1 { + pub id: WpImageDescriptionReferenceV1Id, + pub client: Rc, + pub tracker: Tracker, + pub description: Rc, +} + +impl WpImageDescriptionReferenceV1RequestHandler for WpImageDescriptionReferenceV1 { + type Error = WpImageDescriptionReferenceV1Error; + + fn destroy(&self, _req: Destroy, _slf: &Rc) -> Result<(), Self::Error> { + self.client.remove_obj(self)?; + Ok(()) + } +} + +object_base! { + self = WpImageDescriptionReferenceV1; + version = Version(1); +} + +impl Object for WpImageDescriptionReferenceV1 {} + +dedicated_add_obj!( + WpImageDescriptionReferenceV1, + WpImageDescriptionReferenceV1Id, + wp_image_description_reference +); + +#[derive(Debug, Error)] +pub enum WpImageDescriptionReferenceV1Error { + #[error(transparent)] + ClientError(Box), +} +efrom!(WpImageDescriptionReferenceV1Error, ClientError); diff --git a/src/ifs/color_management/wp_image_description_v1.rs b/src/ifs/color_management/wp_image_description_v1.rs index 1813404c..4fb82762 100644 --- a/src/ifs/color_management/wp_image_description_v1.rs +++ b/src/ifs/color_management/wp_image_description_v1.rs @@ -2,7 +2,9 @@ use { crate::{ client::{Client, ClientError}, cmm::cmm_description::ColorDescription, - ifs::color_management::wp_image_description_info_v1::WpImageDescriptionInfoV1, + ifs::color_management::{ + UNIQUE_CM_IDS_SINCE, wp_image_description_info_v1::WpImageDescriptionInfoV1, + }, leaks::Tracker, object::{Object, Version}, wire::{WpImageDescriptionV1Id, wp_image_description_v1::*}, @@ -29,10 +31,18 @@ impl WpImageDescriptionV1 { } pub fn send_ready(&self) { - self.client.event(Ready { - self_id: self.id, - identity: self.description.as_ref().unwrap().id.raw() as u32, - }); + let identity = self.description.as_ref().unwrap().id.raw(); + if self.version >= UNIQUE_CM_IDS_SINCE { + self.client.event(Ready2 { + self_id: self.id, + identity, + }); + } else { + self.client.event(Ready { + self_id: self.id, + identity: identity as u32, + }); + } } } diff --git a/src/theme.rs b/src/theme.rs index 6c711c3f..91602aeb 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -108,6 +108,13 @@ impl Color { fn gamma28(c: f32) -> f32 { c.signum() * c.abs().powf(2.8) } + fn compound_power_2_4(c: f32) -> f32 { + if c < 0.04045 { + c / 12.92 + } else { + ((c + 0.055) / 1.055).powf(2.4) + } + } macro_rules! convert { ($tf:ident) => {{ r = $tf(r); @@ -135,6 +142,7 @@ impl Color { let pow = |c: f32| -> f32 { c.signum() * c.abs().powf(e) }; convert!(pow) } + Eotf::CompoundPower24 => convert!(compound_power_2_4), } Self { r, g, b, a: 1.0 } } @@ -237,6 +245,13 @@ impl Color { fn gamma28(c: f32) -> f32 { c.signum() * c.abs().powf(1.0 / 2.8) } + fn compound_power_2_4(c: f32) -> f32 { + if c < 0.0031308 { + 12.92 * c + } else { + 1.055 * c.powf(1.0 / 2.4) - 0.055 + } + } macro_rules! convert { ($tf:ident) => {{ for c in &mut res[..3] { @@ -270,6 +285,7 @@ impl Color { let pow = |c: f32| -> f32 { c.signum() * c.abs().powf(e) }; convert!(pow) } + Eotf::CompoundPower24 => convert!(compound_power_2_4), } if self.a < 1.0 { for c in &mut res[..3] { diff --git a/wire/wp_color_management_surface_feedback_v1.txt b/wire/wp_color_management_surface_feedback_v1.txt index 573fe877..fbb9b88c 100644 --- a/wire/wp_color_management_surface_feedback_v1.txt +++ b/wire/wp_color_management_surface_feedback_v1.txt @@ -12,3 +12,7 @@ request get_preferred { request get_preferred_parametric { image_description: id(wp_image_description_v1) (new), } + +event preferred_changed2 (since = 2) { + identity: u64, +} diff --git a/wire/wp_color_manager_v1.txt b/wire/wp_color_manager_v1.txt index 86f837ab..0634d123 100644 --- a/wire/wp_color_manager_v1.txt +++ b/wire/wp_color_manager_v1.txt @@ -46,3 +46,8 @@ event supported_primaries_named { event done { } + +request get_image_description (since = 2) { + image_description: id(wp_image_description_v1) (new), + reference: id(wp_image_description_reference_v1), +} diff --git a/wire/wp_image_description_reference_v1.txt b/wire/wp_image_description_reference_v1.txt new file mode 100644 index 00000000..fdecd8b2 --- /dev/null +++ b/wire/wp_image_description_reference_v1.txt @@ -0,0 +1,2 @@ +request destroy (destructor) { +} diff --git a/wire/wp_image_description_v1.txt b/wire/wp_image_description_v1.txt index a99945d4..12864ab0 100644 --- a/wire/wp_image_description_v1.txt +++ b/wire/wp_image_description_v1.txt @@ -13,3 +13,7 @@ event ready { request get_information { information: id(wp_image_description_info_v1) (new), } + +event ready2 (since = 2) { + identity: u64, +}