HLSL to GLSL language translator based on ATI's HLSL2GLSL. Used in Unity.
Перейти к файлу
Aras Pranckevicius b5ed958119 tests: rename complex tests to be at end of file list 2012-09-15 16:18:05 +03:00
OGLCompilersDLL cleanup 2010-10-12 16:18:55 +03:00
hlslang Fix lit function 2012-09-06 11:38:35 -07:00
hlslang.xcodeproj fix build post-merge 2012-08-18 19:40:18 +03:00
include option to emit GLES-like precision qualifiers; breaks the interface. Might not work. 2010-10-13 12:16:13 +03:00
tests tests: rename complex tests to be at end of file list 2012-09-15 16:18:05 +03:00
tools initial hlsl2glsl from ATI 2010-02-23 14:26:22 +02:00
.gitignore Hide workspace-whiz project database files from git 2011-12-19 19:06:45 -05:00
CMakeLists.txt linux: cmake fixes 2011-08-16 16:36:32 +03:00
LICENSE.txt cleanup license file 2010-10-12 16:11:02 +03:00
README.md Updated README to reflect the fact that the library is not thread-safe. 2011-12-19 16:43:42 -05:00
hlslang.sln Added x64 build targets and disambiguated the build output directories for each. 2011-12-19 18:40:05 -05:00
hlslang.vcproj Extended #line directive support to include file-name tracking. 2011-12-20 12:53:52 -05:00

README.md

HLSL to GLSL shader language translator

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.

Changes from original HLSL2GLSL 0.9

  • 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.

Notes

  • 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.

Status

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.