We've discussed this further with Google off-list and believe that best way forward is to leave the invariance language from GLSL ES in WebGL as suggested. OpenGL implementations will be able to use it as normal and ANGLE will rely on the invariance guarantees that are provided by D3D9 and HLSL. We'll continue to investigate what invariance guarantees are available in D3D9 and what we may be able to do should any applications which demonstrate invariance issues on ANGLE arise.
Hope this helps,
On 2010-07-14, at 12:06 PM, Chris Marrin wrote:
On Jul 13, 2010, at 12:29 PM, Daniel Koch wrote:
The problem is that there is nothing like the "invariant" keyword in D3D9 HLSL (or even D3D10 HLSL for that matter) that I am aware of.
In practise, there must be some form of invariance guaranteed by d3d9 (especially for position), since I know of many games which use multi-pass rendering algorithms which work just fine. The difficulty lies in figuring out exactly what is guaranteed by D3D9, since we've been unable to find any sort of public documentation or discussion of these issues. However, even if there is position invariance, this does not provide a mechanism to toggle invariance on and off on a per-variable basis as is required in GLSL.
I think we certainly need the feature of invariance. Perhaps D3D always creates invariant shaders (it never does optimizations that would break invariance)? If so, then I suggest we keep the keyword, use it normally in OpenGL implementations (where supported) and ignore it in HLSL. Of course, I haven't investigated the issue, so I'm not sure if this is possible. But I believe we need to:
a) Make it possible to guarantee an invariant shader
b) Make it possible to enable and disable invariance in implementations that support it.
311 O'Connor St., Suite 300, Ottawa, Ontario, Canada, K2P 2G9
This message is a private communication. It also contains information that is privileged or confidential. If you are not the intended recipient, please do not read, copy or use it, and do not disclose it to others. Please notify the sender of the delivery error by replying to this message, and then delete it and any attachments from your system. Thank you.