Нет, этот вопрос вызван тем, что ты написал слово "говно". Значит тебя в нём что-то не устраивает, ведь это стандартная вещь, которая поддерживается всеми производителями.
Я не использую Direct3D, но не пишу что оно говно, хотя бы потому что это не так. GLSL хорош тем, что позволяет писать одни и те же шейдеры под любое железо, без версий шейдеров, которых в Direct3D уже целых 11 штук.
Насчет того, что что-то не устраивает - да, есть кое-какие вещи. Скажем так, Cg мне нравится тем, что я знаю наверняка, как мой шейдер скомпилится, и могу его подтачивать, чтобы сократить число инструкций или темпорарей. В глсл я нихрена не знаю. Черный ящик. Может, каких-то программеров, воспитанных на вижуал бейсике и сишарпе, это устраивает, но меня - нет. Второй момент - Сг позволяет писать шейдеры для моделей 1.х. Хотя, впрочем, тут я ему не доверяю, и всегда пишу RC/TS/AFS вручную - получается намного лучше.
По поводу того, что все уже забыли про карточки без шейдеров 2.0 и дров без поддержки ГЛСЛ, и слышать ничего не хочу, это бред, и периодически возникающие на гдру темы про "старые технологии" это доказывают.
Ты не можешь имея Cg-шейдер узнать сколько инструкций получится в итоге, потому что этот асм-код потом ещё раз компилируется драйвром. Чтобы узнать для AMD, есть программа GPU shader analyzer, а для NVidia никак не унать вообще.
Ты не путаешь с EXT_Cg_shader? Cg компилит в конкретный профиль, и драйвер в этом процессе участвует самую малость (а именно - сообщает о лимитах профиля).
>а для NVidia никак не унать вообще Я NVShaderPerf юзал, он профилирует под разные профили и видеокарты. Или ты о чем?
Я говорю о количестве ALU/TMU инструкций в результирующем шейдере. Видеочип не исполняет asm-профиль, он дальше этот асм-код компилирует ещё раз в свой набор инструкций. Посмотри на код шейдеров в GPU shader analyzer, это совсем не тот асм-код, который идёт у тебя.
это не важно обычно проблема как раз в компиляторах с высокоуровневых языков в язык ассемблера. Ты вспомни пейперы, не такие уж старые, где советуют писать x = (a + b) + (c + d) вместо x = a + b + c + d
значит, сами понимают, что херово у них с компиляторами (:
Чот не припомню такого. Если посмотреть на компилятор AMD, то он компилит расталкивая 1-wide в 5-wide. И делает это довольно успешно. Повторяющиеся инструкции самостоятельно убирает. И это "кривая ATI". У NVidia наверняка не хуже.
а, сори, не увидел >потому что этот асм-код асм-код компилируется очень прозрачно, на то он и язык ассемблера, чтобы прямо транслироваться в машинные команды.
>GLSL хорош тем, что позволяет писать одни и те же шейдеры под любое железо Кто тебе сказал такую глупость? Может сейчас он и устаканился, но еще год назад в порядке вещей была ситуация, когда один и тот же глсл-шейдер на одном драйвере компилится, а на другом выдает синтакс-ерроры. Причем не связанные с экстеншенами.
Reply
Reply
Значит тебя в нём что-то не устраивает, ведь это стандартная вещь, которая поддерживается всеми производителями.
Я не использую Direct3D, но не пишу что оно говно, хотя бы потому что это не так.
GLSL хорош тем, что позволяет писать одни и те же шейдеры под любое железо, без версий шейдеров, которых в Direct3D уже целых 11 штук.
Reply
Насчет того, что что-то не устраивает - да, есть кое-какие вещи. Скажем так, Cg мне нравится тем, что я знаю наверняка, как мой шейдер скомпилится, и могу его подтачивать, чтобы сократить число инструкций или темпорарей. В глсл я нихрена не знаю. Черный ящик. Может, каких-то программеров, воспитанных на вижуал бейсике и сишарпе, это устраивает, но меня - нет.
Второй момент - Сг позволяет писать шейдеры для моделей 1.х. Хотя, впрочем, тут я ему не доверяю, и всегда пишу RC/TS/AFS вручную - получается намного лучше.
По поводу того, что все уже забыли про карточки без шейдеров 2.0 и дров без поддержки ГЛСЛ, и слышать ничего не хочу, это бред, и периодически возникающие на гдру темы про "старые технологии" это доказывают.
Reply
Чтобы узнать для AMD, есть программа GPU shader analyzer, а для NVidia никак не унать вообще.
Reply
Cg компилит в конкретный профиль, и драйвер в этом процессе участвует самую малость (а именно - сообщает о лимитах профиля).
>а для NVidia никак не унать вообще
Я NVShaderPerf юзал, он профилирует под разные профили и видеокарты. Или ты о чем?
Reply
Видеочип не исполняет asm-профиль, он дальше этот асм-код компилирует ещё раз в свой набор инструкций.
Посмотри на код шейдеров в GPU shader analyzer, это совсем не тот асм-код, который идёт у тебя.
Reply
обычно проблема как раз в компиляторах с высокоуровневых языков в язык ассемблера. Ты вспомни пейперы, не такие уж старые, где советуют писать
x = (a + b) + (c + d)
вместо
x = a + b + c + d
значит, сами понимают, что херово у них с компиляторами (:
Reply
Если посмотреть на компилятор AMD, то он компилит расталкивая 1-wide в 5-wide.
И делает это довольно успешно.
Повторяющиеся инструкции самостоятельно убирает.
И это "кривая ATI".
У NVidia наверняка не хуже.
Reply
>потому что этот асм-код
асм-код компилируется очень прозрачно, на то он и язык ассемблера, чтобы прямо транслироваться в машинные команды.
Reply
Кто тебе сказал такую глупость?
Может сейчас он и устаканился, но еще год назад в порядке вещей была ситуация, когда один и тот же глсл-шейдер на одном драйвере компилится, а на другом выдает синтакс-ерроры. Причем не связанные с экстеншенами.
Reply
Кто ж виноват что OpenGL поддерживается по остаточному принципу.
Reply
Reply
Обычно как раз вроде ругают политику и идеологию майкрософт...
Reply
Reply
Leave a comment