在过去的几年中,我已经做了很多的SIMD编程,大部分我一直依赖于编译器的内部功能(如药粥SSE编程)或编程组件上的时间去真正漂亮东西。 然而,到现在为止,我几乎能找到任何编程语言与SIMD内置支持。
现在很明显有着色器语言如HLSL,CG和GLSL然而,那些对这种东西的原生支持,我在找东西是至少能够编译上证所没有自动向量化,但有内置的向量运算的支持。 难道这样的语言存在吗?
这是(的部分)的CG着色器,做了聚光灯和语法而言,这可能是最接近于我正在寻找的例子。
float4 pixelfunction(
output_vs IN,
uniform sampler2D texture : TEX0,
uniform sampler2D normals : TEX1,
uniform float3 light,
uniform float3 eye ) : COLOR
{
float4 color = tex2D( texture, IN.uv );
float4 normal = tex2D( normals, IN.uv ) * 2 - 1;
float3 T = normalize(IN.T);
float3 B = normalize(IN.B);
float3 N =
normal.b * normalize(IN.normal) +
normal.r * T +
normal.g * B;
float3 V = normalize(eye - IN.pos.xyz);
float3 L = normalize(light - IN.pos);
float3 H = normalize(L + V);
float4 diffuse = color * saturate( dot(N, L) );
float4 specular = color * pow(saturate(dot(N, H)), 15);
float falloff = dot(L, normalize(light));
return pow(falloff, 5) * (diffuse + specular);
}
东西,将是一个真正的必须在这个语言是:
- 内置调酒运营商
- 向量操作(点,交叉,正常化,饱和,反映等等)
- 自定义数据类型支持(结构)
- 动态分支将是很好(for循环,if语句)