1 //
2 // Copyright 2002 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 // Check whether variables fit within packing limits according to the packing rules from the GLSL ES
7 // 1.00.17 spec, Appendix A, section 7.
8 
9 #ifndef COMPILER_TRANSLATOR_VARIABLEPACKER_H_
10 #define COMPILER_TRANSLATOR_VARIABLEPACKER_H_
11 
12 #include <vector>
13 
14 #include <GLSLANG/ShaderLang.h>
15 
16 namespace sh
17 {
18 
19 // Gets how many components in a row a data type takes.
20 int GetTypePackingComponentsPerRow(sh::GLenum type);
21 
22 // Gets how many rows a data type takes.
23 int GetTypePackingRows(sh::GLenum type);
24 
25 // Returns true if the passed in variables pack in maxVectors.
26 // T should be ShaderVariable or one of the subclasses of ShaderVariable.
27 bool CheckVariablesInPackingLimits(unsigned int maxVectors,
28                                    const std::vector<ShaderVariable> &variables);
29 
30 }  // namespace sh
31 
32 #endif  // COMPILER_TRANSLATOR_VARIABLEPACKER_H_
33