From 7b644338300be38fb18d75c641d9af04a9517265 Mon Sep 17 00:00:00 2001 From: Aleix Pol Gonzalez Date: Wed, 8 Nov 2023 16:44:12 +0100 Subject: [PATCH] GLShader: Fix sdrBrightness into float It's used as a float and otherwise it makes (some?) drivers very confused as they're required to cast at runtime. The original value is double so it makes sense to keep the same type. Signed-off-by: Victoria Fischer --- src/backends/drm/drm_egl_layer_surface.cpp | 2 +- src/libkwineffects/glshader.cpp | 7 +++---- src/libkwineffects/glshader.h | 2 +- src/libkwineffects/glshadermanager.cpp | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/backends/drm/drm_egl_layer_surface.cpp b/src/backends/drm/drm_egl_layer_surface.cpp index 13287fc838..cebcdd1f77 100644 --- a/src/backends/drm/drm_egl_layer_surface.cpp +++ b/src/backends/drm/drm_egl_layer_surface.cpp @@ -160,7 +160,7 @@ bool EglGbmLayerSurface::endRendering(const QRegion &damagedRegion) binder.shader()->setUniform(GLShader::MatrixUniform::ColorimetryTransformation, ctm); binder.shader()->setUniform(GLShader::IntUniform::SourceNamedTransferFunction, int(m_surface->intermediaryColorDescription.transferFunction())); binder.shader()->setUniform(GLShader::IntUniform::DestinationNamedTransferFunction, int(m_surface->targetColorDescription.transferFunction())); - binder.shader()->setUniform(GLShader::IntUniform::SdrBrightness, m_surface->intermediaryColorDescription.sdrBrightness()); + binder.shader()->setUniform(GLShader::FloatUniform::SdrBrightness, m_surface->intermediaryColorDescription.sdrBrightness()); binder.shader()->setUniform(GLShader::FloatUniform::MaxHdrBrightness, m_surface->intermediaryColorDescription.maxHdrHighlightBrightness()); } QMatrix4x4 mat = fbo->colorAttachment()->contentTransformMatrix(); diff --git a/src/libkwineffects/glshader.cpp b/src/libkwineffects/glshader.cpp index 24985f2696..46e26ceedb 100644 --- a/src/libkwineffects/glshader.cpp +++ b/src/libkwineffects/glshader.cpp @@ -219,6 +219,7 @@ void GLShader::resolveLocations() m_floatLocation[Saturation] = uniformLocation("saturation"); m_floatLocation[MaxHdrBrightness] = uniformLocation("maxHdrBrightness"); + m_floatLocation[SdrBrightness] = uniformLocation("sdrBrightness"); m_colorLocation[Color] = uniformLocation("geometryColor"); @@ -226,7 +227,6 @@ void GLShader::resolveLocations() m_intLocation[TextureHeight] = uniformLocation("textureHeight"); m_intLocation[SourceNamedTransferFunction] = uniformLocation("sourceNamedTransferFunction"); m_intLocation[DestinationNamedTransferFunction] = uniformLocation("destinationNamedTransferFunction"); - m_intLocation[SdrBrightness] = uniformLocation("sdrBrightness"); m_locationsResolved = true; } @@ -442,7 +442,7 @@ bool GLShader::setColorspaceUniforms(const ColorDescription &src, const ColorDes return setUniform(GLShader::MatrixUniform::ColorimetryTransformation, src.colorimetry().toOther(dst.colorimetry())) && setUniform(GLShader::IntUniform::SourceNamedTransferFunction, int(src.transferFunction())) && setUniform(GLShader::IntUniform::DestinationNamedTransferFunction, int(dst.transferFunction())) - && setUniform(IntUniform::SdrBrightness, dst.sdrBrightness()) + && setUniform(FloatUniform::SdrBrightness, dst.sdrBrightness()) && setUniform(FloatUniform::MaxHdrBrightness, dst.maxHdrHighlightBrightness()); } @@ -456,8 +456,7 @@ bool GLShader::setColorspaceUniformsToSRGB(const ColorDescription &src) return setUniform(GLShader::MatrixUniform::ColorimetryTransformation, src.colorimetry().toOther(ColorDescription::sRGB.colorimetry())) && setUniform(GLShader::IntUniform::SourceNamedTransferFunction, int(src.transferFunction())) && setUniform(GLShader::IntUniform::DestinationNamedTransferFunction, int(NamedTransferFunction::sRGB)) - && setUniform(IntUniform::SdrBrightness, src.sdrBrightness()) + && setUniform(FloatUniform::SdrBrightness, src.sdrBrightness()) && setUniform(FloatUniform::MaxHdrBrightness, src.sdrBrightness()); } - } diff --git a/src/libkwineffects/glshader.h b/src/libkwineffects/glshader.h index 1b40ff0620..4f36fd7b4e 100644 --- a/src/libkwineffects/glshader.h +++ b/src/libkwineffects/glshader.h @@ -99,6 +99,7 @@ public: enum FloatUniform { Saturation, MaxHdrBrightness, + SdrBrightness, FloatUniformCount }; @@ -108,7 +109,6 @@ public: TextureHeight, SourceNamedTransferFunction, DestinationNamedTransferFunction, - SdrBrightness, IntUniformCount }; diff --git a/src/libkwineffects/glshadermanager.cpp b/src/libkwineffects/glshadermanager.cpp index b6f5552886..9963e2fdee 100644 --- a/src/libkwineffects/glshadermanager.cpp +++ b/src/libkwineffects/glshadermanager.cpp @@ -157,7 +157,7 @@ QByteArray ShaderManager::generateFragmentSource(ShaderTraits traits) const stream << "uniform mat3 colorimetryTransform;\n"; stream << "uniform int sourceNamedTransferFunction;\n"; stream << "uniform int destinationNamedTransferFunction;\n"; - stream << "uniform int sdrBrightness;// in nits\n"; + stream << "uniform float sdrBrightness;// in nits\n"; stream << "uniform float maxHdrBrightness; // in nits\n"; stream << "\n"; stream << "vec3 nitsToPq(vec3 nits) {\n";