diff options
author | Filippo Argiolas <filippo.argiolas@gmail.com> | 2010-04-23 17:49:45 +0200 |
---|---|---|
committer | Filippo Argiolas <filippo.argiolas@gmail.com> | 2010-04-24 20:13:12 +0200 |
commit | 4fcde4ca2a629bae00786e661ace4c00c4fb65ee (patch) | |
tree | 7539d9080f9520d9ebabaffe5194ab0dbf4c90c7 | |
parent | f0250a6118558a5326973d212850b4ec718175df (diff) |
convolution: reduce the number of register used
Reduce the number of register calculating texture lookup offset on the
fly. It was just a simple sequence, no need to store it in a array.
Fixes maximum number of registers exceeded error with i915. Still
exceed maximum indirect texture lookups and maximum ALU instructions.
Maybe we should gave up some blur goodness and use lightly more little
kernels.
-rw-r--r-- | gst/gl/effects/gstgleffectssources.c | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/gst/gl/effects/gstgleffectssources.c b/gst/gl/effects/gstgleffectssources.c index 32e6d98..9ed7560 100644 --- a/gst/gl/effects/gstgleffectssources.c +++ b/gst/gl/effects/gstgleffectssources.c @@ -282,21 +282,13 @@ const gchar *hconv9_fragment_source = "void main () {" /* "float offset[9] = float[9] (-4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0);" */ /* don't use array constructor so we don't have to depend on #version 120 */ - " float offset[9];" - " offset[0] = -4.0;" - " offset[1] = -3.0;" - " offset[2] = -2.0;" - " offset[3] = -1.0;" - " offset[4] = 0.0;" - " offset[5] = 1.0;" - " offset[6] = 2.0;" - " offset[7] = 3.0;" - " offset[8] = 4.0;" + " float offset = - 4.0;" " vec2 texturecoord = gl_TexCoord[0].st;" " int i;" " vec4 sum = vec4 (0.0);" " for (i = 0; i < 9; i++) { " - " vec4 neighbor = texture2DRect(tex, vec2(texturecoord.s+offset[i], texturecoord.t)); " + " ++offset;" + " vec4 neighbor = texture2DRect(tex, vec2(texturecoord.s+offset, texturecoord.t)); " " sum += neighbor * kernel[i]/norm_const; " " }" " gl_FragColor = sum + norm_offset;" @@ -312,21 +304,13 @@ const gchar *vconv9_fragment_source = "void main () {" /* "float offset[9] = float[9] (-4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0);" */ /* don't use array constructor so we don't have to depend on #version 120 */ - " float offset[9];" - " offset[0] = -4.0;" - " offset[1] = -3.0;" - " offset[2] = -2.0;" - " offset[3] = -1.0;" - " offset[4] = 0.0;" - " offset[5] = 1.0;" - " offset[6] = 2.0;" - " offset[7] = 3.0;" - " offset[8] = 4.0;" + " float offset = - 4.0;" " vec2 texturecoord = gl_TexCoord[0].st;" " int i;" " vec4 sum = vec4 (0.0);" " for (i = 0; i < 9; i++) { " - " vec4 neighbor = texture2DRect(tex, vec2(texturecoord.s, texturecoord.t+offset[i])); " + " ++offset;" + " vec4 neighbor = texture2DRect(tex, vec2(texturecoord.s, texturecoord.t+offset)); " " sum += neighbor * kernel[i]/norm_const; " " }" " gl_FragColor = sum + norm_offset;" |