Это давно известное страдание, что карточки ATI/AMD при включеном composition говнят на операциях создания и изменения размера окон. Весь интернет страдает, и мало кто знает, почему так, и что с этим делать. Я тоже страдал, но не очень, потому что композицию использовал нечасто и давно. Однако поставив четвертые кеды, в котором оно включено по-умолчанию и вполне к месту, это начало меня бесить, и надо было срочно искать решение проблемы.
Оказалось, что косяк этот очень старый, но все от него отмахиваются — авторы fglrx говорят, что всё остальное же работает, работает (более-менее, лол) нормально, и вообще по-другому сделать нельзя, авторы xorg говорят "човаще, на других карточках всё работает прекрасно, так что это fglrx говяный", а ребята, делающие уже конкретные композиционные менеджеры, вообще считают, что пацаны уже взрослые и пусть сами разбираются, да и вообще не их это дело — подмазываться под карточки и производителей, когда последние должны уметь стандарты правильно и эффективно.
Техническая сторона проблемы на пальцах (чуть сложнее можно в два-три клика найти в гугле — старайтесь, коли интересно;
здесь, например, есть чуть-чуть подробностей) выглядит примерно так: при каждой операции создания или растягивания окна надо пересоздавать текстуру из pixmap и перерисовывать содержимое окна в неё. Это создание выделяет память под текстуру, но, судя по всему, не чистит её. На современных серьёзных карточках эта память выделяется в памяти видеокарты, не доступной напрямую процессору. И беда в том, что процедура очистки на карточках АТИ, в силу каких-то непонятных причин, скачивает эту текстуру в общую память, что
адски медленно. Вероятно, беда эта носит системно-архитектурный характер, оттого и решить её в одном месте нельзя — надо менять либо всё, либо железо, либо программистов ати (хотя это спорно — говорят, что опенсорсные дрова этим тоже страдают, если у карточки есть своя отдельная память) например, уходить в лес и жить собирательством.
Поэтому предлагаемое решение простое: убрать к свиньям очистку текстуры. Так, в общем-то, и поступали в некоторых дистрибутивах, патча xorg-server. Но потом ребята, судя по всему это были люди из Intel, заорали, что это security threat, т.к. на экран выводится непроинициализированная память, а там может быть что угодно, отчего дистры этот патч в массе своей свернули. И опять наступило всеобщее страдание.
Но от страдания можно легко избавиться, если у вы — задрот, как я, и используете gentoo (и не работаете на оборонку или крупную корпорацию с секретами дороже жизни вас и ваших родственников). Самый простой способ — подсунуть
патч в /usr/portage/x11-base/xorg-server/files/
и в /usr/portage/x11-base/xorg-server/xorg-s
erver-${VERSION}.ebuild (в моем случае это /usr/portage/x11-base/xorg-server/xorg-s
erver-1.6.3.901-r2.ebuild: найти строку GENTOO_PATCHES=( и добавить после неё строку "${FILESDIR}/pixmap-bg-fglrx-compiz-slow-r
esize.patch". далее в том же каталоге (/usr/portage/x11-base/xorg-server/) сделать ebuild xorg-server-1.6.3.901-r2.ebuild manifest и пересобрать emerge -1 xorg-server. Перезапустить иксы (лучше полной перезагрузкой — fglrx иначе болеет) и радоваться.
Чтобы эти изменения не терялись при emerge --sync и пересборке иксов, лучше засунуть их в оверлей. Но это вы сами разберитесь, как сделать, мне лень писать.
Осталось дождаться XSync для Qt.
PS: KDE4 (4.3.2) — такая няшка! Решил просто попробовать, и больше в kde3.5.10 и не перезагружался — незачем. Тут всё есть, все работает неожиданно для линукса хорошо, приятно и в меру стабильно. Рекомендую.
upd: PPS: Еще есть косяк со Starcraft, который мне пока не удается вылечить — прозреваю корявые ARB-шейдеры на fglrx. Известно, что SC, будучи старой игрушечкой, требует восьмибитного графического режима, поддержка которого, особенно в случае композиции, сейчас не особо везде есть. wine может решать эту проблему двумя способами: 1) через x11; 2) через opengl. Первый способ заключается в том, что создается обычный 24/32-битный режим, изображение в который битблочится иксами из палитрованного восьмибитного процессором, что медленно адски (требует перехода каждого вызова через кучу говна, типа переключения прав доступа, процессора в режим ядра и назад пару раз и вообще), но работает стабильно и давно. Но тормозит и говно. Это по-умолчанию. Можно также включить экспериментальный режим через opengl — либо через расширение GL_EXT_paletted_texture (мало кем поддерживается, например некоторыми картами nVidia), либо через две текстуры — одна 2D под 8-битное изображение, в которое рисует приложение, другая 1D — под палитру, а затем это всё коротким фрагмент-шейдером выводится на экран. Всё быстро и на видеокарте. Казалось бы. У меня с wine 1.1.30 это почему-то не хочет работать: тупо не применяется правильная палитра, вся игра выглядит как блевота немытого пса с червями. Интернет молчит, надо разбираться, почему так.