Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / Uniform.h
1 //
2 // Copyright (c) 2010-2013 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 LIBGLESV2_UNIFORM_H_
8 #define LIBGLESV2_UNIFORM_H_
9
10 #include "common/debug.h"
11 #include "common/blocklayout.h"
12
13 #include "libGLESv2/angletypes.h"
14
15 #include "angle_gl.h"
16
17 #include <string>
18 #include <vector>
19
20 namespace gl
21 {
22
23 // Helper struct representing a single shader uniform
24 struct LinkedUniform
25 {
26     LinkedUniform(GLenum type, GLenum precision, const std::string &name, unsigned int arraySize, const int blockIndex, const sh::BlockMemberInfo &blockInfo);
27
28     ~LinkedUniform();
29
30     bool isArray() const;
31     unsigned int elementCount() const;
32     bool isReferencedByVertexShader() const;
33     bool isReferencedByFragmentShader() const;
34     bool isInDefaultBlock() const;
35     size_t dataSize() const;
36     bool isSampler() const;
37
38     const GLenum type;
39     const GLenum precision;
40     const std::string name;
41     const unsigned int arraySize;
42     const int blockIndex;
43     const sh::BlockMemberInfo blockInfo;
44
45     unsigned char *data;
46     bool dirty;
47
48     unsigned int psRegisterIndex;
49     unsigned int vsRegisterIndex;
50     unsigned int registerCount;
51
52     // Register "elements" are used for uniform structs in ES3, to appropriately identify single uniforms
53     // inside aggregate types, which are packed according C-like structure rules.
54     unsigned int registerElement;
55 };
56
57 // Helper struct representing a single shader uniform block
58 struct UniformBlock
59 {
60     // use GL_INVALID_INDEX for non-array elements
61     UniformBlock(const std::string &name, unsigned int elementIndex, unsigned int dataSize);
62
63     bool isArrayElement() const;
64     bool isReferencedByVertexShader() const;
65     bool isReferencedByFragmentShader() const;
66
67     const std::string name;
68     const unsigned int elementIndex;
69     const unsigned int dataSize;
70
71     std::vector<unsigned int> memberUniformIndexes;
72
73     unsigned int psRegisterIndex;
74     unsigned int vsRegisterIndex;
75 };
76
77 }
78
79 #endif   // LIBGLESV2_UNIFORM_H_