mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 04:31:06 +00:00
[442/906] blur: optimize coordinates calculations
Save 28 instructions on i915 (mainly redundant MOVs) and gain a 25% (roughly measured with videotestsrc and glimagesink sync=false) speed bump
This commit is contained in:
parent
5fd66383ab
commit
b3c4eb4c61
1 changed files with 19 additions and 23 deletions
|
@ -390,17 +390,15 @@ const gchar *hconv9_fragment_source =
|
|||
"uniform float kernel[9];"
|
||||
"void main () {"
|
||||
" vec2 texturecoord[9];"
|
||||
" float s = gl_TexCoord[0].s;"
|
||||
" float t = gl_TexCoord[0].t;"
|
||||
" texturecoord[0] = vec2(s-4.0, t);"
|
||||
" texturecoord[1] = vec2(s-3.0, t);"
|
||||
" texturecoord[2] = vec2(s-2.0, t);"
|
||||
" texturecoord[3] = vec2(s-1.0, t);"
|
||||
" texturecoord[4] = vec2(s, t);"
|
||||
" texturecoord[5] = vec2(s+1.0, t);"
|
||||
" texturecoord[6] = vec2(s+2.0, t);"
|
||||
" texturecoord[7] = vec2(s+3.0, t);"
|
||||
" texturecoord[8] = vec2(s+4.0, t);"
|
||||
" texturecoord[4] = gl_TexCoord[0].st;"
|
||||
" texturecoord[3] = texturecoord[4] - vec2(1.0, 0.0);"
|
||||
" texturecoord[2] = texturecoord[3] - vec2(1.0, 0.0);"
|
||||
" texturecoord[1] = texturecoord[2] - vec2(1.0, 0.0);"
|
||||
" texturecoord[0] = texturecoord[1] - vec2(1.0, 0.0);"
|
||||
" texturecoord[5] = texturecoord[4] + vec2(1.0, 0.0);"
|
||||
" texturecoord[6] = texturecoord[5] + vec2(1.0, 0.0);"
|
||||
" texturecoord[7] = texturecoord[6] + vec2(1.0, 0.0);"
|
||||
" texturecoord[8] = texturecoord[7] + vec2(1.0, 0.0);"
|
||||
" int i;"
|
||||
" vec4 sum = vec4 (0.0);"
|
||||
" for (i = 0; i < 9; i++) { "
|
||||
|
@ -417,22 +415,20 @@ const gchar *vconv9_fragment_source =
|
|||
"uniform float kernel[9];"
|
||||
"void main () {"
|
||||
" vec2 texturecoord[9];"
|
||||
" float s = gl_TexCoord[0].s;"
|
||||
" float t = gl_TexCoord[0].t;"
|
||||
" texturecoord[0] = vec2(s, t-4.0);"
|
||||
" texturecoord[1] = vec2(s, t-3.0);"
|
||||
" texturecoord[2] = vec2(s, t-2.0);"
|
||||
" texturecoord[3] = vec2(s, t-1.0);"
|
||||
" texturecoord[4] = vec2(s, t);"
|
||||
" texturecoord[5] = vec2(s, t+1.0);"
|
||||
" texturecoord[6] = vec2(s, t+2.0);"
|
||||
" texturecoord[7] = vec2(s, t+3.0);"
|
||||
" texturecoord[8] = vec2(s, t+4.0);"
|
||||
" texturecoord[4] = gl_TexCoord[0].st;"
|
||||
" texturecoord[3] = texturecoord[4] - vec2(0.0, 1.0);"
|
||||
" texturecoord[2] = texturecoord[3] - vec2(0.0, 1.0);"
|
||||
" texturecoord[1] = texturecoord[2] - vec2(0.0, 1.0);"
|
||||
" texturecoord[0] = texturecoord[1] - vec2(0.0, 1.0);"
|
||||
" texturecoord[5] = texturecoord[4] + vec2(0.0, 1.0);"
|
||||
" texturecoord[6] = texturecoord[5] + vec2(0.0, 1.0);"
|
||||
" texturecoord[7] = texturecoord[6] + vec2(0.0, 1.0);"
|
||||
" texturecoord[8] = texturecoord[7] + vec2(0.0, 1.0);"
|
||||
" int i;"
|
||||
" vec4 sum = vec4 (0.0);"
|
||||
" for (i = 0; i < 9; i++) { "
|
||||
" vec4 neighbor = texture2DRect(tex, texturecoord[i]);"
|
||||
" sum += neighbor * kernel[i]; "
|
||||
" sum += neighbor * kernel[i];"
|
||||
" }"
|
||||
" gl_FragColor = sum;"
|
||||
"}";
|
||||
|
|
Loading…
Reference in a new issue