Ответ 1
Существует несколько жестких и мягких ограничений, некоторые из которых не сразу очевидны:
- Слоты для команд: общее количество инструкций, которые аппаратное обеспечение может размещать в локальной памяти.
- Выполненные инструкции: максимальное количество команд, которые будут выполняться (включая инструкции, которые выполняются несколько раз в цикле)
- Одна инструкция GLSL может отображать до десятков или более инструкций
- Несколько инструкций GLSL могут отображать одну команду в зависимости от качества оптимизатора (например, multiply-add, dot, lerp)
- Ограниченные временные регистры (только 32) могут потребовать больше инструкций, чем необходимо для аппаратного обеспечения до SM4 (нет такой проблемы с 4096).
- Swizzling обычно не требует дополнительных инструкций в настоящее время, но работает на некоторых старых аппаратных средствах и может в некоторых ситуациях на некоторых аппаратных средствах (например, gl_FragColor - такой кандидат).
- Независимо от фактических инструкций, совместимое с OpenGL 2.0 оборудование ограничено 8 зависимыми выборками текстур (неограниченное на оборудовании, которое может работать с OpenGL 2.1 или выше).
У вас есть эти гарантированные минимумы (у большинства карт больше):
- 512 слотов для вершинных и пиксельных шейдеров на оборудовании, совместимом с OpenGL 2.x(SM3)
- 65536 выполненных инструкций
- 4096 вершин и 65536 пиксельных шейдерных слотов для команд на оборудовании 3.x(SM4)
- 65536 Выполненные инструкции вершинного шейдера, неограниченные инструкции пиксельных шейдеров
- Не менее 24 динамических ветвей возможно на оборудовании 2.x(SM3)
- Полностью динамическое ветвление (без ограничений) на оборудовании SM4.
- Только условное перемещение доступно на SM2.x, все остальное должно быть выполнено путем дублирования кода и разворачивания цикла или должно завершиться неудачно.