diff options
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/StructureHLSL.cpp')
-rw-r--r-- | src/3rdparty/angle/src/compiler/translator/StructureHLSL.cpp | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/StructureHLSL.cpp b/src/3rdparty/angle/src/compiler/translator/StructureHLSL.cpp index 365985c852..48929affe6 100644 --- a/src/3rdparty/angle/src/compiler/translator/StructureHLSL.cpp +++ b/src/3rdparty/angle/src/compiler/translator/StructureHLSL.cpp @@ -17,12 +17,19 @@ namespace sh { -Std140PaddingHelper::Std140PaddingHelper(const std::map<TString, int> &structElementIndexes) - : mPaddingCounter(0), +Std140PaddingHelper::Std140PaddingHelper(const std::map<TString, int> &structElementIndexes, + unsigned *uniqueCounter) + : mPaddingCounter(uniqueCounter), mElementIndex(0), mStructElementIndexes(structElementIndexes) {} +TString Std140PaddingHelper::next() +{ + unsigned value = (*mPaddingCounter)++; + return str(value); +} + int Std140PaddingHelper::prePadding(const TType &type) { if (type.getBasicType() == EbtStruct || type.isMatrix() || type.isArray()) @@ -68,7 +75,7 @@ TString Std140PaddingHelper::prePaddingString(const TType &type) for (int paddingIndex = 0; paddingIndex < paddingCount; paddingIndex++) { - padding += " float pad_" + str(mPaddingCounter++) + ";\n"; + padding += " float pad_" + next() + ";\n"; } return padding; @@ -116,19 +123,25 @@ TString Std140PaddingHelper::postPaddingString(const TType &type, bool useHLSLRo TString padding; for (int paddingOffset = numComponents; paddingOffset < 4; paddingOffset++) { - padding += " float pad_" + str(mPaddingCounter++) + ";\n"; + padding += " float pad_" + next() + ";\n"; } return padding; } StructureHLSL::StructureHLSL() + : mUniquePaddingCounter(0) {} +Std140PaddingHelper StructureHLSL::getPaddingHelper() +{ + return Std140PaddingHelper(mStd140StructElementIndexes, &mUniquePaddingCounter); +} + TString StructureHLSL::defineQualified(const TStructure &structure, bool useHLSLRowMajorPacking, bool useStd140Packing) { if (useStd140Packing) { - Std140PaddingHelper padHelper(mStd140StructElementIndexes); + Std140PaddingHelper padHelper = getPaddingHelper(); return define(structure, useHLSLRowMajorPacking, useStd140Packing, &padHelper); } else @@ -291,9 +304,9 @@ void StructureHLSL::addConstructor(const TType &type, const TString &name, const if (parameter.isScalar()) { - for (int row = 0; row < rows; row++) + for (int col = 0; col < cols; col++) { - for (int col = 0; col < cols; col++) + for (int row = 0; row < rows; row++) { constructor += TString((row == col) ? "x0" : "0.0"); @@ -306,13 +319,13 @@ void StructureHLSL::addConstructor(const TType &type, const TString &name, const } else if (parameter.isMatrix()) { - for (int row = 0; row < rows; row++) + for (int col = 0; col < cols; col++) { - for (int col = 0; col < cols; col++) + for (int row = 0; row < rows; row++) { if (row < parameter.getRows() && col < parameter.getCols()) { - constructor += TString("x0") + "[" + str(row) + "][" + str(col) + "]"; + constructor += TString("x0") + "[" + str(col) + "][" + str(row) + "]"; } else { @@ -461,7 +474,7 @@ std::string StructureHLSL::structsHeader() const void StructureHLSL::storeStd140ElementIndex(const TStructure &structure, bool useHLSLRowMajorPacking) { - Std140PaddingHelper padHelper(mStd140StructElementIndexes); + Std140PaddingHelper padHelper = getPaddingHelper(); const TFieldList &fields = structure.fields(); for (unsigned int i = 0; i < fields.size(); i++) |