Запросить наличие расширения GLSL в шейдере SPIR-V

В обычном GLSL я могу сделать что-то вроде этого, чтобы условно включить расширение GLSL:

#if defined(GL_ARB_shader_viewport_layer_array)
    #extension GL_ARB_shader_viewport_layer_array : enable
    // Some other stuff here
#endif

У меня вопрос, как я могу добиться того же в SPIR-V с помощью библиотеки glslang? Я предполагаю, что мне нужно будет собрать несколько версий одного и того же шейдера для достижения этой цели? Или есть способ обусловить SPIR-V существованием расширения без генерации двух двоичных файлов для двух версий?

1 ответ

Решение

В обычном GLSL я могу сделать что-то вроде этого, чтобы условно включить расширение GLSL:

Прежде всего, нет, вы не можете. Не каждое расширение OpenGL GLSL предоставляет такой #define. Например, нигде в расширении GL_ARB_shader_viewport_layer_array вы не найдете определения, которое должно быть указано, чтобы быть там. Напротив, расширение GL_ARB_shader_group_vote определяет #define,

Во-вторых, даже если расширение предоставляет #define, это все равно не сработает. Потому что #define доступен только если вы активируете расширение с помощью директивы #extension. Таким образом, ваш пример никогда не даст работать shader_viewport_layer_array.

Если вы хотите, чтобы расширение присутствовало условно, вы используете #extension NAME : enable, Если реализация не поддерживает расширение, вы не получите его (вы получите предупреждение в файле журнала шейдера). Вы определяете, активно ли расширение, с помощью #define, обсуждавшегося ранее.

Что касается того, как сделать это с SPIR-V... вы не делаете. SPIR-V - это промежуточный язык, а не язык высокого уровня. Ожидается, что SPIR-V написан для конкретной версии среды хоста, включая расширения. Если вы хотите условно поддерживать некоторые расширения, а не другие, вам нужно сгенерировать несколько шейдеров SPIR-V для тех комбинаций расширений, которые вы намереваетесь поддерживать.

SPIR-V не имеет эквивалента #ifdef, опять же, потому что это промежуточный язык.

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