Can I avoid texture gradient calculations in webgl?

孤街醉人 提交于 2019-12-23 14:53:38

问题


We have a webgl/three.js application that makes extensive use of texture buffers for passing data between passes and for storing arrays of data. None of these has any use for mipmaps. We are easily able to prevent mipmap generation: at the three.js level we set min and mag filters to NearestFilter, and set generateMipmaps false.

However, the shaders do not know at compile time that there is no mipmapping. When compiled using ANGLE we get a lot of warning messages:

warning X4121: gradient-based operations must be moved out of flow control to prevent divergence. Performance may improve by using a non-gradient operation

I have recoded so that the flow around such lookups is (optionally) avoided. On my Windows/NVidia machine using the conditional flows improves performance and does not cause any visual issues (but does cause the messages).

I don't want the texture lookups to be gradient-based operations. What I would like to do is to write the shaders in such a way that they know at compile time that there is no decision to be made; which should (marginally) improve performance and also make the messages go away. However, I cannot see any way to do this in GLSL for GLES 2 (as used by webgl). It can be done in later versions with textureLodOffset() and various other ways. The only control in level 2 I can see is the bias option on texture2D(), but that is a bias not an absolute value and so does not resolve the issue. So, finally ...

Question: Do you know any way to prevent lod calculation in WEBGL level GLSL shaders?


回答1:


You might try ensuring:

  • Using gl_FragCoord instead of a user varying
  • NEAREST is set before texImage2d, instead of after


来源:https://stackoverflow.com/questions/33175398/can-i-avoid-texture-gradient-calculations-in-webgl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!