Exemplo n.º 1
0
cl_int cl_convert_rgbf_to_yuvf(cl_environment_t *pEnv,
                               float *r,
                               float *g,
                               float *b,
                               float *y,
                               float *u,
                               float *v,
                               float *a, // constants
                               cl_uint numPixels)
{
    cl_int err = CL_SUCCESS;
    const size_t numBytes = numPixels * sizeof(float);
    cl_kernel_param_t params[] = {
        {CL_KPARAM_BUFFER_1D, numBytes, r, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, numBytes, g, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, numBytes, b, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, sizeof(float) * 9, a, NULL, CL_MEM_READ_ONLY}, // constants only have 9 elements
        {CL_KPARAM_BUFFER_1D, numBytes, y, NULL, CL_MEM_WRITE_ONLY},
        {CL_KPARAM_BUFFER_1D, numBytes, u, NULL, CL_MEM_WRITE_ONLY},
        {CL_KPARAM_BUFFER_1D, numBytes, v, NULL, CL_MEM_WRITE_ONLY},
    };
    cl_kernel_call_t call = {
        "kernel_rgb2yuv",
        params, dimof(params),
        1,
        {0,0,0},
        {numPixels, 0, 0},
        {1,1,1},
        CL_SUCCESS,0,0,0
    };
    err = clCallKernel(pEnv, &call, 1);
    return err;
}
Exemplo n.º 2
0
cl_int nbodies(cl_environment_t *pEnv,
               cl_float *m,
               cl_float4 *a,
               cl_float4 *v,
               cl_float4 *p,
               cl_float *t,
               cl_uint numBodies)
{
    cl_uint n = sizeof(cl_float)*numBodies;
    cl_uint n4 = sizeof(cl_float4)*numBodies;
    cl_kernel_param_t params[] = {
        {CL_KPARAM_BUFFER_1D, n,  m, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, n4, a, NULL, CL_MEM_READ_WRITE},
        {CL_KPARAM_BUFFER_1D, n4, v, NULL, CL_MEM_READ_WRITE},
        {CL_KPARAM_BUFFER_1D, n4, p, NULL, CL_MEM_READ_WRITE},
        {CL_KPARAM_BUFFER_1D, n,  t, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(numBodies), &numBodies, NULL, CL_MEM_READ_ONLY},
    };
    cl_kernel_call_t call = {
        "kernel_nbody",
        params, dimof(params),
        1,
        {0,0,0},
        {numBodies, 0, 0},
        {1,1,1},
        CL_SUCCESS,0,0,0
    };
    return clCallKernel(pEnv, &call,1);
}
Exemplo n.º 3
0
Arquivo: imgfilter.c Projeto: aosp/dvp
cl_int imgfilter1d_opt(cl_environment_t *pEnv,
                   cl_uint width,
                   cl_uint height,
                   cl_uchar *pSrc,
                   cl_int srcStride,
                   cl_uchar *pDst,
                   cl_int dstStride,
                   cl_char *op,
                   cl_uint opDim,
                   cl_uint range,
                   cl_uint limit)
{
    cl_int err = CL_SUCCESS;
    cl_uint numSrcBytes = srcStride * height;
    cl_uint numDstBytes = dstStride * height;
    cl_uint numOpBytes = 2 * opDim * opDim;
    cl_kernel_param_t params[] = {
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &width, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &height, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, numSrcBytes, pSrc, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_int), &srcStride, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, numDstBytes, pDst, NULL, CL_MEM_WRITE_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_int), &dstStride, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, numOpBytes, op, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &opDim, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &range, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &limit, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_LOCAL,     sizeof(cl_uchar)*18, NULL, NULL, CL_MEM_READ_WRITE},
        {CL_KPARAM_LOCAL,     sizeof(cl_char)*18, NULL, NULL, CL_MEM_READ_WRITE},
    };
    cl_kernel_call_t call = {
        "kernel_edge_filter_opt",
        params, dimof(params),
        2,
        {0,0,0},
        {width, height, 0},
        {1,1,1},
        CL_SUCCESS, 0,0,0
    };
    err = clCallKernel(pEnv, &call,1);
    return err;
}
Exemplo n.º 4
0
cl_int distance(cl_environment_t *pEnv,
                cl_float4 *p,
                cl_float *d,
                cl_uint numPoints)
{
    cl_uint n  = sizeof(float) * numPoints;
    cl_uint n4 = sizeof(cl_float4) * numPoints;
    cl_kernel_param_t params[] = {
        {CL_KPARAM_BUFFER_1D, n4,p,NULL,CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, n ,d,NULL,CL_MEM_WRITE_ONLY},
    };
    cl_kernel_call_t call = {
        "kernel_magnitude",
        params, dimof(params),
        1,
        {0,0,0},
        {numPoints, 0, 0},
        {1,1,1},
        CL_SUCCESS, 0,0,0
    };
    return clCallKernel(pEnv, &call,1);
}
Exemplo n.º 5
0
cl_int convert_uyvy_to_2bgr(cl_environment_t *pEnv, cl_uchar *pUYVY, cl_uchar *pBGR, cl_uint width, cl_uint height, cl_int srcStride, cl_int dstStride)
{
    cl_int err = CL_SUCCESS;
    cl_kernel_param_t params[] = {
        {CL_KPARAM_BUFFER_1D, srcStride*height, pUYVY, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, dstStride*height, pBGR, NULL, CL_MEM_WRITE_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &width, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &height, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_int), &srcStride, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_int), &dstStride, NULL, CL_MEM_READ_ONLY},
    };
    cl_kernel_call_t call = {
        "kernel_uyvy_to_2bgr",
        params, dimof(params),
        2,
        {0,0,0},
        {width/2, height, 0}, // width/2 since it is macropixel packed!
        {1,1,1},
        CL_SUCCESS, 0,0,0
    };
    err = clCallKernel(pEnv, &call, 1);
    return err;
}
Exemplo n.º 6
0
cl_int convert_yuv420_to_luma(cl_environment_t *pEnv, cl_uchar *pYUV420, cl_uchar *pLuma, cl_uint width, cl_uint height, cl_int srcStride, cl_int dstStride)
{
    cl_int err = CL_SUCCESS;
    cl_kernel_param_t params[] = {
        {CL_KPARAM_BUFFER_1D, srcStride*height, pYUV420, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, dstStride*height, pLuma, NULL, CL_MEM_WRITE_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &width, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_uint), &height, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_int), &srcStride, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(cl_int), &dstStride, NULL, CL_MEM_READ_ONLY},
    };
    cl_kernel_call_t call = {
        "kernel_yuv420_to_luma",
        params, dimof(params),
        2,
        {0,0,0},
        {width, height, 0},
        {1,1,1},
        CL_SUCCESS, 0,0,0
    };
    err = clCallKernel(pEnv, &call, 1);
    return err;
}
Exemplo n.º 7
0
cl_int kernel_spacetime(cl_environment_t *pEnv,
                       cl_spacetime_grid_t *grid,
                       cl_body_t *body) {
    cl_int err;
    cl_double distance[GRID_SIZE];

    cl_kernel_param_t params[] = {
        {CL_KPARAM_BUFFER_0D, sizeof(precision4), &body->m_position, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_0D, sizeof(precision),  &body->m_mass, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, sizeof(precision4)*GRID_SIZE, grid->m_position, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, sizeof(precision)*GRID_SIZE,  grid->m_mass, NULL, CL_MEM_READ_ONLY},
        {CL_KPARAM_BUFFER_1D, sizeof(precision4)*GRID_SIZE,  grid->m_budge, NULL, CL_MEM_WRITE_ONLY},
    };
    cl_kernel_call_t calls[] = {
        {
            "kernel_distort",
            params, dimof(params),
            1, // num dimensions
            {0, 0, 0}, // offsets
            {GRID_SIZE, 0, 0}, // dimensionality
            {1, 1, 1}, // local work size
            CL_SUCCESS,
            //0, {}, {}
        }
    };

    err = clCallKernel(pEnv, calls, dimof(calls));
    printf("Distance from grid[0] to body is %lf, pull is %lf\n", distance[0], spacetime->m_grid.m_pull[0]);
    if (err != CL_SUCCESS)
        return err;
    else {
        for (size_t e = 0; e < dimof(calls); e++)
            if (calls[e].err != CL_SUCCESS)
                return calls[e].err;
    }
    return err;
}