Inner loop optimization of blur node
authorJeroen Bakker <j.bakker@atmind.nl>
Fri, 13 Jul 2012 12:50:10 +0000 (12:50 +0000)
committerJeroen Bakker <j.bakker@atmind.nl>
Fri, 13 Jul 2012 12:50:10 +0000 (12:50 +0000)
source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp
source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp

index d3c4ad96df05a20402ed46f13b211154174d6c38..93cc39849a29cea0c7e44b36fb7657a8e71a9476 100644 (file)
@@ -138,8 +138,10 @@ void GaussianBokehBlurOperation::executePixel(float *color, int x, int y, void *
        int index;
        int step = QualityStepHelper::getStep();
        int offsetadd = QualityStepHelper::getOffsetAdd();
+       const int addConst = (minx - x + this->m_radx);
+       const int mulConst = (this->m_radx * 2 + 1);
        for (int ny = miny; ny < maxy; ny += step) {
-               index = ((ny - y) + this->m_rady) * (this->m_radx * 2 + 1) + (minx - x + this->m_radx);
+               index = ((ny - y) + this->m_rady) * mulConst + addConst;
                int bufferindex = ((minx - bufferstartx) * 4) + ((ny - bufferstarty) * 4 * bufferwidth);
                for (int nx = minx; nx < maxx; nx += step) {
                        const float multiplier = this->m_gausstab[index];
index 1acd9f21b1a2288dff79c4694b2055d3c26fb1c5..1cf675a769ac0e1e12cf6a94c9a1bc255aba1f05 100644 (file)
@@ -92,12 +92,10 @@ void GaussianXBlurOperation::executePixel(float *color, int x, int y, void *data
        maxy = min(maxy, inputBuffer->getRect()->ymax);
        maxx = min(maxx, inputBuffer->getRect()->xmax);
 
-       int index;
        int step = getStep();
        int offsetadd = getOffsetAdd();
        int bufferindex = ((minx - bufferstartx) * 4) + ((miny - bufferstarty) * 4 * bufferwidth);
-       for (int nx = minx; nx < maxx; nx += step) {
-               index = (nx - x) + this->m_rad;
+       for (int nx = minx, index = (minx - x) + this->m_rad; nx < maxx; nx += step, index += step) {
                const float multiplier = this->m_gausstab[index];
                madd_v4_v4fl(color_accum, &buffer[bufferindex], multiplier);
                multiplier_accum += multiplier;
index 7ed455a115627919481e5b923784624af2f8720c..135dcf608728828ce836a86b36cb3c4e1297283e 100644 (file)
@@ -94,9 +94,10 @@ void GaussianYBlurOperation::executePixel(float *color, int x, int y, void *data
 
        int index;
        int step = getStep();
+       const int bufferIndexx = ((minx - bufferstartx) * 4) ;
        for (int ny = miny; ny < maxy; ny += step) {
                index = (ny - y) + this->m_rad;
-               int bufferindex = ((minx - bufferstartx) * 4) + ((ny - bufferstarty) * 4 * bufferwidth);
+               int bufferindex = bufferIndexx + ((ny - bufferstarty) * 4 * bufferwidth);
                const float multiplier = this->m_gausstab[index];
                madd_v4_v4fl(color_accum, &buffer[bufferindex], multiplier);
                multiplier_accum += multiplier;