Войти
ПрограммированиеФорумГрафика

Можно ли "прервать выполнение" шейдера (GLSL, Vulkan)

Страницы: 1 2 Следующая »
#0
5:11, 16 авг 2018

Доброго времени суток, господа.
Извиняюсь за кривой заголовок темы, вот что бы хотелось узнать:

Допустим в вершинном шейдере я выполнил некую проверку в результате которой выяснилось, что дальше мне рисовать вершину не нужно.
Можно ли дальше ничего не делать и прекратить выполнение шейдера (или вообще конвеера) для текущей вершины? Я так понял что фрагментный шейдер все равно
потом начнет для этой вершины выполнятся? Как сделать так чтобы фрагментный шейдер сработал для вершины которую мне рисовать не нужно
как можно быстрее (как-нибудь загнать координаты в ноль?), или можно вообще сделать так чтобы он не выполнялся?

Можно ли и правильно ли использовать с этой целью "Return"? И сработает ли он как надо вообще?

#1
5:26, 16 авг 2018

Прервать выполнение шейдера можно. Для этого делаешь бесконечный цикл в шейдере. Через пару секунд вотчдог в винде видит, что гпу не отвечает, и ресетит драйвер. Все, шейдер прерван.

#2
5:58, 16 авг 2018

MrShoor
> Прервать выполнение шейдера можно. Для этого делаешь бесконечный цикл в
> шейдере. Через пару секунд вотчдог в винде видит, что гпу не отвечает, и
> ресетит драйвер. Все, шейдер прерван.
Хаха, очень смешно, ты такой остроумный что порезаться можно. Молодец.

#3
6:04, 16 авг 2018

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

#4
6:16, 16 авг 2018

Panzerschrek[CN]
> Можно из вершинного шейдера в геометрический передавать какой-то флаг, что
> дальше рисовать не имеет смысла и из геометрического шейлера по этому флагу
> выходить, не создавая конечных вершин.
Спасибо, буду пробовать.

#5
6:38, 16 авг 2018

MikeNew
> Хаха, очень смешно, ты такой остроумный что порезаться можно. Молодец.
Каков вопрос таков и ответ. Все просто.

#6
7:21, 16 авг 2018

MikeNew
Ты в курсе, что фрагментный шейдер выполняется не для вершин, а для примитивов?А что примитив, как правило, состоит из нескольких вершин? А что одна вершина может участвовать в нескольких примитивах?

#7
7:23, 16 авг 2018

MikeNew
> Как сделать так чтобы фрагментный шейдер сработал для вершины которую мне
> рисовать не нужно
> как можно быстрее
"discard" во фрагментном шейдере - и текущий фрагмент не будет рисоваться

#8
7:46, 16 авг 2018

Фрагментный шейдер выполняется не для примитивов, а для фрагментов.
Discard не прерывает выполнение шейдера.

#9
8:14, 16 авг 2018

MikeNew
В вертексном шейдере загоняешь все координаты вершин всех ненужных объектов за экран и например возможно пишешь return для досрочного выхода из шейдера

#10
8:47, 16 авг 2018

v.vertex = NaN

#11
8:47, 16 авг 2018

Wraith
> Фрагментный шейдер выполняется не для примитивов, а для фрагментов.
Изображение ?
Это уже ненужные подробности. Суть в том, что discard для вершин неоднозначен, и ОП об этом даже не подозревает.

#12
8:49, 16 авг 2018

Wraith
> Фрагментный шейдер выполняется не для примитивов, а для фрагментов.
фрагментный шейдер выполняется для фрагментов примитива
Delfigamer
> Суть в том, что discard для вершин неоднозначен
дискард для одной нити warp-а не ускорит завершение работы всего варпа, всё равно нужно будет ждать завершения остальных нитей, разве что одновременно все 32 нити warp-а дискарднутся...

#13
9:59, 16 авг 2018

™­•-=MASTER=-•™
> дискард для одной нити warp-а не ускорит ля ля тополя
Это уже ненужные подробности. Суть в том, что discard для вершин неоднозначен, и ОП об этом даже не подозревает (иначе указал бы нужный вариант сразу).

#14
10:07, 16 авг 2018

Delfigamer
> ОП
это кто? :)

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.