/* * Default kernel arguments * arg0: * input, __read_only image2d_t * arg1: * output, __write_only image2d_t * suppose cl can get width/height pixels from * get_image_width/get_image_height */ XCamReturn CLImageKernel::pre_execute (SmartPtr<DrmBoBuffer> &input, SmartPtr<DrmBoBuffer> &output) { XCamReturn ret = XCAM_RETURN_NO_ERROR; SmartPtr<CLContext> context = get_context (); #define XCAM_CL_MAX_ARGS 256 CLArgument args[XCAM_CL_MAX_ARGS]; uint32_t arg_count = XCAM_CL_MAX_ARGS; CLWorkSize work_size; ret = prepare_arguments (input, output, args, arg_count, work_size); XCAM_ASSERT (arg_count); for (uint32_t i = 0; i < arg_count; ++i) { ret = set_argument (i, args[i].arg_adress, args[i].arg_size); XCAM_FAIL_RETURN ( WARNING, ret == XCAM_RETURN_NO_ERROR, ret, "cl image kernel(%s) set argc(%d) failed", get_kernel_name (), i); } XCAM_ASSERT (work_size.global[0]); ret = set_work_size (work_size.dim, work_size.global, work_size.local); XCAM_FAIL_RETURN ( WARNING, ret == XCAM_RETURN_NO_ERROR, ret, "cl image kernel(%s) set work size failed", get_kernel_name ()); return XCAM_RETURN_NO_ERROR; }
XCamReturn CLKernel::set_arguments (const CLArgList &args, const CLWorkSize &work_size) { XCamReturn ret = XCAM_RETURN_NO_ERROR; uint32_t i_count = 0; XCAM_FAIL_RETURN ( ERROR, _arg_list.empty (), XCAM_RETURN_ERROR_PARAM, "cl image kernel(%s) arguments was already set, can NOT be set twice", get_kernel_name ()); for (CLArgList::const_iterator iter = args.begin (); iter != args.end (); ++iter, ++i_count) { const SmartPtr<CLArgument> &arg = *iter; XCAM_FAIL_RETURN ( WARNING, arg.ptr (), XCAM_RETURN_ERROR_PARAM, "cl image kernel(%s) argc(%d) is NULL", get_kernel_name (), i_count); void *adress = NULL; uint32_t size = 0; arg->get_value (adress, size); ret = set_argument (i_count, adress, size); XCAM_FAIL_RETURN ( WARNING, ret == XCAM_RETURN_NO_ERROR, ret, "cl image kernel(%s) set argc(%d) failed", get_kernel_name (), i_count); } ret = set_work_size (work_size); XCAM_FAIL_RETURN ( WARNING, ret == XCAM_RETURN_NO_ERROR, ret, "cl image kernel(%s) set worksize(global:%dx%dx%d, local:%dx%dx%d) failed", XCAM_STR(get_kernel_name ()), (int)work_size.global[0], (int)work_size.global[1], (int)work_size.global[2], (int)work_size.local[0], (int)work_size.local[1], (int)work_size.local[2]); _arg_list = args; return ret; }