From a42e34f1b8b90799eb48f09246bec863a3af0057 Mon Sep 17 00:00:00 2001 From: S2S Date: Sun, 10 Nov 2019 18:48:43 +0100 Subject: [PATCH] Write macros for reading a vector or matrix without hurting performance. Cleanup blender code. --- .../GLSL/glsl_CombinerProgramBuilder.cpp | 63 +++++++------------ 1 file changed, 21 insertions(+), 42 deletions(-) diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp index b9002c64..19e26b67 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp @@ -509,26 +509,17 @@ public: { #if 1 m_part = - " muxPM[0] = clampedColor; \n" - " lowp vec4 vprobe = vec4(0.0, 1.0, 2.0, 3.0); \n" - " if (uForceBlendCycle1 != 0) { \n" - " muxA[0] = clampedColor.a; \n" - " lowp float muxa = dot(muxA, vec4(equal(vec4(uBlendMux1[1]), vprobe))); \n" - " muxB[0] = 1.0 - muxa; \n" - " lowp vec4 muxpm0 = muxPM * vec4(equal(vec4(uBlendMux1[0]), vprobe)); \n" - " lowp vec4 muxpm2 = muxPM * vec4(equal(vec4(uBlendMux1[2]), vprobe)); \n" - " lowp float muxb = dot(muxB, vec4(equal(vec4(uBlendMux1[3]), vprobe))); \n" - " lowp vec4 blend1 = (muxpm0 * muxa) + (muxpm2 * muxb); \n" - " clampedColor.rgb = clamp(blend1.rgb, 0.0, 1.0); \n" - " } else { \n" -// Workaround for Intel drivers for Mac, issue #1601 -#if defined(OS_MAC_OS_X) - " clampedColor.rgb = muxPM[uBlendMux1[0]].rgb; \n" -#else - " lowp vec4 muxpm0 = muxPM * vec4(equal(vec4(uBlendMux1[0]), vprobe)); \n" - " clampedColor.rgb = muxpm0.rgb; \n" -#endif - " } \n" + " #define STVEC(pos) step(float(pos) - 0.5, vec4(0.0,1.0,2.0,3.0)) - step(float(pos) + 0.5, vec4(0.0,1.0,2.0,3.0)) \n" // Return the vector of the standard basis of R^4 with a 1 at position and 0 otherwise. + " #define MUXA(pos) dot(muxA, STVEC(pos)) \n" + " #define MUXB(pos) dot(muxB, STVEC(pos)) \n" + " #define MUXPM(pos) muxPM*(STVEC(pos)) \n" + " muxPM[0] = clampedColor; \n" + " if (uForceBlendCycle1 != 0) { \n" + " muxA[0] = clampedColor.a; \n" + " muxB[0] = 1.0 - MUXA(uBlendMux1[1]); \n" + " lowp vec4 blend1 = MUXPM(uBlendMux1[0]) * MUXA(uBlendMux1[1]) + MUXPM(uBlendMux1[2]) * MUXB(uBlendMux1[3]); \n" + " clampedColor.rgb = clamp(blend1.rgb, 0.0, 1.0); \n" + " } else clampedColor.rgb = (MUXPM(uBlendMux1[0])).rgb; \n" ; #else // Keep old code for reference @@ -551,28 +542,16 @@ public: ShaderBlender2() { #if 1 - m_part = - " muxPM[0] = clampedColor; \n" - " muxPM[1] = vec4(0.0); \n" - " if (uForceBlendCycle2 != 0) { \n" - " muxA[0] = clampedColor.a; \n" - " lowp float muxa = dot(muxA, vec4(equal(vec4(uBlendMux2[1]), vprobe))); \n" - " muxB[0] = 1.0 - muxa; \n" - " lowp vec4 muxpm0 = muxPM*vec4(equal(vec4(uBlendMux2[0]), vprobe)); \n" - " lowp vec4 muxpm2 = muxPM*vec4(equal(vec4(uBlendMux2[2]), vprobe)); \n" - " lowp float muxb = dot(muxB,vec4(equal(vec4(uBlendMux2[3]), vprobe))); \n" - " lowp vec4 blend2 = muxpm0 * muxa + muxpm2 * muxb; \n" - " clampedColor.rgb = clamp(blend2.rgb, 0.0, 1.0); \n" - " } else { \n" -// Workaround for Intel drivers for Mac, issue #1601 -#if defined(OS_MAC_OS_X) - " clampedColor.rgb = muxPM[uBlendMux2[0]].rgb; \n" -#else - " lowp vec4 muxpm0 = muxPM * vec4(equal(vec4(uBlendMux2[0]), vprobe)); \n" - " clampedColor.rgb = muxpm0.rgb; \n" -#endif - " } \n" - ; + m_part = + " muxPM[0] = clampedColor; \n" + " muxPM[1] = vec4(0.0); \n" + " if (uForceBlendCycle2 != 0) { \n" + " muxA[0] = clampedColor.a; \n" + " muxB[0] = 1.0 - MUXA(uBlendMux2[1]); \n" + " lowp vec4 blend2 = MUXPM(uBlendMux2[0]) * MUXA(uBlendMux2[1]) + MUXPM(uBlendMux2[2]) * MUXB(uBlendMux2[3]); \n" + " clampedColor.rgb = clamp(blend2.rgb, 0.0, 1.0); \n" + " } else clampedColor.rgb = (MUXPM(uBlendMux2[0])).rgb; \n" + ; #else // Keep old code for reference m_part =