This one small change allows the update_glslang_sources.py script to operate correctly with Python 2 and Python 3.
Change the string literal type to "bytes" so that it matches the type returned by the subprocess calls. Otherwise, under Python 3, the search for "known-good" in the list of remotes always fails. This is OK for the first execution of update_glsang_sources, since the remote is not there on the first run. But on subsequent runs, the search still fails to match and the script stops when trying to create a remote that already exists.
When capabilities are needed for specific SPIR-V instructions, it is
fragile to do so based on GLSL/AST usage; it should be based on actual
instructions they got translated to.
1) On some old versions of MSVC:
glslang\MachineIndependent\Constant.cpp(187): warning C4056: overflow in floating-point constant arithmetic
On this platform the definition of INFINITY is as follows:
#ifndef _HUGE_ENUF
#define _HUGE_ENUF 1e+300 // _HUGE_ENUF*_HUGE_ENUF must overflow
#endif
#define INFINITY ((float)(_HUGE_ENUF * _HUGE_ENUF))
Moving the negation outside the cast seems to resolve that issue.
2) Some Linux compilers were unhappy with lines 226/227
glslang/MachineIndependent/Constant.cpp: In member function 'virtual glslang::TIntermTyped* glslang::TIntermConstantUnion::fold(glslang::TOperator, const glslang::TIntermTyped*) const':
glslang/MachineIndependent/Constant.cpp:226:99: error: integer overflow in expression [-Werror=overflow]
else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == -(int)0x80000000)
^~~~~~~~~~~~~~~~
glslang/MachineIndependent/Constant.cpp:227:48: error: integer overflow in expression [-Werror=overflow]
newConstArray[i].setIConst(-(int)0x80000000);
^~~~~~~~~~~~~~~~
Moving the negation to the right side of the cast made those happy, but then some Windows compilers were unhappy:
glslang\MachineIndependent\Constant.cpp(226): warning C4146: unary minus operator applied to unsigned type, result still unsigned
glslang\MachineIndependent\Constant.cpp(227): warning C4146: unary minus operator applied to unsigned type, result still unsigned
which required adding on the "ll" suffix.
3) Android builds where unhappy with line 242:
glslang/MachineIndependent/Constant.cpp:242:100: error: comparison of integers of different signs: 'long long' and 'unsigned long long' [-Werror,-Wsign-compare]
else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == -0x8000000000000000ll)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Adding an explicit (long long) cast resolved this.
And the negation needs to be on the right side of the cast otherwise linux
builds are unhappy as in (2).
4) Android builds are unhappy with out of order initializers:
glslang/MachineIndependent/reflection.h:60:84: error: field 'type' will be initialized after field 'stages' [-Werror,-Wreorder]
glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), type(pType.clone()), stages(EShLanguageMask(0)) { }
^
1 error generated.
Change-Id: Ic9a05fa7912498284885113d8b051f93f822f62b