GLSL максимальное количество инструкций - PullRequest
14 голосов
/ 11 апреля 2010

Существует ли максимальное количество инструкций на языке ассемблера, которое можно загрузить в программный блок фрагмента? У меня есть алгоритм для портирования с процессора на GPU, и, очевидно, он не подходит для GPU.

Ответы [ 2 ]

36 голосов
/ 09 апреля 2011

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

  • Слоты инструкций: общее количество инструкций, которые аппаратные средства могут разместить в локальной памяти.
  • Выполненные инструкции: максимальное количество выполняемых инструкций (включая инструкции, которые выполняются несколько раз в цикле)
  • Одна инструкция GLSL может отображаться на дюжину или более инструкций
  • Несколько команд GLSL могут отображаться на одну инструкцию в зависимости от качества оптимизатора (например, умножение-сложение, точка, 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 выполненных инструкций вершинного шейдера, неограниченных инструкций пиксельного шейдера
  • На оборудовании 2.x (SM3) возможно не менее 24 динамических ветвлений
  • Полностью динамическое ветвление (без ограничений) на оборудовании SM4
  • На SM2.x доступно только условное перемещение, все остальное должно сопровождаться дублированием кода и развертыванием цикла или должно завершиться неудачей
2 голосов
/ 18 апреля 2010

Существует ограничение на максимальное количество инструкций, которое может иметь шейдер. Насколько я знаю, она варьируется от GPU к GPU. Если ваш шейдер слишком большой, компиляция выдаст ошибку.

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