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.
Your program returns -11 (CL_BUILD_PROGRAM_FAILURE), you need to check the Build Log to find out the cause of the failure:
char *buffer = NULL;size_t len;CHECK_CL( clGetProgramBuildInfo( program, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &len ) );buffer = (char*) malloc(len);CHECK_CL( clGetProgramBuildInfo( program, device, CL_PROGRAM_BUILD_LOG, len, buffer, &len ));std::cout<<"\nBuild log:\n\t["<<buffer<<"]"<<std::endl;free(buffer);
char *buffer = NULL;
size_t len;
CHECK_CL( clGetProgramBuildInfo( program, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &len ) );
buffer = (char*) malloc(len);
CHECK_CL( clGetProgramBuildInfo( program, device, CL_PROGRAM_BUILD_LOG, len, buffer, &len ));
std::cout<<"\nBuild log:\n\t["<<buffer<<"]"<<std::endl;
free(buffer);
Hope this helps,
Anthony
I can get information because the fatal error append when this line is execute:
program.build(devices);
Nothing happend then, the program crash.
In fact I found a piece of program go get information so this is what I have:
12-03 15:33:46.291: E/JNIProcessor(13974): Build log
12-03 15:33:46.291: E/JNIProcessor(13974):
12-03 15:33:46.291: E/JNIProcessor(13974): Build status
12-03 15:33:46.291: E/JNIProcessor(13974): 0
12-03 15:33:46.291: E/JNIProcessor(13974): Build option
12-03 15:33:46.296: D/AndroidRuntime(13974): Shutting down VM
12-03 15:33:46.296: W/dalvikvm(13974): threadid=1: thread exiting with uncaught exception (group=0x4187fc08)
12-03 15:33:46.296: E/AndroidRuntime(13974): FATAL EXCEPTION: main
12-03 15:33:46.296: E/AndroidRuntime(13974): Process: com.example.subsamplecamera, PID: 13974
12-03 15:33:46.296: E/AndroidRuntime(13974): java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
12-03 15:33:46.296: E/AndroidRuntime(13974): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
12-03 15:33:46.296: E/AndroidRuntime(13974): at dalvik.system.NativeStart.main(Native Method)
12-03 15:33:46.296: E/AndroidRuntime(13974): Caused by: java.lang.reflect.InvocationTargetException
12-03 15:33:46.296: E/AndroidRuntime(13974): at java.lang.reflect.Method.invokeNative(Native Method)
12-03 15:33:46.296: E/AndroidRuntime(13974): at java.lang.reflect.Method.invoke(Method.java:515)
12-03 15:33:46.296: E/AndroidRuntime(13974): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
12-03 15:33:46.296: E/AndroidRuntime(13974): ... 2 more
12-03 15:33:46.296: E/AndroidRuntime(13974): Caused by: java.lang.Exception: @decode: clBuildProgram -11
12-03 15:33:46.296: E/AndroidRuntime(13974): at com.example.subsamplecamera.MainActivity.compileKernels(Native Method)
12-03 15:33:46.296: E/AndroidRuntime(13974): at com.example.subsamplecamera.MainActivity.onSurfaceTextureAvailable(MainActivity.java:119)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.TextureView.getHardwareLayer(TextureView.java:396)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.View.getDisplayList(View.java:14215)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.View.getDisplayList(View.java:14292)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.View.draw(View.java:15070)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.ViewGroup.drawChild(ViewGroup.java:3340)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.View.getDisplayList(View.java:14245)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.View.draw(View.java:15359)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.widget.FrameLayout.draw(FrameLayout.java:472)
12-03 15:33:46.296: E/AndroidRuntime(13974): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2621)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.View.getDisplayList(View.java:14250)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1597)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1469)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2786)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2652)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2223)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1259)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6537)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.Choreographer.doCallbacks(Choreographer.java:613)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.Choreographer.doFrame(Choreographer.java:583)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.os.Handler.handleCallback(Handler.java:733)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.os.Handler.dispatchMessage(Handler.java:95)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.os.Looper.loop(Looper.java:146)
12-03 15:33:46.296: E/AndroidRuntime(13974): at android.app.ActivityThread.main(ActivityThread.java:5635)
12-03 15:33:46.296: E/AndroidRuntime(13974): ... 5 more
12-03 15:33:46.316: I/Process(13974): Sending signal. PID: 13974 SIG: 9
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
Looks like you're printing the log then clBuildProgram throw an exception which suggests you're checking the log before you actually called clBuildProgram which would explain why the log is empty. (Or did you catch the exception, print the log, then re-threw the exception ?)
It would be easier if you pasted your code here.