OpenGL: «Фрагментный шейдер не поддерживается HW» на старой карте ATI - PullRequest
4 голосов
/ 19 ноября 2011

В нашей игре OpenGL произошел сбой шейдерного соединения на карте ATI Radeon x800. glGetProgramInfoLog отчеты:

Fragment shader(s) failed to link,  vertex shader(s) linked.
Fragment Shader not supported by HW

Некоторые поиски в Google предполагают, что мы можем достичь предела инструкции ALU из-за очень длинного фрагментного шейдера. Есть ли способ проверить это?

Я не смог найти подробных спецификаций для x800 и ни одного способа запросить лимит инструкций во время выполнения. И даже если бы я смог запросить его, как определить количество инструкций моего шейдера?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2011

GLview - отличный инструмент для простого просмотра всех ограничений и поддерживаемых расширений GL комбинации GPU / драйвера. Если я правильно помню, я ранее использовал AMD GPU ShaderAnalyzer , который позволяет вам увидеть версию скомпилированных сборок шейдеров GLSL. NVidia предлагает ту же функциональность, что и инструмент nvemulate.

x800 очень ограничен в мощности шейдеров по сравнению с современными графическими процессорами. Вам, вероятно, придется в любом случае сократить сложность шейдера для этого графического процессора более низкого уровня, чтобы добиться надлежащей производительности. Если у вас запущена версия GLSL, возможно, самым разумным подходом будет выбор различных фрагментных шейдеров для X800.

3 голосов
/ 19 ноября 2011

Существует несколько ограничений, на которые вы можете попасть:

  • максимальная длина шейдера
  • максимальное количество косвенных текстур (это предел, который легче всего пересечь)
  • при использованиинеподдерживаемые функции

Технически X800 представляет собой шейдерную модель 2 GPU, что, как и в GLSL 1.20.Когда я начал программировать шейдеры с помощью Radeon 9800, а X800 - технически просто улучшенный 9800, я быстро отказался от идеи делать это с GLSL.Это было слишком ограничено.И, как это часто бывает, когда компьютер имеет ограниченные ресурсы и возможности, выходом было использование сборки.В этом случае я имею в виду сборку, предоставляемую расширением ARB_fragment_program.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...