Version: Unity 6.0 (6000.0)
语言 : 中文
HLSL semantics reference
HLSL pragma target 命令参考

HLSL pragma 指令参考

标准 pragma 指令

Unity 支持标准 HLSL 中的所有 #pragma 指令,只要这些指令位于常规 include 文件中即可。如需详细了解这些指令,请参阅 HLSL 文档:pragma 指令

表面着色器

如果要编写 表面着色器,请使用此指令告诉编译器要使用的表面函数,并将数据传递给该函数。

语句 功能
#pragma surface <surface function> <lighting model> <optional parameters> 编译具有给定名称的函数作为表面着色器,使其与给定光照模型配合使用。详情请参阅表面着色器

着色器阶段

如果要编写常规图形着色器,请使用下列指令告诉编译器不同着色器阶段所使用的函数。#pragma vertex#pragma fragment 指令是必需的,但其他阶段是可选的。

语句 功能
#pragma vertex <name> 将具有给定名称的函数编译为顶点着色器。将 <name> 替换为函数名称。常规图形着色器中需要此指令。
#pragma fragment <name> 将具有给定名称的函数编译为片元着色器。将 <name> 替换为函数名称。常规图形着色器中需要此指令。
#pragma geometry <name> 将具有给定名称的函数编译为几何体着色器。将 <name> 替换为函数名称。此选项会自动打开 #pragma require geometry;详情请参阅 使用 HLSL 定位着色器模型和 GPU 功能

注意:Metal 不支持几何体着色器。
#pragma hull <name> 将具有给定名称的函数编译为 DirectX 11 外壳着色器。将 <name> 替换为函数名称。这会自动添加 #pragma require tessellation;详情请参阅 使用 HLSL 定位着色器模型和 GPU 功能
#pragma domain <name> 将具有给定名称的函数编译为 DirectX 11 域着色器。将 <name> 替换为函数名称。此选项会自动打开 #pragma require tessellation;详情请参阅 使用 HLSL 定位着色器模型和 GPU 功能

着色器变体和关键字

使用下列指令告诉着色器编译器如何处理着色器变体和关键字。详情请参阅使用 HLSL 声明和使用着色器关键字

指令 描述
#pragma multi_compile <keywords> 声明一组关键字。编译器中包含了构建中的所有关键字。

您可以使用后缀(如 _local)设置其他选项。

如需了解更多信息和支持的后缀列表,请参阅 使用 HLSL 声明和使用着色器关键字
#pragma shader_feature <keywords> 声明一组关键字。编译器会从构建中排除未使用的关键字。

您可以使用后缀(如 _local)设置其他选项。

如需了解更多信息和支持的后缀列表,请参阅 使用 HLSL 声明和使用着色器关键字
#pragma hardware_tier_variants <values> 限内置渲染管线:在为给定图形 API 编译时,为图形层添加关键字。详情请参阅图形层
#pragma skip_variants <list of keywords> 剥离指定的关键字。

GPU 要求和着色器模型支持

使用下列指令告诉编译器您的着色器要求特定的 GPU 功能。

语句 功能
#pragma target <value> 此着色器程序兼容的最小着色器模型。将 <value> 替换为有效值。如需了解有效值的列表,请参阅着色器编译:使用 HLSL 定位着色器模型和 GPU 功能
#pragma require <value> 此着色器兼容的最小 GPU 功能。将 <value> 替换为有效值,或以空格分隔的多个有效值。如需了解有效值的列表,请参阅着色器编译:使用 HLSL 定位着色器模型和 GPU 功能

图形 API

使用下列指令让 Unity 针对图形 API 包含或排除给定的代码。

语句 功能
#pragma only_renderers <value> 仅为给定的图形 API 编译此着色器程序。将 <values> 替换为以空格分隔的有效值列表。如需了解更多信息和有效值的列表,请参阅 使用 HLSL 定位图形 API 和平台

例如,#pragma only_renderers glcore 仅针对桌面 OpenGL 进行编译。与 ES 3 目标一样,这也可扩展为包含所有桌面 OpenGL 版本,在这些版本中,基础着色器将支持 OpenGL 2.x,而需要着色器模型 5.0 功能的着色器则要求 OpenGL 4.2+。
#pragma exclude_renderers <value> 不要为给定的图形 API 编译此着色器程序。将 <value> 替换为以空格分隔的有效值列表。如需了解更多信息和有效值的列表,请参阅 使用 HLSL 定位图形 API 和平台

其他 pragma 指令

语句 功能
#pragma instancing_options <options> 使用给定选项在此着色器中启用 GPU 实例化。详情请参阅 GPU 实例化
#pragma once 将此指令放在文件中,以确保编译器在着色器程序中仅将该文件包含一次。

注意:Unity 仅在启用了缓存着色器预处理器时才支持此指令。
#pragma enable_d3d11_debug_symbols 为支持的图形 API 生成着色器调试符号,并为所有图形 API 禁用优化。用于通过外部工具调试着色器代码。

Unity 会为 Vulkan、DirectX 11 和 12 以及支持的游戏主机平台生成调试符号。

警告:使用此指令会导致文件大小增加并降低着色器性能。着色器调试完成并可以对应用程序进行最终构建时,请从着色器源代码中删除此行并重新编译着色器。
#pragma skip_optimizations <value> 为给定图形 API 强制关闭优化。将 <values> 替换为以空格分隔的有效值列表。如需了解有效值的列表,请参阅 使用 HLSL 定位图形 API 和平台
#pragma hlslcc_bytecode_disassembly 将反汇编的 HLSLcc 字节码嵌入到转译的着色器中。
#pragma disable_fastmath 启用涉及 NaN 处理的精确 IEEE 754 规则。当前仅影响 Metal 平台。
#pragma editor_sync_compilation 强制进行同步编译。仅影响 Unity 编辑器。详情请参阅异步着色器编译
#pragma enable_cbuffer 使用 HLSLSupport 的 CBUFFER_START(name)CBUFFER_END 宏时,即使当前平台不支持常量缓冲区,也发出 cbuffer(name)
HLSL semantics reference
HLSL pragma target 命令参考