From d55fe86512af7b14e11eb8ea996f83b365448d85 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Tue, 27 Feb 2018 00:48:17 -0700 Subject: [PATCH] HLSL: Fix #1257: layout float1, int1, etc., as scalars. --- Test/baseResults/hlsl.implicitBool.frag.out | 4 ++-- glslang/MachineIndependent/linkValidate.cpp | 2 ++ hlsl/hlslParseHelper.cpp | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out index 3e90fdb7..a55a7815 100755 --- a/Test/baseResults/hlsl.implicitBool.frag.out +++ b/Test/baseResults/hlsl.implicitBool.frag.out @@ -358,8 +358,8 @@ gl_FragCoord origin is upper left Name 138 "@entryPointOutput" MemberDecorate 16($Global) 0 Offset 0 MemberDecorate 16($Global) 1 Offset 4 - MemberDecorate 16($Global) 2 Offset 16 - MemberDecorate 16($Global) 3 Offset 32 + MemberDecorate 16($Global) 2 Offset 8 + MemberDecorate 16($Global) 3 Offset 12 Decorate 16($Global) Block Decorate 18 DescriptorSet 0 Decorate 138(@entryPointOutput) Location 0 diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 9ca1557b..59284bc6 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -1197,6 +1197,8 @@ int TIntermediate::getBaseAlignment(const TType& type, int& size, int& stride, b if (type.isVector()) { int scalarAlign = getBaseAlignmentScalar(type, size); switch (type.getVectorSize()) { + case 1: // HLSL has this, GLSL does not + return scalarAlign; case 2: size *= 2; return 2 * scalarAlign; diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index cba772d8..e56480f4 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -829,7 +829,9 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc, } else { // at least one of base and index is variable... - if (base->getAsSymbolNode() && wasFlattened(base)) { + if (base->getType().isScalarOrVec1()) + result = base; + else if (base->getAsSymbolNode() && wasFlattened(base)) { if (index->getQualifier().storage != EvqConst) error(loc, "Invalid variable index to flattened array", base->getAsSymbolNode()->getName().c_str(), "");