DX9 style HLSL in, GLSL / GLSL ES out.
A continued development from ATI's HLSL2GLSL. I'm changing it to make it work for Unity's use cases; might totally not work for yours!
For an opposite tool (GLSL ES to HLSL translator), look at Google's ANGLE.
- Made it build with VS2008 on Windows and XCode 3.2 on Mac. Build as static library.
- Feature to produce OpenGL ES-like precision specifiers (fixed/half/float -> lowp/mediump/highp)
- Fixes to ternary vector selection (float4 ? float4 : float4)
- Fixes to bool->float promotion in arithmetic ops
- Fixes to matrix constructors & indexing (GLSL is transposed in regards to HLSL)
- Support clip()
- Support Cg-like samplerRECT, texRECT, texRECTproj
- Support VPOS and VFACE semantics
- Fix various crashes & infinite loops, mostly on shaders with errors
- Cleaner and more deterministic generated GLSL output
- Unit testing suite
- Simplified interface, code cleanup, unused code removal, merge copy-n-pasted code, simplify implementation etc.
- Only Direct3D 9 style HLSL is supported. No Direct3D 10/11 "template like" syntax, no geometry/tesselation/compute shaders, no abstract interfaces.
- I bumped into some issues of HLSL2GLSL's preprocessor that I am not fixing. Most issues were with token pasting operator. So I preprocess source using mojoshader's preprocessor. Grab latest from mojoshader hg, it's awesome!
- On Windows, the library is built with
_HAS_ITERATOR_DEBUGGING=0,_SECURE_SCL=0
defines, which affect MSVC's STL behavior. If this does not match defines in your application, totally strange things can start to happen! - The library is not currently thread-safe.
Seems to work quite well for Unity's shaders. When/if we bump into any issues; we'll just fix them.
No optimizations are performed on the generated GLSL, so it is expected that your platform will have a decent GLSL compiler. Or, use GLSL Optimizer, we use it to optimize shaders produced by HLSL2GLSL; gives a substantial performance boost on mobile platforms.