26 #if defined(CL_SIFTGPU_ENABLED)
39 int IsValidProgram(){
return _program && _valid;}
40 ProgramCL(
const char*
name,
const char * code, cl_context contex, cl_device_id device);
42 void PrintBuildLog(cl_device_id device,
int all);
46 friend class ProgramBagCL;
47 friend class ProgramBagCLN;
54 ProgramCL* s_shader_h;
55 ProgramCL* s_shader_v;
60 FilterCL() : s_shader_h(
NULL), s_shader_v(
NULL), _size(0), _id(0), _weight(
NULL) {}
61 ~FilterCL() {
if(s_shader_h)
delete s_shader_h;
if(s_shader_v)
delete s_shader_v;
if(_weight)
delete _weight; }
69 cl_platform_id _platform;
72 cl_command_queue _queue;
75 ProgramCL * s_sampling;
76 ProgramCL * s_sampling_k;
77 ProgramCL * s_sampling_u;
78 ProgramCL * s_zero_pass;
81 ProgramCL * s_unpack_dog;
82 ProgramCL * s_unpack_grd;
83 ProgramCL * s_unpack_key;
84 ProgramCL * s_dog_pass;
85 ProgramCL * s_grad_pass;
86 ProgramCL * s_grad_pass2;
87 ProgramCL * s_gray_pack;
88 ProgramCL * s_keypoint;
90 FilterCL * f_gaussian_skip0;
91 vector<FilterCL*> f_gaussian_skip0_v;
92 FilterCL * f_gaussian_skip1;
93 FilterCL ** f_gaussian_step;
94 int _gaussian_step_num;
97 bool InitializeContext();
98 virtual ~ProgramBagCL();
100 cl_context GetContextCL() {
return _context;}
101 cl_command_queue GetCommandQueue() {
return _queue;}
102 static const char* GetErrorString(cl_int
error);
103 static bool CheckErrorCL(cl_int
error,
const char* location =
NULL);
105 FilterCL * CreateGaussianFilter(
float sigma);
106 void CreateGaussianFilters(
SiftParam¶m);
107 void SelectInitialSmoothingFilter(
int octave_min,
SiftParam¶m);
108 void FilterInitialImage(CLTexImage* tex, CLTexImage* buf);
109 void FilterSampledImage(CLTexImage* tex, CLTexImage* buf);
110 void UnpackImage(CLTexImage*src, CLTexImage* dst);
111 void UnpackImageDOG(CLTexImage*src, CLTexImage* dst);
112 void UnpackImageGRD(CLTexImage*src, CLTexImage* dst);
113 void UnpackImageKEY(CLTexImage*src, CLTexImage* dog, CLTexImage* dst);
114 void ComputeDOG(CLTexImage*tex, CLTexImage* texp, CLTexImage* dog, CLTexImage* grad, CLTexImage* rot);
115 void ComputeKEY(CLTexImage*dog, CLTexImage* key,
float Tdog,
float Tedge);
117 virtual void SampleImageU(CLTexImage *dst, CLTexImage *src,
int log_scale);
118 virtual void SampleImageD(CLTexImage *dst, CLTexImage *src,
int log_scale = 1);
119 virtual void FilterImage(FilterCL* filter, CLTexImage *dst, CLTexImage *src, CLTexImage*tmp);
120 virtual ProgramCL* CreateFilterH(
float kernel[],
int width);
121 virtual ProgramCL* CreateFilterV(
float kernel[],
int width);
122 virtual FilterCL* CreateFilter(
float kernel[],
int width);
124 virtual void InitProgramBag(
SiftParam¶m);
125 virtual void LoadDescriptorShader();
126 virtual void LoadDescriptorShaderF2();
127 virtual void LoadOrientationShader();
128 virtual void LoadGenListShader(
int ndoglev,
int nlev);
129 virtual void UnloadProgram() ;
130 virtual void LoadKeypointShader();
131 virtual void LoadFixedShaders();
132 virtual void LoadDisplayShaders();
133 virtual void LoadDynamicShaders(
SiftParam& param);
136 virtual void SetGradPassParam(
int texP);
137 virtual void SetGenListEndParam(
int ktex);
138 virtual void SetGenListStartParam(
float width,
int tex0);
139 virtual void SetGenListInitParam(
int w,
int h);
140 virtual void SetMarginCopyParam(
int xmax,
int ymax);
141 virtual void SetDogTexParam(
int texU,
int texD);
142 virtual void SetGenListStepParam(
int tex,
int tex0);
143 virtual void SetGenVBOParam(
float width,
float fwidth,
float size);
144 virtual void SetFeatureDescirptorParam(
int gtex,
int otex,
float dwidth,
float fwidth,
float width,
float height,
float sigma);
145 virtual void SetFeatureOrientationParam(
int gtex,
int width,
int height,
float sigma,
int stex,
float step);
146 virtual void SetSimpleOrientationInput(
int oTex,
float sigma,
float sigma_step);
151 class ProgramBagCLN:
public ProgramBagCL
154 virtual void SampleImageD(CLTexImage *dst, CLTexImage *src,
int log_scale = 1);
155 virtual FilterCL* CreateFilter(
float kernel[],
int width);
156 virtual ProgramCL* CreateFilterH(
float kernel[],
int width);
157 virtual ProgramCL* CreateFilterV(
float kernel[],
int width);
158 virtual void FilterImage(FilterCL* filter, CLTexImage *dst, CLTexImage *src, CLTexImage*tmp);
159 virtual void LoadFixedShaders();
160 virtual void LoadDisplayShaders();
virtual void * GetProgramID()=0
virtual int UseProgram()=0
static void error(char *msg)