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