[dawn][native] Add TransferFunctionDawn::BT_1886 And add tests that it is indeed Gamma 2.4. Fixed: 537798743 Change-Id: I79437bdd7f6da703e0b2b8cf5a1e6042d002cff1 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/329615 Reviewed-by: Yordan Chaparov <dancho@google.com> Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Loko Kung <lokokung@google.com>
diff --git a/src/dawn/common/ColorSpace.h b/src/dawn/common/ColorSpace.h index b05aeb1..7d726e8 100644 --- a/src/dawn/common/ColorSpace.h +++ b/src/dawn/common/ColorSpace.h
@@ -255,6 +255,18 @@ .f = 0.0f, }; +// https://registry.khronos.org/DataFormat/specs/1.4/dataformat.1.4.html#TRANSFER_BT1886 +// BT1886 also known as Gamma 2.4 +inline constexpr TransferFunction kEOTF_BT_1886 = { + .g = 2.4f, + .a = 1.0f, + .b = 0.0f, + .c = 0.0f, + .d = 0.0f, + .e = 0.0f, + .f = 0.0f, +}; + // https://registry.khronos.org/DataFormat/specs/1.4/dataformat.1.4.html#TRANSFER_DCIP3 inline constexpr TransferFunction kEOTF_DisplayP3 = { .g = 2.6f,
diff --git a/src/dawn/common/ExternalTextureParams.cpp b/src/dawn/common/ExternalTextureParams.cpp index 0486641..e9a8179 100644 --- a/src/dawn/common/ExternalTextureParams.cpp +++ b/src/dawn/common/ExternalTextureParams.cpp
@@ -155,6 +155,9 @@ srcLuminanceOf1 = kPQLuminanceOf1; srcEOTF = kEOTF_PQ; break; + case wgpu::ColorSpaceTransferDawn::BT_1886: + srcEOTF = kEOTF_BT_1886; + break; default: return wgpu::Status::Error; }
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json index b75c873..c08b003 100644 --- a/src/dawn/dawn.json +++ b/src/dawn/dawn.json
@@ -1905,7 +1905,8 @@ {"value": 3, "name": "display p3"}, {"value": 4, "name": "SMPTE_170M"}, {"value": 5, "name": "HLG"}, - {"value": 6, "name": "PQ"} + {"value": 6, "name": "PQ"}, + {"value": 7, "name": "BT_1886"} ] }, "color space y cb cr range dawn": {
diff --git a/src/dawn/tests/end2end/ExternalTextureTests.cpp b/src/dawn/tests/end2end/ExternalTextureTests.cpp index fefffe8..75d285a 100644 --- a/src/dawn/tests/end2end/ExternalTextureTests.cpp +++ b/src/dawn/tests/end2end/ExternalTextureTests.cpp
@@ -2138,6 +2138,27 @@ wgpu::PredefinedColorSpace::Rec2020Linear, {0.4, 0.2, 0.1, 1}, {0.4, 0.2, 0.1}); } +// Test that ColorSpaceTransferDawn::BT_1886 is indeed Gamma 2.4. +TEST_P(ExternalTextureTests, ColorSpaceConversion_BT1886) { + auto G = [](float f) -> float { return std::powf(f, 2.4); }; + + CheckColorSpaceConversion( + { + .primaries = wgpu::ColorSpacePrimariesDawn::Rec2020, + .transfer = wgpu::ColorSpaceTransferDawn::BT_1886, + }, + wgpu::PredefinedColorSpace::Rec2020Linear, {0.4, 0.2, 0.1, 1}, {G(0.4), G(0.2), G(0.1)}); + + // Test with small values that would be in the linear ramp of sRGB (between 0 and 0.05). + CheckColorSpaceConversion( + { + .primaries = wgpu::ColorSpacePrimariesDawn::Rec2020, + .transfer = wgpu::ColorSpaceTransferDawn::BT_1886, + }, + wgpu::PredefinedColorSpace::Rec2020Linear, {0.04, 0.02, 0.01, 1}, + {G(0.04), G(0.02), G(0.01)}); +} + // TODO(https://crbug.com/468988322): Add tests of ExternalTextures being used with a resource table // and with Vulkan's extended dynamic state as these are other interactions that could easily break.