Можно ли предотвратить зависание фрагмента графического процессора с помощью буфера трафарета?

У меня есть некоторые тяжелые расчеты для фрагмента шейдера, и это в несколько проходов. Но для некоторых фрагментов результат готов только после одного прохода, а для других фрагментов требуется больше проходов.

Из-за этого через некоторое время многие фрагменты отбрасываются, но, как мы знаем, эти потоки, вероятно, останавливаются, пока не завершатся все остальные фрагменты.

Я размышлял. Начиная с некоторой версии opengl, есть возможность записи в буфер трафарета из фрагментного шейдера. Когда я знаю, что мне не нужен еще один проход для определенного фрагмента, я могу записать в буфер трафарета. На следующем этапе рендеринга я мог бы включить проверку трафарета, чтобы предотвратить повторный расчет этих фрагментов.

Мой вопрос: это предотвратит проблему срыва? Будут ли эти потоки доступны для выполнения большего количества фрагментов, которые еще предстоит обработать, чтобы каждый проход был быстрее, чем предыдущий, когда каждый проход удаляет фрагменты для следующего прохода?

Другими словами, скажите, что у меня есть текстура 16x16, которую мне нужно рассчитать. На первом этапе мне нужно будет рассчитать 256 фрагментов (скажем, у меня 16 ядер, это будет означать 16 циклов). Если, например, после этого первого прохода, я знаю, что мне нужно только рассчитать дополнительно 128 фрагментов, и я отметил фрагменты, которые выполняются в буфере трафарета, этот второй проход будет выполняться в два раза быстрее (так: 128 фрагментов на 16 ядра = 8 циклов вместо 16)?

Я надеюсь, что вопрос ясен...

0 ответов

Другие вопросы по тегам