• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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