内在函数
下表列出了HLSL中可用的内在函数。每个函数都有一个简短的描述,以及一个指向参考页面的链接,该页面具有有关输入参数和返回类型的更多详细信息。
表1 |
||
名称 |
描述 |
最小着色器模型 |
abort |
终止当前正在执行的绘制或调度调用。 |
4 |
abs |
绝对值(每个组件)。 |
1¹ |
acos |
返回x每个分量的反余弦值。 |
1¹ |
all |
测试x的所有分量是否非零。 |
1¹ |
AllMemoryBarrier |
阻止执行组中所有线程,直到完成所有内存访问为止。 |
5 |
AllMemoryBarrierWithGroupSync |
阻止执行组中的所有线程,直到完成所有内存访问并且组中的所有线程都到达此调用为止。 |
5 |
any |
测试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 |
确定“ 采样”或“ 加载”操作中的所有值是否访问切片资源中的映射切片。 |
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 |
EvaluateAttributeAtCentroid |
评估像素质心。 |
5 |
EvaluateAttributeAtSample |
在索引的样本位置进行评估。 |
5 |
EvaluateAttributeSnapped |
用偏移量评估像素质心。 |
5 |
exp |
返回base-e指数。 |
1¹ |
exp2 |
以2为底的指数(每个分量)。 |
1¹ |
f16tof32 |
将存储在uint的下半部分中的float16转换为float。 |
5 |
f32tof16 |
将输入转换为float16类型。 |
5 |
faceforward |
返回-n *符号(dot(i,ng))。 |
1¹ |
firstbithigh |
获取每个组件从最高位开始到向下工作的第一个置位的位置。 |
5 |
firstbitlow |
返回每个组件从最低位开始并向上工作的第一个置位位置。 |
5 |
floor |
返回小于或等于x的最大整数。 |
1¹ |
fma |
返回a * b + c的双精度融合乘法加法。 |
5 |
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 |
执行保证的原子异或。 |
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噪声算法生成随机值。 |
1¹ |
normalize |
返回归一化向量。 |
1¹ |
pow |
返回x y。 |
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) |
一维纹理查找。 |
1个 |
tex1D(s, t, ddx, ddy) |
一维纹理查找。 |
2¹ |
tex1Dbias |
具有偏差的一维纹理查找。 |
2¹ |
tex1Dgrad |
具有渐变的1D纹理查找。 |
2¹ |
tex1Dlod |
使用LOD进行1D纹理查找。 |
3¹ |
tex1Dproj |
一维纹理查找与投影分隔。 |
2¹ |
tex2D(s, t) |
2D纹理查找。 |
1¹ |
tex2D(s, t, ddx, ddy) |
2D纹理查找。 |
2¹ |
tex2Dbias |
具有偏差的2D纹理查找。 |
2¹ |
tex2Dgrad |
具有渐变的2D纹理查找。 |
2¹ |
tex2Dlod |
具有LOD的2D纹理查找。 |
3 |
tex2Dproj |
具有投影鸿沟的2D纹理查找。 |
2¹ |
tex3D(s, t) |
3D纹理查找。 |
1¹ |
tex3D(s, t, ddx, ddy) |
3D纹理查找。 |
2¹ |
tex3Dbias |
3D与偏差的纹理查找。 |
2¹ |
tex3Dgrad |
3D与梯度的纹理查找。 |
2¹ |
tex3Dlod |
3D与LOD的纹理查找。 |
3¹ |
tex3Dproj |
3D与射影鸿沟的纹理查找。 |
2¹ |
texCUBE(s, t) |
多维数据集纹理查找。 |
1¹ |
texCUBE(s, t, ddx, ddy) |
多维数据集纹理查找。 |
2¹ |
texCUBEbias |
多维数据集具有偏差的纹理查找。 |
2¹ |
texCUBEgrad |
多维数据集与渐变的纹理查找。 |
2¹ |
texCUBElod |
与LOD的多维数据集纹理查找。 |
3¹ |
texCUBEproj |
多维数据集纹理查找与射影鸿沟。 |
2¹ |
transpose |
返回矩阵m的转置。 |
1个 |
trunc |
将浮点值截断为整数值 |
1个 |
¹有关限制,请参见参考页。
组件和模板类型
HLSL内在函数声明将组件类型和模板类型用于输入参数自变量和返回值。下表列出了可用的类型。
表2 |
||
这些模板类型 |
描述 |
支持这些数据类型 |
matrix |
多达16个组件,具体取决于声明 |
HLSL基本类型 |
object |
采样对象 |
采样器,sampler1D,sampler2D,sampler3D,samplerCUBE |
scalar |
1个组成部分 |
HLSL基本类型 |
vector |
最少1个组件,最多4个组件(含) |
HLSL基本类型 |