1 // 2 // Copyright (c) 2002-2012 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 #ifndef _VARIABLEPACKER_INCLUDED_ 8 #define _VARIABLEPACKER_INCLUDED_ 9 10 #include <vector> 11 #include "compiler/ShHandle.h" 12 13 class VariablePacker { 14 public: 15 // Returns true if the passed in variables pack in maxVectors following 16 // the packing rules from the GLSL 1.017 spec, Appendix A, section 7. 17 bool CheckVariablesWithinPackingLimits( 18 int maxVectors, 19 const TVariableInfoList& in_variables); 20 21 // Gets how many components in a row a data type takes. 22 static int GetNumComponentsPerRow(ShDataType type); 23 24 // Gets how many rows a data type takes. 25 static int GetNumRows(ShDataType type); 26 27 private: 28 static const int kNumColumns = 4; 29 static const unsigned kColumnMask = (1 << kNumColumns) - 1; 30 31 unsigned makeColumnFlags(int column, int numComponentsPerRow); 32 void fillColumns(int topRow, int numRows, int column, int numComponentsPerRow); 33 bool searchColumn(int column, int numRows, int* destRow, int* destSize); 34 35 int topNonFullRow_; 36 int bottomNonFullRow_; 37 int maxRows_; 38 std::vector<unsigned> rows_; 39 }; 40 41 #endif // _VARIABLEPACKER_INCLUDED_ 42