Ув. пользователи Linux и владельцы видеоадаптеров NVIDIA GeForce 6-7 (возможно 8) серии,
у кого из вас были проблемы с беспричинными зависаниями системы с
включенным compiz или GL приложением? Раньше грешили на некорректную
работу драйверов с SMP системами. Но иногда зависания происходят и на
одном ядре. Есть мнение что виновником является offscreen rendering
или/и GLXFB.
Предлагаю простенький тест. Собрать и запустить следующую программу:
//ofscreen-gl.c:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <errno.h>
#include <GL/gl.h>
#include <GL/glx.h>
int main(void)
{
const char *display_name = ":0";
const int single_buffer_attribs[] = { GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT, None };
GLXFBConfig *fbconfigs;
int fbconfigs_len;
Display *display;
GLXPbuffer pbuffer;
GLXContext context;
fprintf(stderr, "XOpenDisplay\n");
if (!(display = XOpenDisplay(display_name)))
{
fprintf(stderr, "Cannot open display %s\n", display_name);
return 1;
}
fprintf(stderr, "glXChooseFBConfig\n");
if (!(fbconfigs = glXChooseFBConfig(display, DefaultScreen(display),
single_buffer_attribs, &fbconfigs_len)))
{
fprintf(stderr, "Cannot choose GLX offscreen rendering "
"configuration on display %s\n", display_name);
return 1;
}
fprintf(stderr, "glXCreatePbuffer\n");
if (!(pbuffer = glXCreatePbuffer(display, fbconfigs[0], NULL)))
{
fprintf(stderr, "Cannot create PBuffer for offscreen rendering\n");
return 1;
}
fprintf(stderr, "glXCreateNewContext\n");
if (!(context = glXCreateNewContext(display, fbconfigs[0], GLX_RGBA_TYPE, NULL, True)))
{
fprintf(stderr, "Cannot create GL context for offscreen rendering\n");
return 1;
}
fprintf(stderr, "glXMakeContextCurrent\n");
if (!glXMakeContextCurrent(display, pbuffer, pbuffer, context))
{
fprintf(stderr, "Cannot make GL context current\n");
return 1;
}
/* ... */
fprintf(stderr, "glXDestroyContext\n");
glXDestroyContext(display, context);
fprintf(stderr, "glXDestroyPbuffer\n");
glXDestroyPbuffer(display, pbuffer);
fprintf(stderr, "XCloseDisplay\n");
XCloseDisplay(display);
return 0;
}
//-------
Собирается так:
gcc -W -Wall -o offscreen-gl offscreen-gl.c -lX11 -lGL
Затем запускаем в цикле (run.sh):
#!/bin/bash
while true; do
./offscreen-gl
done
Если не зависли после минуты работы, жмем CTRL+C и смотрим
dmesg | grep -i nvrm в поисках сообщений типа:
NVRM: Xid (0006:00): 13, 0003 beef3097 00004497 0000021c 00000000 00000002
NVRM: Xid (0006:00): 30, L1 -> L0
Если нету, поздравляю!, ваша карта работает нормально.
Всем же кто завис или/и нашел сообщение типа NVRM Xid , милости прошу
http://www.nvnews.net/vbulletin/forumdisplay.php?f=14 . Тут можно
оставить пару лесных сообщений для разработчиком NVIDIA и приложить
свой nvidia-bug-report.log , который генерируется
nvidia-bug-report.sh скриптом.
Спасибо за внимание!
PS: Есть подозрение что глюк может произрастать из bios видеокарты...
>>>