1
0
Fork 0
forked from wry/wry

cmm: add support for compound_power_2_4

This commit is contained in:
Julian Orth 2025-12-18 18:03:35 +01:00
parent 3e3cb3114c
commit b5c0e3a07e
11 changed files with 58 additions and 7 deletions

View file

@ -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,
}
}
}

View file

@ -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;
}
}

View file

@ -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