下表列出了 HLSL 中可用的内部函数。 每个函数都有一个简短的描述,以及一个指向参考页面的链接,其中包含有关输入参数和返回类型的更多详细信息。
| 名称 | 描述 | 最小着色器模型 |
|---|---|---|
| abort | 终止当前正在执行的绘制或调度调用。 | 4 |
| abs | 绝对值(每个分量)。 | 1¹ |
| acos | 返回 x 的每个分量的反余弦值。 | 1¹ |
| 全部 | 测试 x 的所有分量是否均非零。 | 1¹ |
| AllMemoryBarrier | 阻止组中所有线程的执行,直到完成所有内存访问。 | 5 |
| AllMemoryBarrierWithGroupSync | 阻止组中所有线程的执行,直到完成所有内存访问,并且组中的所有线程都已到达此调用。 | 5 |
| 任意 | 测试 x 的任何分量是否非零。 | 1¹ |
| asdouble | 将强制转换值重新解释为双精度值。 | 5 |
| asfloat | 将输入类型转换为浮点数。 | 4 |
| asin | 返回 x 的每个分量的反正弦值。 | 1¹ |
| asint | 将输入类型转换为整数。 | 4 |
| asuint | 将 64 位类型的位模式重新解释为 uint。 | 5 |
| asuint | 将输入类型转换为无符号整数。 | 4 |
| atan | 返回 x 的反正切值。 | 1¹ |
| atan2 | 返回两个值 (x,y) 的反正切值。 | 1¹ |
| ceil | 返回大于或等于 x 的最小整数。 | 1¹ |
| CheckAccessFullyMapped | 确定来自 Sample 或 Load 操作的所有值是否访问图块化资源中的映射图块。 | 5 |
| clamp | 将 x 固定到范围 [min, max]。 | 1¹ |
| clip | 如果 x 的任何分量小于零,则丢弃当前像素。 | 1¹ |
| cos | 返回 x 的余弦值。 | 1¹ |
| cosh | 返回 x 的双曲余弦值。 | 1¹ |
| countbits | 计算输入整数中的位数(每个分量)。 | 5 |
| cross | 返回两个 3D 向量的叉积。 | 1¹ |
| D3DCOLORtoUBYTE4 | 调整和缩放 4D 向量 x 的分量,以补偿某些硬件中缺乏 UBYTE4 支持。 | 1¹ |
| ddx | 返回 x 相对于屏幕空间 x 坐标的偏导数。 | 2¹ |
| ddx_coarse | 计算相对于屏幕空间 x 坐标的低精度偏导数。 | 5 |
| ddx_fine | 计算相对于屏幕空间 x 坐标的高精度偏导数。 | 5 |
| ddy | 返回 x 相对于屏幕空间 y 坐标的偏导数。 | 2¹ |
| ddy_coarse | 计算相对于屏幕空间 y 坐标的低精度偏导数。 | 5 |
| ddy_fine | 计算相对于屏幕空间 y 坐标的高精度偏导数。 | 5 |
| degrees | 将 x 从弧度转换为角度。 | 1¹ |
| determinant | 返回方阵 m 的行列式。 | 1¹ |
| DeviceMemoryBarrier | 阻止组中所有线程的执行,直到完成所有设备内存访问。 | 5 |
| DeviceMemoryBarrierWithGroupSync | 阻止组中所有线程的执行,直到完成所有设备内存访问,并且组中的所有线程都到达此调用。 | 5 |
| distance | 返回两个点之间的距离。 | 1¹ |
| dot | 返回两个向量的点积。 | 1 |
| dst | 计算距离向量。 | 5 |
| errorf | 向信息队列提交错误消息。 | 4 |
| EvaluateAttributeCentroid | 在像素质心位置求值。 | 5 |
| EvaluateAttributeAtSample | 在索引示例位置求值。 | 5 |
| EvaluateAttributeSnapped | 在具有偏移的像素质心位置求值。 | 5 |
| exp | 返回以 e 为底的指数。 | 1¹ |
| exp2 | exp2 以 2 为底的指数(每个分量)。 | 1¹ |
| f16tof32 | 将存储在 uint 下半部分的 float16 转换为浮点数。 | 5 |
| f32tof16 | 将输入转换为 float16 类型。 | 5 |
| faceforward | 返回 -n * sign(dot(i, ng))。 | 1¹ |
| firstbithigh | 获取每个分量第一个设置位的位置,从最高位开始向下计算。 | 5 |
| firstbitlow | 返回每个分量第一个设置位的位置,从最低位开始向上计算。 | 5 |
| floor | 返回小于或等于 x 的最大整数。 | 1¹ |
| fma | 返回 a * b + c 的双精度融合乘加。 | 5 |
| fmod | fmod 返回 x/y 的浮点余数。 | 1¹ |
| frac | 返回 x 的小数部分。 | 1¹ |
| frexp | 返回 x 的尾数和指数。 | 2¹ |
| fwidth | 返回 abs(ddx(x)) + abs(ddy(x)) | 2¹ |
| GetRenderTargetSampleCount | 返回呈现目标样本的数量。 | 4 |
| GetRenderTargetSamplePosition | 返回给定样本索引的样本位置 (x,y)。 | 4 |
| GroupMemoryBarrier | 阻止组中所有线程的执行,直到完成所有组共享访问。 | 5 |
| GroupMemoryBarrierWithGroupSync | 阻止组中所有线程的执行,直到完成所有组共享访问,并且组中的所有线程都已到达此调用。 | 5 |
| InterlockedAdd | 对 dest 资源变量执行有保证的原子添加值。 | 5 |
| InterlockedAnd | 执行有保证的原子和。 | 5 |
| InterlockedCompareExchange | 以原子方式将输入与比较值进行比较并交换结果。 | 5 |
| InterlockedCompareStore | 以原子方式将输入与比较值进行比较。 | 5 |
| InterlockedExchange | 为 dest 赋值并返回原始值。 | 5 |
| InterlockedMax | 执行有保证的原子最大值。 | 5 |
| InterlockedMin | 执行有保证的原子最小值。 | 5 |
| InterlockedOr | 执行有保证的原子或。 | 5 |
| InterlockedXor | 执行有保证的原子 xor。 | 5 |
| isfinite | 如果 x 有限则返回 true,否则返回 false。 | 1¹ |
| isinf | 如果 x 为 +INF 或 -INF,则返回 true,否则返回 false。 | 1¹ |
| isnan | 如果 x 为 NAN 或 QNAN,则返回 true,否则返回 false。 | 1¹ |
| ldexp | 返回 x * 2exp | 1¹ |
| length | 返回向量 v 的长度。 | 1¹ |
| lerp | 返回 x + s(y - x)。 | 1¹ |
| lit | 返回细体矢量(环境光、漫反射、镜面反射、1) | 1¹ |
| log | 返回 x 以 e 为底的对数。 | 1¹ |
| log10 | 返回 x 以 10 为底的对数。 | 1¹ |
| log2 | 返回 x 以 2 为底的对数。 | 1¹ |
| mad | 对三个值执行算术乘法/加法运算。 | 5 |
| max | 选择 x 和 y 中的较大者。 | 1¹ |
| min | 选择 x 和 y 中的较小者。 | 1¹ |
| modf | 将值 x 拆分为小数部分和整数部分。 | 1¹ |
| msad4 | 比较 4 字节的引用值和 8 字节的源值并累加 4 个和的向量。 | 5 |
| mul | 使用 x 和 y 执行矩阵乘法。 | 1 |
| noise | 使用 Perlin-noise 算法生成随机值。 | 1¹ |
| 规范化 | 返回规范化向量。 | 1¹ |
| pow | 返回 xy。 | 1¹ |
| printf | 将自定义着色器消息提交到信息队列。 | 4 |
| Process2DQuadTessFactorsAvg | 生成四边形补丁的校正曲面细化因子。 | 5 |
| Process2DQuadTessFactorsMax | 生成四边形补丁的校正曲面细化因子。 | 5 |
| Process2DQuadTessFactorsMin | 生成四边形补丁的校正曲面细化因子。 | 5 |
| ProcessIsolineTessFactors | 生成等值线的舍入细化因子。 | 5 |
| ProcessQuadTessFactorsAvg | 生成四边形补丁的校正曲面细化因子。 | 5 |
| ProcessQuadTessFactorsMax | 生成四边形补丁的校正曲面细化因子。 | 5 |
| ProcessQuadTessFactorsMin | 生成四边形补丁的校正曲面细化因子。 | 5 |
| ProcessTriTessFactorsAvg | 生成三角形补丁的校正曲面细化因子。 | 5 |
| ProcessTriTessFactorsMax | 生成三角形补丁的校正曲面细化因子。 | 5 |
| ProcessTriTessFactorsMin | 生成三角形补丁的校正曲面细化因子。 | 5 |
| radians | 将 x 从角度转换为弧度。 | 1 |
| rcp | 计算快速、近似的每分量倒数。 | 5 |
| reflect | 返回反射向量。 | 1 |
| refract | 返回折射向量。 | 1¹ |
| reversebits | 反转每个分量的位顺序。 | 5 |
| round | 将 x 四舍五入到最接近的整数 | 1¹ |
| rsqrt | 返回 1 / sqrt(x) | 1¹ |
| saturate | 将 x 固定到范围 [0, 1] | 1 |
| sign | 计算 x 的符号。 | 1¹ |
| sin | 返回 x 的正弦值 | 1¹ |
| sincos | 返回 x 的正弦和余弦值。 | 1¹ |
| sinh | 返回 x 的双曲正弦值 | 1¹ |
| smoothstep | 返回 0 和 1 之间的平滑 Hermite 插值。 | 1¹ |
| sqrt | 平方根(每个分量) | 1¹ |
| step | 返回 (x >= a) ? 1 : 0 | 1¹ |
| tan | 返回 x 的正切值 | 1¹ |
| tanh | 返回 x 的双曲正切值 | 1¹ |
| tex1D(s, t) | 1D 纹理查找。 | 1 |
| tex1D(s, t, ddx, ddy) | 1D 纹理查找。 | 2¹ |
| tex1Dbias | 使用 bias 进行的 1D 纹理查找。 | 2¹ |
| tex1Dgrad | 使用 gradient 进行的 1D 纹理查找。 | 2¹ |
| tex1Dlod | 使用 LOD 进行的 1D 纹理查找。 | 3¹ |
| tex1Dproj | 使用透视分离进行的 1D 纹理查找。 | 2¹ |
| tex2D(s, t) | 2D 纹理查找。 | 1¹ |
| tex2D(s, t, ddx, ddy) | 2D 纹理查找。 | 2¹ |
| tex2Dbias | 使用 bias 进行的 2D 纹理查找。 | 2¹ |
| tex2Dgrad | 使用 gradient 进行的 2D 纹理查找。 | 2¹ |
| tex2Dlod | 使用 LOD 进行的 2D 纹理查找。 | 3 |
| tex2Dproj | 使用透视分离进行的 2D 纹理查找。 | 2¹ |
| tex3D(s, t) | 3D 纹理查找。 | 1¹ |
| tex3D(s, t, ddx, ddy) | 3D 纹理查找。 | 2¹ |
| tex3Dbias | 使用 bias 进行的 3D 纹理查找。 | 2¹ |
| tex3Dgrad | 使用 gradient 进行的 3D 纹理查找。 | 2¹ |
| tex3Dlod | 使用 LOD 进行的 3D 纹理查找。 | 3¹ |
| tex3Dproj | 使用透视分离进行的 3D 纹理查找。 | 2¹ |
| texCUBE(s, t) | 多维数据集纹理查找。 | 1¹ |
| texCUBE(s, t, ddx, ddy) | 多维数据集纹理查找。 | 2¹ |
| texCUBEbias | 使用 bias 进行的多维数据集纹理查找。 | 2¹ |
| texCUBEgrad | 使用 gradient 进行的多维数据集纹理查找。 | 2¹ |
| texCUBElod | 使用 LOD 进行多维数据集纹理查找。 | 3¹ |
| texCUBEproj | 使用透视分离进行的多维数据集纹理查找。 | 2¹ |
| transpose | 返回矩阵 m 的转置。 | 1 |
| trunc | 将浮点值截断为整数值 | 1 |
¹ 请参阅有关限制的参考页。
分量和模板类型
HLSL 内部函数声明使用分量类型和模板类型作为输入参数参数和返回值。 下表列出了可用的类型。
| 这些模板类型 | 说明 | 支持这些数据类型 |
|---|---|---|
| 矩形图 | 最多 16 个分量,具体取决于声明 | Basic HLSL Types |
| object | sampler 对象 | sampler、sampler1D、sampler2D、sampler3D、samplerCUBE |
| 标量 (scalar) | 1 个分量 | Basic HLSL Types |
| 向量 | 最少 1 个分量,最多 4 个分量(含) | Basic HLSL Types |
另请参阅