diff options
Diffstat (limited to 'libs/shaders/shaders.cpp')
-rw-r--r-- | libs/shaders/shaders.cpp | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/libs/shaders/shaders.cpp b/libs/shaders/shaders.cpp index 0d77519ab7..5935589fdf 100644 --- a/libs/shaders/shaders.cpp +++ b/libs/shaders/shaders.cpp @@ -185,9 +185,8 @@ void generateLuminanceScalesForOOTF(ui::Dataspace inputDataspace, ui::Dataspace break; case HAL_DATASPACE_TRANSFER_HLG: shader.append(R"( - uniform float in_hlgGamma; float3 ScaleLuminance(float3 xyz) { - return xyz * 1000.0 * pow(xyz.y, in_hlgGamma - 1); + return xyz * 1000.0; } )"); break; @@ -228,10 +227,8 @@ static void generateLuminanceNormalizationForOOTF(ui::Dataspace outputDataspace, break; case HAL_DATASPACE_TRANSFER_HLG: shader.append(R"( - uniform float in_hlgGamma; float3 NormalizeLuminance(float3 xyz) { - return xyz / 1000.0 * - pow(xyz.y / 1000.0, (1 - in_hlgGamma) / (in_hlgGamma)); + return xyz / 1000.0; } )"); break; @@ -451,11 +448,6 @@ std::vector<uint8_t> buildUniformValue(T value) { return result; } -// Refer to BT2100-2 -float computeHlgGamma(float currentDisplayBrightnessNits) { - return 1.2 + 0.42 * std::log10(currentDisplayBrightnessNits / 1000); -} - } // namespace std::string buildLinearEffectSkSL(const LinearEffect& linearEffect) { @@ -493,12 +485,6 @@ std::vector<tonemap::ShaderUniform> buildLinearEffectUniforms(const LinearEffect colorTransform * mat4(outputColorSpace.getXYZtoRGB()))}); } - if ((linearEffect.inputDataspace & HAL_DATASPACE_TRANSFER_MASK) == HAL_DATASPACE_TRANSFER_HLG) { - uniforms.push_back( - {.name = "in_hlgGamma", - .value = buildUniformValue<float>(computeHlgGamma(currentDisplayLuminanceNits))}); - } - tonemap::Metadata metadata{.displayMaxLuminance = maxDisplayLuminance, // If the input luminance is unknown, use display luminance (aka, // no-op any luminance changes) @@ -506,6 +492,9 @@ std::vector<tonemap::ShaderUniform> buildLinearEffectUniforms(const LinearEffect // uncalibrated displays .contentMaxLuminance = maxLuminance > 0 ? maxLuminance : maxDisplayLuminance, + .currentDisplayLuminance = currentDisplayLuminanceNits > 0 + ? currentDisplayLuminanceNits + : maxDisplayLuminance, .buffer = buffer}; for (const auto uniform : tonemap::getToneMapper()->generateShaderSkSLUniforms(metadata)) { |