Графическое оборудование может выполнять ранний отбор фрагментов на основе глубины до вычисления их значения цвета (другими словами, до запуска шейдерного фрагмента). Следовательно, если вы используете какие-либо функции, которые могут повлиять на это, такие как discardальфа-тестирование или манипулирование gl_FragDepthспособностью аппаратного обеспечения выполнить эту оптимизацию, это будет скомпрометировано, поскольку нельзя предположить истинную глубину фрагмента и необходимо запустить полный шейдер.
Однако то, будет ли использование какой-либо из этих компрометирующих функций оказывать заметное влияние на производительность, зависит от ситуации. Оптимизация на раннем этапе z может улучшить производительность, если у вас есть, например, очень дорогие фрагментные шейдеры, но если стоимость вашего конвейера лежит на вершинном шейдере (или где-либо еще), это не принесет вам такой большой пользы, и, следовательно, вы можете увидеть немного или нет ухудшения производительности при использовании discard.
Полное отключение теста глубины через API также должно препятствовать запуску оптимизации, поскольку это может привести к некорректно отображаемым сценам. В таком случае, не должно иметь значения, что вы используетеdiscard .
Последние аппаратные средства могут форсировать тесты (в том числе ранние трафаретные тесты) с использованием layout(early_fragment_tests)- есть больше информации (и предостережений) по этому вопросу на странице, на которую я ссылался в начале ответа.