以下代码曾经工作:
cl_context_properties Properties [] = {
CL_GL_CONTEXT_KHR, (cl_context_properties) glXGetCurrentContext(),
CL_GLX_DISPLAY_KHR, (cl_context_properties) glXGetCurrentDisplay(),
CL_CONTEXT_PLATFORM, (cl_context_properties) CL.Platform,
0
};
CL.Context = clCreateContext(Properties, 1, CL.Device, 0, 0, &err);
if (err < 0) printf("Context error %i!\n", err);
但现在打印
Context error -1000!
如果我注释掉
//CL_GL_CONTEXT_KHR, (cl_context_properties) glXGetCurrentContext(),
//CL_GLX_DISPLAY_KHR, (cl_context_properties) glXGetCurrentDisplay(),
然后它工作正常。因此,问题似乎出在 glX 调用上。
现在,改变的是我在我的机器上升级了 X。我运行 AMD 催化剂,这次升级导致我的显示器丢失,所以在清除并重新安装 fglrx 后,我重新获得了我的显示器,但怀疑在此过程中出现了问题。顺便说一句,我曾经在这台机器上玩 Zandronum,但自从升级后,任何尝试玩都会产生以下错误:
zandronum: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
我不认为这是巧合。
但是,我不确定如何进行调试。我可以在 gdb 中打印 glX 调用的结果:
(gdb) p Properties
$1 = {8200, 8519632, 8202, 6308672, 4228, 140737247522016, 0}
但我不知道如何验证其中任何一个,或获取有关这些调用返回的值的更多信息。我可以采取哪些步骤来找到问题的根源?我什至找对地方了吗?