Unity 6.3
0 онлайн 25 гостей 3 в системе
Вход

HLSL ссылка на директивы pragma

Стандартные директивы Pragma

Unity поддерживает все директивы #pragma, которые являются частью стандартного HLSL, если эти директивы находятся в обычных файлах включения. Более подробную информацию об этих директивах см. в документации HLSL: Директива pragma.

Шейдеры

Если вы пишете обычный графический шейдер, используйте эти директивы, чтобы указать компилятору, какие функции использовать для различных стадий шейдера. Директивы #pragma vertex и #pragma fragment обязательны, но другие стадии необязательны.

Заявление Функция
#pragma vertex <name> Компиляция функции с указанным именем в качестве вершинного шейдера. Заменить <name> на имя функции. Эта директива требуется в обычных графических шейдерах.
#pragma fragment <name> Компиляция функции с указанным именем в качестве шейдера фрагмента. Заменить <name> на имя функции. Эта директива требуется в обычных графических шейдерах.
#pragma geometry <name> Компиляция функции с указанным именем в качестве геометрии шейдера. Заменить <name> с именем функции. Эта опция автоматически включает #pragma require geometry; для более подробной информации, см. Целевые модели шейдера и GPU особенности в HLSL.

Примечание: Metal не поддерживает геометрии шейдеров.
#pragma hull <name> Компиляция функции с заданным именем в качестве DirectX 11 hull shader. Замените <name> на имя функции. Это автоматически добавляет #pragma require tessellation; дополнительную информацию см. Нацеливание моделей шейдеров и GPU особенности в HLSL.
#pragma domain <name> Компиляция функции с заданным именем в качестве DirectX 11 domain shader. Замените <name> на имя функции. Эта опция автоматически включается #pragma require tessellation; дополнительную информацию см. Нацеливание моделей шейдеров и GPU особенности в HLSL.

Варианты шейдеров и ключевые слова

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

Директива Описание
#pragma multi_compile <keywords> Заявляет коллекцию ключевых слов. Компилятор включает все ключевые слова в сборку.

Вы можете использовать суффиксы, такие как _local установить дополнительные параметры.

Дополнительные сведения и список поддерживаемых суффиксов см. в разделе Заявление и использование ключевых слов в HLSL.
#pragma shader_feature <keywords> Объявляет коллекцию ключевых слов. Компилятор исключает неиспользуемые ключевые слова из сборки.

Вы можете использовать суффиксы, такие как _local, для установки дополнительных параметров.

Дополнительные сведения и список поддерживаемых суффиксов см. в Объявление и использование ключевых слов шейдера в HLSL.
#pragma hardware_tier_variants <values> Только Built-in Render Pipeline: Добавить ключевые слова для графических уровней при компиляции для данной графики API. Дополнительные сведения см. в Графические уровни.
#pragma skip_variants <list of keywords> Удалить указанные ключевые слова.

GPU требования и поддержка модели шейдера

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

Заявление Функция
#pragma target <value> Минимальная модель шейдеров, с которой совместима эта шейдерная программа. Замените <value> допустимым значением. Список допустимых значений см. в разделе Компиляция шейдеров: выбор целевых моделей шейдеров и возможностей GPU в HLSL.
#pragma require <value> Минимальный набор возможностей GPU, с которым совместим этот шейдер. Замените <value> допустимым значением или несколькими допустимыми значениями, разделёнными пробелами. Список допустимых значений см. в разделе Компиляция шейдеров: выбор целевых моделей шейдеров и возможностей GPU в HLSL.

Графика APIs

Используйте эти директивы, чтобы сказать Unity включить или исключить код для данной графики API.

Заявление Функция
#pragma only_renderers <value> Компилирует эту шейдерную программу только для указанных графических API. Замените <values> разделённым пробелами списком допустимых значений. Дополнительные сведения и список допустимых значений см. в разделе «Выбор целевых графических API и платформ в HLSL».

Например, #pragma only_renderers glcore компилирует программу только для настольной версии OpenGL. Как и в случае с целевой платформой ES 3, этот вариант охватывает все настольные версии OpenGL: базовые шейдеры поддерживают OpenGL 2.x, а шейдерам, использующим возможности модели шейдеров 5.0, требуется OpenGL 4.2 или более поздняя версия.
#pragma exclude_renderers <value> Не компилируйте эту шейдерную программу для указанных графических API. Замените <value> списком допустимых значений, разделённых пробелами. Дополнительные сведения и список допустимых значений приведены в разделе Выбор целевых графических API и платформ в HLSL.

Другие прагматические директивы

Заявление Функция
#pragma instancing_options <options> Включить экземплярование GPU в этом шейдере с указанными параметрами. Дополнительные сведения см. в GPU экземпляр
#pragma once Поместите эту директиву в файл, чтобы убедиться, что компилятор включает файл только один раз в программу шейдера.

Примечание: Unity поддерживает эту директиву только тогда, когда включён Кэширующий препроцессор шейдера.
#pragma enable_d3d11_debug_symbols Создает символы отладки для шейдеров для поддерживаемых графиков APIs и отключает оптимизацию для всех графиков APIs. Используйте это для отладки кода шейдера во внешнем инструменте.

Unity создает символы отладки для Vulkan, DirectX 11 и 12, и поддерживаемых консольных платформ.

Предупреждение: Использование этого приведет к увеличению размера файла и снижению производительности шейдера. Когда вы закончите отладку своих шейдеров и будете готовы сделать окончательную сборку приложения, удалите эту строку из исходного кода шейдера и перекомпилюйте шейдеры.
#pragma skip_optimizations <value> Принудительно отключает оптимизации для указанных графических API. Замените <values> списком допустимых значений, разделённых пробелами. Список допустимых значений см. в разделе Выбор целевых графических API и платформ в HLSL.
#pragma hlslcc_bytecode_disassembly Встроить деассемблированный байткод HLSLcc в переведенный шейдер.
#pragma disable_fastmath Включить точные правила IEEE 754, включающие обработку NaN. В настоящее время это влияет только на платформу Metal.
#pragma editor_sync_compilation Принудительная синхронная компиляция. Это влияет только на Unity Editor. Дополнительные сведения см. в Компиляция асинхронных шейдеров.
#pragma enable_cbuffer Вывести cbuffer(name) при использовании макросов CBUFFER_START(name) и CBUFFER_END из HLSLSupport даже если текущая платформа не поддерживает постоянные буферы.
#pragma rendertarget_format_hint MRT<MrtID> <list of graphics formats> Обеспечивает подсказку для компиляторов шейдеров для конкретных платформ во время компиляции о том, что GraphicsFormat могут быть использованы для каждой цели отображения. Это требуется на платформах, которые должны иметь указанные форматы экспорта фрагментов шейдеров во время компиляции. Платформы могут компилировать несколько вариантов шейдеров для поддержки всех перечисленных комбинаций форматов, позволяя выбрать правильный вариант во время выполнения. Пример этого формата: #pragma rendertarget_format_hint MRT0 R8G8B8A8_SRGB,R32G32B32A32_SFloat

Шейдеры поверхностей

Если вы пишете Поверхностный шейдер во встроенном Render Pipeline, используйте эту директиву, чтобы сообщить компилятору, какую функцию использовать в качестве поверхностная функция, и передать данные в эту функцию.

Заявление Функция
#pragma surface <surface function> <lighting model> <optional parameters> Компилируйте функцию с указанным именем в качестве поверхностного шейдера, чтобы она работала с указанной моделью освещения. Более подробную информацию см. в Шейдеры поверхностей.