GLSL中normalize()和length()的底层实现是什么?我试图衡量我的代码的性能以及知道什么指令正在为GLSL中的某些内置函数执行。我在哪里可以获得有关其他内置函数的底层实现的更多信息?
答案 0 :(得分:3)
OpenGL着色语言规范通常不需要特定的函数实现,只要它们给出它指定的结果即可。例如,在GLSL 4.5中,请参阅第84页的正确性要求以及第150页的函数length()
和normalize()
。
此外,GLSL没有为编译的着色器代码定义二进制格式;因此,该格式取决于实现。
但是,一般来说,我假设length
函数将使用点积和平方根来实现,而normalize
函数将通过调用length
函数来实现,也做了三个分区,或一个分区和一个向量乘法。
答案 1 :(得分:1)
答案非常依赖于GPU /供应商;但它可能会给你一个线索来查看AMD Shader Analyser提供的输出或查看NVidia上编译着色器的'二进制'转储 - 上次我检查(很久以前),它们包含汇编代码文本形式。