This adds support for #pragma pack_matrix() to the HLSL front end. The pragma sets the default matrix layout for subsequent unqualified matrices in structs or buffers. Explicit qualification overrides the pragma value. Matrix layout is not permitted at the structure level in HLSL, so only leaves which are matrix types can be so qualified. Note that due to the semantic (not layout) difference in first matrix indirections between HLSL and SPIR-V, the sense of row and column major are flipped. That's independent of this PR: just a factor to note. A column_major qualifier appears as a RowMajor member decoration in SPIR-V modules, and vice versa.
Glslang Tests based on the Google Test Framework
This directory contains Google Test based test fixture and test cases for glslang.
Apart from typical unit tests, necessary utility methods are added into
the GlslangTests fixture to provide the ability to do
file-based integration tests. Various *.FromFile.cpp files lists names
of files containing input shader code in the Test/ directory. Utility
methods will load the input shader source, compile them, and compare with
the corresponding expected output in the Test/baseResults/ directory.
How to run the tests
Please make sure you have a copy of Google Test checked out under
the External directory before building. After building, just run the
ctest command or the gtests/glslangtests binary in your build directory.
The gtests/glslangtests binary also provides an --update-mode command
line option, which, if supplied, will overwrite the golden files under
the Test/baseResults/ directory with real output from that invocation.
This serves as an easy way to update golden files.