|
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_ |