| /* |
| * cl_argument.h - CL kernel Argument |
| * |
| * Copyright (c) 2017 Intel Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * Author: Wind Yuan <[email protected]> |
| */ |
| |
| #ifndef XCAM_CL_KERNEL_ARGUMENT_H |
| #define XCAM_CL_KERNEL_ARGUMENT_H |
| |
| #include <xcam_std.h> |
| #include <ocl/cl_memory.h> |
| |
| namespace XCam { |
| |
| #define XCAM_DEFAULT_IMAGE_DIM 2 |
| #define XCAM_CL_KERNEL_MAX_WORK_DIM 3 |
| |
| struct CLWorkSize |
| { |
| uint32_t dim; |
| size_t global[XCAM_CL_KERNEL_MAX_WORK_DIM]; |
| size_t local[XCAM_CL_KERNEL_MAX_WORK_DIM]; |
| CLWorkSize(); |
| }; |
| |
| class CLArgument |
| { |
| public: |
| virtual ~CLArgument (); |
| void get_value (void *&adress, uint32_t &size); |
| |
| protected: |
| CLArgument (uint32_t size); |
| |
| private: |
| XCAM_DEAD_COPY (CLArgument); |
| |
| protected: |
| void *_arg_adress; |
| uint32_t _arg_size; |
| }; |
| |
| typedef std::list<SmartPtr<CLArgument> > CLArgList; |
| |
| |
| template<typename DataType> |
| class CLArgumentT |
| : public CLArgument |
| { |
| public: |
| |
| CLArgumentT (const DataType &value) |
| : CLArgument (sizeof (DataType)) |
| , _value (value) |
| { |
| _arg_adress = (void *) &_value; |
| } |
| ~CLArgumentT () {} |
| |
| private: |
| DataType _value; |
| }; |
| |
| template<typename DataType, int count> |
| class CLArgumentTArray |
| : public CLArgument |
| { |
| public: |
| |
| CLArgumentTArray (const DataType *value) |
| : CLArgument (sizeof (DataType) * count) |
| { |
| memcpy (&_value[0], value, sizeof (DataType) * count); |
| _arg_adress = (void *) &_value; |
| } |
| ~CLArgumentTArray () {} |
| |
| private: |
| DataType _value[count]; |
| }; |
| |
| class CLMemArgument |
| : public CLArgument |
| { |
| public: |
| |
| CLMemArgument (const SmartPtr<CLMemory> &mem) |
| : CLArgument (sizeof (cl_mem)) |
| , _mem (mem) |
| { |
| XCAM_ASSERT (mem.ptr ()); |
| _arg_adress = &mem->get_mem_id (); |
| } |
| ~CLMemArgument () {} |
| |
| private: |
| SmartPtr<CLMemory> _mem; |
| }; |
| |
| |
| } |
| |
| #endif //XCAM_CL_KERNEL_ARGUMENT_H |