gfx/angle/src/compiler/VariablePacker.h

branch
TOR_BUG_9701
changeset 8
97036ab72558
equal deleted inserted replaced
-1:000000000000 0:bd65f605d9ce
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_

mercurial