Commit Graph

55 Commits (504cb6fa4d4448f65dd231c791371ad93d35a504)

Author SHA1 Message Date
Martin Gräßlin 504cb6fa4d Do not check compositing type in LanczosFilter
The LanczosFilter is only created by the SceneOpenGL2, so yes it is
OpenGL2 compositing - no need to check each frame.
2013-04-11 12:57:05 +02:00
Fredrik Höglund 010b3c94de Merge branch 'KDE/4.10'
Conflicts:
	kwin/lanczosfilter.cpp
2013-03-21 17:13:34 +01:00
Fredrik Höglund 2cec03dede kwin: Fix the blend function in the lanczos filter
The alpha values are pre-multiplied.
2013-03-21 16:31:06 +01:00
Martin Gräßlin 98a04893a6 Use mgraesslin@kde.org for my mail address in Copyright and AboutData 2013-03-12 13:17:53 +01:00
Martin Gräßlin c3ec860a72 Drop ARB shader code path from Lanczos Filter
Since color correction got pushed merged in the Lanczos Filter is only
created for OpenGL2. Which means the complete ARB shader code path has
been dead since 4.10 anyway.

REVIEW: 108856
2013-03-12 08:48:37 +01:00
Martin Gräßlin fa25f7a3bb Disable Lanczos for IvyBridge with Mesa 9.1
I don't like to do it, but it's better than users getting a bad
performance experience.

The change should be reverted once the issue is identified and fixed.

CCBUG: 313613
REVIEW: 109200
2013-02-28 16:03:53 +01:00
Casian Andrei 22569f7eb9 Remove forceAlpha uniform, which is no longer needed
This was originally added by d467fc1bdbcf69bd6ef213bd909633c2edfb6878,
to prevent alpha ending up to be 0 with blending disabled. Apparently,
that was a driver issue that is no longer present.

REVIEW: 107090
2012-11-13 22:23:18 +02:00
Martin Gräßlin 26a9a35b2f Increase runtime requirement to Mesa 8.0
Adjustment to reality. KWin has had a dependency on Mesa 8.0 for quite
some time given that it is what basically all distributions ship.

It is better to clearly state what is required. For KWin Mesa 8.0 is a
more reliable dependency as all DRI drivers which do not support DRI2
have been removed.

Packagers have been informed about this intended change some weeks ago.

REVIEW: 106799
2012-10-25 11:45:36 +02:00
Martin Gräßlin cf5de22586 Introduce a build option KWIN_BUILD_OPENGL_1_COMPOSITING
If the build option is enabled KWIN_HAVE_OPENGL_1 is passed as a compile
flag when build against OpenGL.

This compile flag is meant to replace the KWIN_HAVE_OPENGLES. So far code
has been ifdefed for special behavior of OpenGL ES 2.0 and to remove
fixed functionality calls which are not available in OpenGL ES 2.0.

With this build flag the fixed functionality calls which are only used in
the OpenGL1 Compositor can be removed and keeping the KWIN_HAVE_OPENGLES
for the real differences between OpenGL 2.x and OpenGL ES 2.0.

E.g. a call like glColor4f should be in an
glColor4f(1.0, 1.0, 1.0, 1.0);

while a call like glPolygonMode should be in an
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

Building for OpenGL ES 2.0 of course implies that KWIN_HAVE_OPENGL_1 is
not defined.
2012-10-25 11:34:12 +02:00
Martin Gräßlin 2b6c4730b5 Re-enable Blur/Lanczos for Catalyst on OpenGL 2
Given that the Catalyst driver is now supporting direct rendering and by
that can use the OpenGL 2 code path we do no longer need to force
disable the Blur effect and Lanczos filters which used to crash in the
ARB shader path.

The ARB shader path - which can only be used in OpenGL 1 - is kept
disabled for Catalyst.

CCBUG: 270818
CCBUG: 286795
REVIEW: 106798
2012-10-25 11:30:18 +02:00
Jurica Vukadin bcdc74f8d6 Fix more C++11 narrowing warnings
REVIEW: 106997
2012-10-24 20:43:19 +02:00
Martin Gräßlin c2a4f81927 Introduce a helper class to automatically push/pop Shaders
The ShaderBinder class can be used for the case that a block of code
should be executed with a given Shader being bound. This is useful for
all the cases where there is a if-block for OpenGL2 execution with a
Shader being pushed in the first line to the ShaderManager and popped in
the last line of the block. With the helper this can be simplified to:

ShaderBinder binder(myCustomShader);

or

ShaderBinder binder(ShaderManager::GenericShader);

The ctor of ShaderBinder pushes the given Shader to the stack and once
the helper goes out of scope it will be popped again from the stack.

In addition the helper can take care of OpenGL 1 compositing, that is it
just does nothing. So it can also be used where there is a shared OpenGL1
and OpenGL2 code path where the Shader should only be pushed in OpenGL2.
This basically removes all the checks for the compositing type before
pushing/popping a Shader to the stack.

REVIEW: 106521
2012-09-29 15:33:57 +02:00
Martin Gräßlin f9a2ecbf33 Do not use ShaderManager::isValid to check for OpenGL2 compositing
The main usage of ShaderManager::isValid was to have OpenGL2 specific
code pathes. Now we have an actual OpenGL2Compositing type and we know
that the ShaderManager is valid if we have this compositing type and we
know that it is not valid on OpenGL1Compositing. This gives us a much
better check and allows us to use the isValid method just for where we
want to check whether the shaders compiled successfully.

In addition some effects require OpenGL2, so we do not need to check
again that the ShaderManager is valid. Such usages are removed.
2012-09-29 15:33:57 +02:00
Martin Gräßlin 6d2dfe06e7 Introduce dedicated OpenGL1 and OpenGL2 compositing types
The CompositingType enum turns into flags and two new values are
introduced: OpenGL1Compositing and OpenGL2Compositing.

Those new values are or-ed to OpenGLCompositing so that a simple check
for the flag OpenGLCompositing works in case of one of those two new
values. To make the generic check for OpenGL compositing easier a method
in EffectsHandler is introduced to just check for this.

The scenes now return either OpenGL1Compositing or OpenGL2Compositing
depending on which Scene implementation. None returns OpenGLCompositing.
2012-09-29 15:33:57 +02:00
Martin Gräßlin c7262e8bd3 Getter/setters for opacity, saturation and brightness in WindowPaintData
The public member variables for opacity, saturation and brightness
are removed in favor for getter and setters. The variables are
moved into a private class. Those are now qreal instead of double.

To make usage inside the effects easier a multiply method is added
which multiplies the current value with passed in factor and returns
the new value in a functional programming style.

This commit is the top-most of a patch series to refactor
ScreenPaintData and WindowPaintData. Other related commits are:
* 0811772
* ebdc7ec
* 2c8dd8d
* 7699726
* 68e0201
* 611cb09

REVIEW: 105141
BUG: 303314
FIXED-IN: 4.10
2012-07-19 18:25:48 +02:00
Martin Gräßlin a2b0d42916 Replace translation by QVector3D in Screen/Window PaintData 2012-07-19 18:25:03 +02:00
Martin Gräßlin 0eff12eb92 Use QGraphicsScale for scale information in ScreenPaintData 2012-07-19 18:25:03 +02:00
Martin Gräßlin 1f52366fc1 Disable ARB Lanczos Shader for Intel GPUs
For Sandybridge Lanczos Shader is enabled, but only GLSL is working
so the ARB variant has to be disabled for Intel GPUs.

BUG: 301729
FIXED-IN: 4.9.0
REVIEW: 105233
2012-06-12 22:53:36 +02:00
Martin Gräßlin 71d703efe3 Fix uninitialized class members in LanczosFilter
SVN_SILENT
2012-05-27 16:35:04 +02:00
Martin Gräßlin d0d274b855 Don't compare uint with int
Explicitly cast uint to int to fix a warning.
2012-05-27 16:35:04 +02:00
Philipp Knechtges 8e8212b0ef kwin: adding a proper clipping to the lanczosfilter 2012-05-01 23:19:42 +02:00
Martin Gräßlin a5d620a6c2 Use KWin Options to read texture scale settings
No need to re-read the config.
REVIEW: 104298
2012-03-16 13:46:50 +01:00
Martin Gräßlin 139c5bf58b Allow Lanczos for SandyBridge 2012-02-04 11:25:15 +01:00
Martin Gräßlin 6e445fb75c Less unused parameter/variable warnings in kwin
SVN_SILENT
2011-12-31 15:08:54 +01:00
Martin Gräßlin f135206781 Disable Lanczos and Blur for fglrx
Too many crash reports in the fglrx driver when using ARB shaders.
It's a pity to disable functionality for all fglrx users, but it's
better than crash reports.

Blur effect can still be enabled manually and Lanczos can still be
enabled through the environment variable.

REVIEW: 103556
CCBUG: 270818
CCBUG: 286795
2011-12-31 08:54:15 +01:00
Philipp Knechtges ef9aeafe0d kwin: Optimizing Blur Part II
This patch adds an optional texture cache to the blur effect such that damaged windows in
front of the blurred region dont trigger a repaint of the whole blurred region which pretty
often results in a avalanche repaint of nearly the whole screen.

REVIEW: 101977
2011-09-18 02:01:31 +02:00
Martin Gräßlin 987bc837d9 Remove define KWIN_HAVE_OPENGL_COMPOSITING
Due to changes in build system we have always either OpenGL or OpenGL ES.
This allows to remove the KWIN_HAVE_OPENGL_COMPOSITING define. In the
effects the define is kept as KWIN_HAVE_OPENGL which can be used in
future to build also an XRender only effect system.
2011-08-13 16:46:43 +02:00
Martin Gräßlin 9c9ed80a2b Add environment variable to enforce Lanczos Filter
By setting KWIN_FORCE_LANCZOS=1 the settings and
driver check are overwritten.

This should help to test mesa bug 33275
(https://bugs.freedesktop.org/show_bug.cgi?id=33275)
2011-07-20 22:41:58 +02:00
Martin Gräßlin 728f333e6a Only use GLSL shader for lanczosfilter if ShaderManager is valid 2011-04-29 16:44:48 +02:00
Thomas Lübking fab764f6c6 only use lanczos filter when either direction is scaled below 90%
BUG: 263653
2011-04-25 21:42:29 +02:00
Martin Gräßlin 82b8f8d2fc Drop the driver blacklist
Let's face it: it was a bad idea and the blacklist never got updated.
2011-03-15 20:11:11 +01:00
Martin Gräßlin e5e5c4a020 Move push/popRenderTarget to kwingluitls
(De)Activating a FBO is OpenGL specific and does not belong into EffectsHandler.
2011-03-13 14:34:30 +01:00
Martin Gräßlin 0827c2903b Use GLPlatform to decide whether shaders are supported
Dropping the static methods from GLShader and use supports()
where it was used before.
2011-02-19 11:08:43 +01:00
Fredrik Höglund 73be6657ea kwin: Replace brightness and opacity with a modulation constant
This makes it possible to adjust both brightness and opacity
at the same time with one multiplication in the fragment shader.
2011-02-12 01:45:38 +01:00
Fredrik Höglund 2fa966e0f9 kwin: Use the new setUniform() overloads in kwin core 2011-02-10 19:37:51 +01:00
Martin Gräßlin 0a7e48f7aa KWin uses kdelibs coding style. 2011-01-31 20:07:03 +01:00
Fredrik Höglund 1a5b3b4bea Disable and delete the fragment program if it fails to compile.
svn path=/branches/KDE/4.6/kdebase/workspace/; revision=1215777
2011-01-30 15:25:01 +01:00
Fredrik Höglund bfa2fc68e6 Rewrite the ARB lanczos shader to work with the Radeon R300 limitations.
svn path=/branches/KDE/4.6/kdebase/workspace/; revision=1215505
2011-01-30 15:11:22 +01:00
Fredrik Höglund 1a93cc40d2 Disable the lanczos filter with the Intel driver in Mesa 7.10.
It's reported to cause kwin to hang when rendering thumbnails.

svn path=/branches/KDE/4.6/kdebase/workspace/; revision=1215502
2011-01-30 15:07:41 +01:00
Martin Gräßlin a6de13e2f7 Use ShaderManager to bind the shader in Lanczos. 2011-01-30 14:12:06 +01:00
Martin Gräßlin 78c4c7a86e Lanczos filter available in GLES.
It uses a default vertex shader, so the existing shader can be dropped.
2011-01-30 14:12:04 +01:00
Martin Gräßlin c6dd3690f5 Don't clip when rendering to FBO. 2011-01-30 14:12:04 +01:00
Martin Gräßlin 14522ebecb Fix Linker error with Lanczos filter 2011-01-30 14:11:56 +01:00
Martin Gräßlin b145ad6065 Lanczos not available in ES 2011-01-30 14:11:56 +01:00
Thomas Lübking 4cf251436f exclude non opaque (NOT "non ARGB") windows from lanczos filter unless we've a working blendfunction for the cached texture
BUG: 258439

svn path=/trunk/KDE/kdebase/workspace/; revision=1207826
2010-12-19 21:32:02 +00:00
Thomas Lübking 029f93127f kick trilinear filtering if favor of the lanczos filter (now default, unless blacklisted)
make the scale method configurable and align the UI for GL and Xrender

CCBUG: 243181


svn path=/trunk/KDE/kdebase/workspace/; revision=1195698
2010-11-11 19:53:19 +00:00
Martin Gräßlin 6270b502ba ARB Shader fallback to Lanczos filter.
This allows using Lanczos filter also on systems not supporting GLSL.
See http://svn.reviewboard.kde.org/r/5777/

svn path=/trunk/KDE/kdebase/workspace/; revision=1195273
2010-11-10 18:25:40 +00:00
Thomas Lübking 4db74f544d workaround nvidia issues with the texture cache and translucent windows
svn path=/trunk/KDE/kdebase/workspace/; revision=1195268
2010-11-10 18:08:46 +00:00
Martin Gräßlin 3e689ff201 Cache generated Lanczos textures.
This provides a significant performance improvement especially for Present Windows.
Whenever a lanczos resampling is done the resulted texture is cached, till the
window is damaged or a texture of different size is required. This means that
for a taskbar thumbnail the resampling only occurs once unless the window is damaged
and for present windows it only occurs when the windows are resized and then only
after the windows have already been moved. Highlighting windows does not cause
a resampling any more.
See review request http://svn.reviewboard.kde.org/r/5708/

svn path=/trunk/KDE/kdebase/workspace/; revision=1191874
2010-11-01 10:46:11 +00:00
Fredrik Höglund 119c06e403 Make the lanczos shader use a fixed number of iterations in the loop.
This makes it possible for the GLSL compiler to unroll it, which also
avoids the need to use relative addressing. With this change the shader
should hopefully work with the R300G driver.

The unused kernel weights are set to zero so they don't contribute
to the end result.

Thanks to Tom Stellard and Marek Olšák for their suggestions on how
to solve this problem.

CCBUG: 243191

svn path=/trunk/KDE/kdebase/workspace/; revision=1175021
2010-09-13 22:03:21 +00:00