在GLSL中实现normalize()和length()的基础

时间:2015-04-14 20:53:18

标签: opengl glsl glsles

GLSL中normalize()和length()的底层实现是什么?我试图衡量我的代码的性能以及知道什么指令正在为GLSL中的某些内置函数执行。我在哪里可以获得有关其他内置函数的底层实现的更多信息?

2 个答案:

答案 0 :(得分:3)

OpenGL着色语言规范通常不需要特定的函数实现,只要它们给出它指定的结果即可。例如,在GLSL 4.5中,请参阅第84页的正确性要求以及第150页的函数length()normalize()

此外,GLSL没有为编译的着色器代码定义二进制格式;因此,该格式取决于实现。

但是,一般来说,我假设length函数将使用点积和平方根来实现,而normalize函数将通过调用length函数来实现,也做了三个分区,或一个分区和一个向量乘法。

答案 1 :(得分:1)

答案非常依赖于GPU /供应商;但它可能会给你一个线索来查看AMD Shader Analyser提供的输出或查看NVidia上编译着色器的'二进制'转储 - 上次我检查(很久以前),它们包含汇编代码文本形式。