Волею судеб угораздило меня отлаживать OpenGL рендер на iMac-е под Windows 7. GLSL-шейдеры, которые на этой же машине под управлением MacOS X компилируются и компонуются влёт, под Windows с драйверами ATI делают это со страшными тормозами. Вот для примера вырезки из лога: http://pastie.org/1655135
Несложно подсчитать, сколько приходится ждать, пока всё это счастье запустится и программа что-то нарисует. К тому же это только небольшая часть шейдеров, они собираются "на лету", ибо ждать, пока соберутся все часто используемые пары, не хватит даже ангельского терпения. К слову, под MacOS X несколько сот пар этих же шейдеров компилируются и компонуются за 8 секунд.
Похоже, GLSL-компилятор Apple писали самостоятельно, и он невероятно быстр. Наверное, компилирует в какой-то промежуточный код, который дальше переколбашивает атишный драйвер, а может, в Apple сами написали драйверы под железо маков. А вот для Windows драйвер писали криворукие индусы, ппц.
Update
Несложно подсчитать, сколько приходится ждать, пока всё это счастье запустится и программа что-то нарисует. К тому же это только небольшая часть шейдеров, они собираются "на лету", ибо ждать, пока соберутся все часто используемые пары, не хватит даже ангельского терпения. К слову, под MacOS X несколько сот пар этих же шейдеров компилируются и компонуются за 8 секунд.
Похоже, GLSL-компилятор Apple писали самостоятельно, и он невероятно быстр. Наверное, компилирует в какой-то промежуточный код, который дальше переколбашивает атишный драйвер, а может, в Apple сами написали драйверы под железо маков. А вот для Windows драйвер писали криворукие индусы, ппц.
Update
Ура, мой DirectGL заработал! Наконец-то.
Ну не знаю кто и как их писал, но у меня например компиляция 10-ка шейдеров на Windows 7 DX10 занимает около 3-4 секунд.
ОтветитьУдалитьКстати под маками юзается ли какой-нить локальный кеш шейдеров для ускорения загрузки. Я просто не совсем представляю себе ситуацию когда допустим игра написанная под DX использует кеш шейдеров, а порт на GL как в таком случае, ведь скомпилять все пары этож жесть.
В проекте приблизительно 200 вершинных и 600 пиксельных шейдеров. Ну а пар просто дофига может быть.
ОтветитьУдалитьА какой кэш может быть с GLSL?
Я думал что у Маков есть какое-нить свое расширение для такой поддержки. Т.е. на подобии ARB_get_program_binary.
ОтветитьУдалитьНет, но как показала практика, там можно жить и без него. Кстати: http://developer.apple.com/graphicsimaging/opengl/capabilities/
ОтветитьУдалитьКстати на маке включение стенсил-теста в 8x MSAA вешает ОС намертво. Недавно вырезали фичу, так что радость тоже та ещё.
ОтветитьУдалить