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.
I don't see what crash you're talking about: the logcat message clearly indicates an exception has been thrown (This isn't a crash)
I therefore assume you're using the C++11 Khronos wrapper and you've manually enabled the exceptions therefore either:
- Don't enable the exceptions and check the error codes by hand.
- Handle the exceptions in your code:
try{ program.build(options);}catch( cl::Error err){ std::stringstream ss; std::string str; ss << err.what() << "(" << err.err() << ")" << std::endl; ss << "Build Options:\t" << program.getBuildInfo<CL_PROGRAM_BUILD_OPTIONS>(device) << std::endl; ss << "Build Log:\t " << program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device) << std::endl; str = ss.str(); std::cout<<" ERROR "<< str<<std::endl; throw std::runtime_error(str.c_str()); // Re-throw exception to stop program execution}
try
{
program.build(options);
}
catch( cl::Error err)
std::stringstream ss;
std::string str;
ss << err.what() << "(" << err.err() << ")" << std::endl;
ss << "Build Options:\t" << program.getBuildInfo<CL_PROGRAM_BUILD_OPTIONS>(device) << std::endl;
ss << "Build Log:\t " << program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device) << std::endl;
str = ss.str();
std::cout<<" ERROR "<< str<<std::endl;
throw std::runtime_error(str.c_str()); // Re-throw exception to stop program execution