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; }
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); }
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; }
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); }
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; }
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; }
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; }