summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2016-05-31 16:11:35 +0300
committerTor Lillqvist <tml@collabora.com>2016-05-31 16:38:39 +0300
commite971a7192c81c4db84192c6a545dc045aab1a37d (patch)
tree6aeb0cb9d125a80edfb94b9d0ce1ded9f68fdb12 /vcl
parent3f98cf32836eb10af7fc673b1fe61421fcb98d3b (diff)
tdf#100159: Use shader preambles as needed, add missing shader combinations
Some shaders are in some cases (or always?) compiled with a preamble, so add that then as applicable when compiling and caching them in advance. Add a few shader combinations that I hadn't noticed. Change-Id: Ib66027e03a36cd4b161fe9f57ceaa338f9fb042d
Diffstat (limited to 'vcl')
-rw-r--r--vcl/opengl/win/gdiimpl.cxx15
1 files changed, 13 insertions, 2 deletions
diff --git a/vcl/opengl/win/gdiimpl.cxx b/vcl/opengl/win/gdiimpl.cxx
index 163d2dbed11f..6c4f7f617228 100644
--- a/vcl/opengl/win/gdiimpl.cxx
+++ b/vcl/opengl/win/gdiimpl.cxx
@@ -353,7 +353,7 @@ bool InitMultisample(const PIXELFORMATDESCRIPTOR& pfd, int& rPixelFormat,
namespace
{
-bool tryShaders(const OUString& rVertexShader, const OUString& rFragmentShader, const OUString& rGeometryShader = "")
+bool tryShaders(const OUString& rVertexShader, const OUString& rFragmentShader, const OUString& rGeometryShader = "", const OString& rPreamble = "")
{
GLint nId;
@@ -362,9 +362,14 @@ bool tryShaders(const OUString& rVertexShader, const OUString& rFragmentShader,
// only of the combination of vertex and fragment (but not geometry) shader. So if we have a
// geometry shader, we should not save the binary.
if (rGeometryShader.isEmpty())
- nId = OpenGLHelper::LoadShaders(rVertexShader, rFragmentShader, rGeometryShader, "", OpenGLHelper::GetDigest( rVertexShader, rFragmentShader, ""));
+ {
+ nId = OpenGLHelper::LoadShaders(rVertexShader, rFragmentShader, rPreamble, OpenGLHelper::GetDigest( rVertexShader, rFragmentShader, rPreamble));
+ }
else
+ {
+ assert(rPreamble.isEmpty());
nId = OpenGLHelper::LoadShaders(rVertexShader, rFragmentShader, rGeometryShader);
+ }
if (!nId)
return false;
glDeleteProgram(nId);
@@ -420,11 +425,17 @@ bool compiledShaderBinariesWork()
tryShaders("textureVertexShader", "areaScaleFragmentShader") &&
tryShaders("transformedTextureVertexShader", "maskedTextureFragmentShader") &&
tryShaders("transformedTextureVertexShader", "areaScaleFastFragmentShader") &&
+ tryShaders("transformedTextureVertexShader", "areaScaleFastFragmentShader", "", "#define MASKED") &&
tryShaders("transformedTextureVertexShader", "areaScaleFragmentShader") &&
+ tryShaders("transformedTextureVertexShader", "areaScaleFragmentShader", "", "#define MASKED") &&
tryShaders("transformedTextureVertexShader", "textureFragmentShader") &&
tryShaders("combinedTextureVertexShader", "combinedTextureFragmentShader") &&
+ tryShaders("combinedTextureVertexShader", "combinedTextureFragmentShader", "", "// flush shader\n") &&
tryShaders("textureVertexShader", "linearGradientFragmentShader") &&
tryShaders("textureVertexShader", "radialGradientFragmentShader") &&
+ tryShaders("textureVertexShader", "areaHashCRC64TFragmentShader") &&
+ tryShaders("textureVertexShader", "replaceColorFragmentShader") &&
+ tryShaders("textureVertexShader", "greyscaleFragmentShader") &&
tryShaders("textureVertexShader", "textureFragmentShader") &&
tryShaders("textureVertexShader", "convolutionFragmentShader") &&
tryShaders("textureVertexShader", "areaScaleFastFragmentShader") &&