1 // 2 // Copyright 2020 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #include <algorithm> 8 #include <unordered_map> 9 10 #include "compiler/translator/IntermRebuild.h" 11 #include "compiler/translator/msl/AstHelpers.h" 12 #include "compiler/translator/tree_ops/msl/TransposeRowMajorMatrices.h" 13 14 using namespace sh; 15 16 //////////////////////////////////////////////////////////////////////////////// 17 18 namespace 19 { 20 21 class Rewriter : public TIntermRebuild 22 { 23 public: Rewriter(TCompiler & compiler)24 Rewriter(TCompiler &compiler) : TIntermRebuild(compiler, true, false) {} 25 // PreResult visitConstantUnionPre(TIntermSymbol &symbolNode) override 26 // { 27 // const TVariable &var = symbolNode.variable(); 28 // const TType &type = var.getType(); 29 // //const TLayoutQualifier &layoutQualifier = type.getLayoutQualifier(); 30 // if(type.isMatrix()) 31 // { 32 // return CreateBuiltInUnaryFunctionCallNode("transpose", symbolNode.deepCopy(), 33 // mSymbolTable, 300)); 34 // } 35 // return symbolNode; 36 // } 37 }; 38 39 } // anonymous namespace 40 41 //////////////////////////////////////////////////////////////////////////////// 42 TransposeRowMajorMatricies(TCompiler & compiler,TIntermBlock & root)43bool sh::TransposeRowMajorMatricies(TCompiler &compiler, TIntermBlock &root) 44 { 45 Rewriter rewriter(compiler); 46 if (!rewriter.rebuildRoot(root)) 47 { 48 return false; 49 } 50 return true; 51 } 52