Fetch gl.xml, egl.xml from Github repos am: ae3759c7c9
[platform/upstream/VK-GL-CTS.git] / framework / opengl / gluProgramInterfaceQuery.hpp
1 #ifndef _GLUPROGRAMINTERFACEQUERY_HPP
2 #define _GLUPROGRAMINTERFACEQUERY_HPP
3 /*-------------------------------------------------------------------------
4  * drawElements Quality Program OpenGL Utilities
5  * ---------------------------------------------
6  *
7  * Copyright 2014 The Android Open Source Project
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  *//*!
22  * \file
23  * \brief Program interface query utilities
24  *//*--------------------------------------------------------------------*/
25
26 #include "gluDefs.hpp"
27
28 #include <vector>
29 #include <string>
30
31 namespace glw
32 {
33 class Functions;
34 }
35
36 namespace glu
37 {
38
39 //! Interface block info.
40 struct InterfaceBlockInfo
41 {
42         std::string                     name;
43         deUint32                        index;
44         deUint32                        bufferBinding;          //!< GL_BUFFER_BINDING
45         deUint32                        dataSize;                       //!< GL_BUFFER_DATA_SIZE
46         std::vector<int>        activeVariables;        //!< GL_ACTIVE_VARIABLES
47
48         InterfaceBlockInfo (void)
49                 : index                         (~0u /* GL_INVALID_INDEX */)
50                 , bufferBinding         (0)
51                 , dataSize                      (0)
52         {
53         }
54 };
55
56 //! Interface variable (uniform in uniform block, buffer variable) info.
57 struct InterfaceVariableInfo
58 {
59         std::string                     name;
60         deUint32                        index;
61         deUint32                        blockIndex;                                     //!< GL_BLOCK_INDEX
62         deUint32                        atomicCounterBufferIndex;       //!< GL_ATOMIC_COUNTER_BUFFER_INDEX
63         deUint32                        type;                                           //!< GL_TYPE
64         deUint32                        arraySize;                                      //!< GL_ARRAY_SIZE
65         deUint32                        offset;                                         //!< GL_OFFSET
66         deInt32                         arrayStride;                            //!< GL_ARRAY_STRIDE
67         deInt32                         matrixStride;                           //!< GL_MATRIX_STRIDE
68         deUint32                        topLevelArraySize;                      //!< GL_TOP_LEVEL_ARRAY_SIZE    - set only for GL_BUFFER_VARIABLEs
69         deInt32                         topLevelArrayStride;            //!< GL_TOP_LEVEL_ARRAY_STRIDE  - set only for GL_BUFFER_VARIABLEs
70         bool                            isRowMajor;                                     //!< GL_IS_ROW_MAJOR
71
72         InterfaceVariableInfo (void)
73                 : index                                         (~0u /* GL_INVALID_INDEX */)
74                 , blockIndex                            (~0u /* GL_INVALID_INDEX */)
75                 , atomicCounterBufferIndex      (~0u /* GL_INVALID_INDEX */)
76                 , type                                          (0)
77                 , arraySize                                     (0)
78                 , offset                                        (0)
79                 , arrayStride                           (0)
80                 , matrixStride                          (0)
81                 , topLevelArraySize                     (0)
82                 , topLevelArrayStride           (0)
83                 , isRowMajor                            (0)
84         {
85         }
86 };
87
88
89 int                                             getProgramResourceInt                   (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index, deUint32 queryParam);
90 deUint32                                getProgramResourceUint                  (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index, deUint32 queryParam);
91
92 void                                    getProgramResourceName                  (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index, std::string& dst);
93 std::string                             getProgramResourceName                  (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index);
94
95 void                                    getProgramInterfaceBlockInfo    (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index, InterfaceBlockInfo& info);
96 InterfaceBlockInfo              getProgramInterfaceBlockInfo    (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index);
97
98 void                                    getProgramInterfaceVariableInfo (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index, InterfaceVariableInfo& info);
99 InterfaceVariableInfo   getProgramInterfaceVariableInfo (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index);
100
101 // Inline implementations for optimization (RVO in most cases).
102
103 inline int getProgramResourceInt (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index, deUint32 queryParam)
104 {
105         return (int)getProgramResourceUint(gl, program, programInterface, index, queryParam);
106 }
107
108 inline std::string getProgramResourceName (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index)
109 {
110         std::string name;
111         getProgramResourceName(gl, program, programInterface, index, name);
112         return name;
113 }
114
115 inline InterfaceBlockInfo getProgramInterfaceBlockInfo (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index)
116 {
117         InterfaceBlockInfo info;
118         getProgramInterfaceBlockInfo(gl, program, programInterface, index, info);
119         return info;
120 }
121
122 inline InterfaceVariableInfo getProgramInterfaceVariableInfo (const glw::Functions& gl, deUint32 program, deUint32 programInterface, deUint32 index)
123 {
124         InterfaceVariableInfo info;
125         getProgramInterfaceVariableInfo(gl, program, programInterface, index, info);
126         return info;
127 }
128
129 } // glu
130
131 #endif // _GLUPROGRAMINTERFACEQUERY_HPP