Hello,
I am developping a short application to downsampling images on my samsung alpha.
I use OpenCL to develop on my GPU.
I have a problem when I use a sampler_t. Just when I decrare a sampler_t variable in my kernel, the program crash and gave me that error:
<CODE>
12-03 13:50:05.411: E/AndroidRuntime(990): FATAL EXCEPTION: main
12-03 13:50:05.411: E/AndroidRuntime(990): Process: com.example.subsamplecamera, PID: 990
12-03 13:50:05.411: E/AndroidRuntime(990): java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
12-03 13:50:05.411: E/AndroidRuntime(990): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
12-03 13:50:05.411: E/AndroidRuntime(990): at dalvik.system.NativeStart.main(Native Method)
12-03 13:50:05.411: E/AndroidRuntime(990): Caused by: java.lang.reflect.InvocationTargetException
12-03 13:50:05.411: E/AndroidRuntime(990): at java.lang.reflect.Method.invokeNative(Native Method)
12-03 13:50:05.411: E/AndroidRuntime(990): at java.lang.reflect.Method.invoke(Method.java:515)
12-03 13:50:05.411: E/AndroidRuntime(990): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
12-03 13:50:05.411: E/AndroidRuntime(990): ... 2 more
12-03 13:50:05.411: E/AndroidRuntime(990): Caused by: java.lang.Exception: @decode: clBuildProgram -11
12-03 13:50:05.411: E/AndroidRuntime(990): at com.example.subsamplecamera.MainActivity.compileKernels(Native Method)
12-03 13:50:05.411: E/AndroidRuntime(990): at com.example.subsamplecamera.MainActivity.onSurfaceTextureAvailable(MainActivity.java:119)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.TextureView.getHardwareLayer(TextureView.java:396)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.View.getDisplayList(View.java:14215)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.View.getDisplayList(View.java:14292)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.View.draw(View.java:15070)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.ViewGroup.drawChild(ViewGroup.java:3340)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.View.getDisplayList(View.java:14245)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.View.draw(View.java:15359)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.widget.FrameLayout.draw(FrameLayout.java:472)
12-03 13:50:05.411: E/AndroidRuntime(990): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2621)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.View.getDisplayList(View.java:14250)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1597)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1469)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2786)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2652)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2223)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1259)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6537)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.Choreographer.doCallbacks(Choreographer.java:613)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.Choreographer.doFrame(Choreographer.java:583)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.os.Handler.handleCallback(Handler.java:733)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.os.Handler.dispatchMessage(Handler.java:95)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.os.Looper.loop(Looper.java:146)
12-03 13:50:05.411: E/AndroidRuntime(990): at android.app.ActivityThread.main(ActivityThread.java:5635)
12-03 13:50:05.411: E/AndroidRuntime(990): ... 5 more
</CODE>
Can someone give me a hand?
Best regard.
Sorry I made a mistake during the copy.
Here is the full build log:
12-09 20:50:53.167: I/JNIProcessor(1272): @compileKernels
12-09 20:50:53.267: I/JNIProcessor(1272): @compileKernels error
12-09 20:50:53.267: E/JNIProcessor(1272): @compileKernels error <source>:13:20: warning: double precision constant requires cl_khr_fp64, casting to single precision
12-09 20:50:53.267: E/JNIProcessor(1272): int val = 255-(0.403936*u+0.838316*v+y);
12-09 20:50:53.267: E/JNIProcessor(1272):
^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:13:31: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): int val = 255-(0.403936*u+0.838316*v+y);12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:24:11: error: using invalid qualifier with sampler type12-09 20:50:53.267: E/JNIProcessor(1272): sampler_t srcSampler;12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:44:24: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): out[inIdx] = 255-(0.403936*(u-128)+0.838316*(v-128)+(y-16));12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:44:41: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): out[inIdx] = 255-(0.403936*(u-128)+0.838316*(v-128)+(y-16));12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:57:33: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): float x0 = src[ix-2+(iy)*w]/16.0;12-09 20:50:53.267: E/JNIProcessor(1272): 12-09 20:50:53.267: E/JNIProcessor(1272): @compileKernels error <source>:13:20: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): int val = 255-(0.403936*u+0.838316*v+y);12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:13:31: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): int val = 255-(0.403936*u+0.838316*v+y);12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:24:11: error: using invalid qualifier with sampler type12-09 20:50:53.267: E/JNIProcessor(1272): sampler_t srcSampler;12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:44:24: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): out[inIdx] = 255-(0.403936*(u-128)+0.838316*(v-128)+(y-16));12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:44:41: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): out[inIdx] = 255-(0.403936*(u-128)+0.838316*(v-128)+(y-16));12-09 20:50:53.267: E/JNIProcessor(1272): ^12-09 20:50:53.267: E/JNIProcessor(1272): <source>:57:33: warning: double precision constant requires cl_khr_fp64, casting to single precision12-09 20:50:53.267: E/JNIProcessor(1272): float x0 = src[ix-2+(iy)*w]/16.0;
12-09 20:50:53.267: E/JNIProcessor(1272): <source>:24:11: error: using invalid qualifier with sampler type
That's because the sampler has to be constant, for example:
const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST;
Regarding the warnings: like I said before you need to add "f" at the end of your float constants otherwise the compiler will think they are double values.
It works now.
Thank you very much.