     dst_data.ptr(idy)[idx] = out;
 }
 
+
+__global__
+void filter_gauss_vert_v11( cudaTextureObject_t src_data,
+                            Plane2D_float       dst_data )
+{
+    int block_x = blockIdx.x * blockDim.x;
+    int block_y = blockIdx.y * blockDim.y;
+    int idx     = threadIdx.x;
+    int idy;
+
+    float g;
+    float val;
+    float out = 0;
+
+    for( int offset = V11_RANGE; offset>0; offset-- ) {
+        g  = popart::d_gauss_filter[GAUSS_ONE_SIDE_RANGE - offset];
+
+        idy = threadIdx.y - offset;
+        val = tex2D<float>( src_data, block_x + idx, block_y + idy );
+        out += ( val * g );
+
+        idy = threadIdx.y + offset;
+        val = tex2D<float>( src_data, block_x + idx, block_y + idy );
+        out += ( val * g );
+    }
+
+    g  = popart::d_gauss_filter[GAUSS_ONE_SIDE_RANGE];
+    idy = threadIdx.y;
+    val = tex2D<float>( src_data, block_x + idx, block_y + idy );
+    out += ( val * g );
+
+    idx = block_x+threadIdx.x;
+    idy = block_y+threadIdx.y;
+    const int dst_w = dst_data.getWidth();
+    const int dst_h = dst_data.getHeight();
+    if( idx >= dst_w ) return;
+    if( idy >= dst_h ) return;
+
+    dst_data.ptr(idy)[idx] = out;
+}
+
 __global__
 void filter_gauss_vert_v11_dog( cudaTextureObject_t top_data,
                                 cudaTextureObject_t bot_data,


    dst_data.ptr(idy)[idx] = out;
}
__global__
void filter_gauss_horiz_v11( cudaTextureObject_t src_data,
                             Plane2D_float       dst_data )
{
    int block_x = blockIdx.x * V11_EDGE_LEN;
    int block_y = blockIdx.y * V11_EDGE_LEN;
    int idx;
    int idy     = threadIdx.y;


    for( int offset = V11_RANGE; offset>0; offset-- ) {
        g  = popart::d_gauss_filter[GAUSS_ONE_SIDE_RANGE - offset];

        idx = threadIdx.x - offset;
        val = tex2D<float>( src_data, 2 * ( block_x + idx ), 2 * ( block_y + idy ) );
        out += ( val * g );

        idx = threadIdx.x + offset;
        val = tex2D<float>( src_data, 2 * ( block_x + idx ), 2 * ( block_y + idy ) );
        out += ( val * g );
    }

    g  = popart::d_gauss_filter[GAUSS_ONE_SIDE_RANGE];
    idx = threadIdx.x;
    val = tex2D<float>( src_data, 2 * ( block_x + idx ), 2 * ( block_y + idy ) );
    out += ( val * g );

    idx = block_x+threadIdx.x;
