Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
clfCopy.cpp
1 /*
2  * clfCopy.cpp
3  *
4  * Created on: Nov 7, 2012
5  * Author: fkellner
6  */
7 
8 #include <OpenCLFramework/Algorithm/clfCopy.hh>
9 #include <Base/Common/BIASpragma.hh>
10 #include <Base/Image/Image.hh>
11 #include <Base/Image/ImageIO.hh>
12 #include <Base/Debug/TimeMeasure.hh>
13 
14 using namespace BIAS;
15 using namespace BIAS;
16 
17 clfCopy::clfCopy(clfContext *ctx, bool sharedGL, unsigned int device) : clfAlgorithm(ctx,sharedGL,device) {
18 
20  "__constant sampler_t smp_cpy = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST;\n"
21  "\n"
22  "__kernel void SimpleCopy(__read_only image2d_t input, __write_only image2d_t output) {\n"
23  " int x = get_global_id(0);\n"
24  " int y = get_global_id(1);\n"
25  " if (x>=get_image_width(output) || y>=get_image_height(output)) return;\n"
26  " float4 res = read_imagef(input, smp_cpy, (int2)(x,y));"
27  " write_imagef(output, (int2)(x,y), res);\n"
28  "}\n"
29  );
30  //programCL_->AddSource("/OpenCLFramework/Algorithm/cl/copy.cl");
31 
32  programCL_->Build();
33  programCL_->AddKernel("SimpleCopy");
34 }
35 
37 }
38 
39 void clfCopy::Copy(clfImage2D *src, clfImage2D *dest) {
40  programCL_->KernelSetArgument("SimpleCopy", 0, *src);
41  programCL_->KernelSetArgument("SimpleCopy", 1, *dest);
42  context_->RunOn2DRange(*programCL_, "SimpleCopy", src->Width(), src->Height(), 16,16);
43 }
clfProgram * programCL_
Definition: clfAlgorithm.hh:35
OpenCL Image2D wrapper.
Definition: clfImage2D.hh:46
clfCopy(clfContext *ctx=NULL, bool sharedGL=false, unsigned int device=0)
Definition: clfCopy.cpp:17
void Build(int deviceNr=0, std::string options="")
builds the sources added by AddSource and AddSourceFromString
Definition: clfProgram.cpp:115
virtual ~clfCopy()
Definition: clfCopy.cpp:36
void AddSourceFromString(std::string sourceCode)
adds source code from a string
Definition: clfProgram.cpp:100
OpenCL Context wrapper.
Definition: clfContext.hh:49
void Copy(clfImage2D *src, clfImage2D *dest)
Definition: clfCopy.cpp:39
void KernelSetArgument(std::string kernelname, unsigned int argnumber, clfBuffer &buffer)
set kernel argument
Definition: clfProgram.cpp:177
void AddKernel(std::string kernelname)
adds a kernel to the program.
Definition: clfProgram.cpp:158
void RunOn2DRange(clfProgram &program, std::string kernelname, unsigned int globalrangeX, unsigned int globalrangeY, unsigned int localrangeX=0, unsigned int localrangeY=0)
run a kernel on a 2D memory range
Definition: clfContext.cpp:234
unsigned int Width() const
Definition: clfImage2D.hh:73
clfContext * context_
Definition: clfAlgorithm.hh:34
unsigned int Height() const
Definition: clfImage2D.hh:74