xref: /aosp_15_r20/external/angle/src/libANGLE/queryutils.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2016 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 // queryutils.h: Utilities for querying values from GL objects
8 
9 #ifndef LIBANGLE_QUERYUTILS_H_
10 #define LIBANGLE_QUERYUTILS_H_
11 
12 #include "angle_gl.h"
13 #include "common/PackedEnums.h"
14 #include "common/angleutils.h"
15 #include "libANGLE/Error.h"
16 
17 #include <EGL/egl.h>
18 
19 namespace gl
20 {
21 class Buffer;
22 class Context;
23 class Sync;
24 class Framebuffer;
25 class GLES1State;
26 class Program;
27 class Renderbuffer;
28 class Sampler;
29 class Shader;
30 class State;
31 class Texture;
32 struct TextureCaps;
33 struct UniformBlock;
34 struct VertexAttribute;
35 class VertexBinding;
36 struct VertexAttribCurrentValueData;
37 
38 void QueryFramebufferAttachmentParameteriv(const Context *context,
39                                            const Framebuffer *framebuffer,
40                                            GLenum attachment,
41                                            GLenum pname,
42                                            GLint *params);
43 void QueryBufferParameteriv(const Buffer *buffer, GLenum pname, GLint *params);
44 void QueryBufferParameteri64v(const Buffer *buffer, GLenum pname, GLint64 *params);
45 void QueryBufferPointerv(const Buffer *buffer, GLenum pname, void **params);
46 void QueryProgramiv(Context *context, Program *program, GLenum pname, GLint *params);
47 void QueryRenderbufferiv(const Context *context,
48                          const Renderbuffer *renderbuffer,
49                          GLenum pname,
50                          GLint *params);
51 void QueryShaderiv(const Context *context, Shader *shader, GLenum pname, GLint *params);
52 void QueryTexLevelParameterfv(const Texture *texture,
53                               TextureTarget target,
54                               GLint level,
55                               GLenum pname,
56                               GLfloat *params);
57 void QueryTexLevelParameteriv(const Texture *texture,
58                               TextureTarget target,
59                               GLint level,
60                               GLenum pname,
61                               GLint *params);
62 void QueryTexParameterfv(const Context *context,
63                          const Texture *texture,
64                          GLenum pname,
65                          GLfloat *params);
66 void QueryTexParameterxv(const Context *context,
67                          const Texture *texture,
68                          GLenum pname,
69                          GLfixed *params);
70 void QueryTexParameteriv(const Context *context,
71                          const Texture *texture,
72                          GLenum pname,
73                          GLint *params);
74 void QueryTexParameterIiv(const Context *context,
75                           const Texture *texture,
76                           GLenum pname,
77                           GLint *params);
78 void QueryTexParameterIuiv(const Context *context,
79                            const Texture *texture,
80                            GLenum pname,
81                            GLuint *params);
82 void QuerySamplerParameterfv(const Sampler *sampler, GLenum pname, GLfloat *params);
83 void QuerySamplerParameteriv(const Sampler *sampler, GLenum pname, GLint *params);
84 void QuerySamplerParameterIiv(const Sampler *sampler, GLenum pname, GLint *params);
85 void QuerySamplerParameterIuiv(const Sampler *sampler, GLenum pname, GLuint *params);
86 
87 // Warning: you should ensure binding really matches attrib.bindingIndex before using the following
88 // functions.
89 void QueryVertexAttribfv(const VertexAttribute &attrib,
90                          const VertexBinding &binding,
91                          const VertexAttribCurrentValueData &currentValueData,
92                          GLenum pname,
93                          GLfloat *params);
94 
95 void QueryVertexAttribiv(const VertexAttribute &attrib,
96                          const VertexBinding &binding,
97                          const VertexAttribCurrentValueData &currentValueData,
98                          GLenum pname,
99                          GLint *params);
100 
101 void QueryVertexAttribPointerv(const VertexAttribute &attrib, GLenum pname, void **pointer);
102 
103 void QueryVertexAttribIiv(const VertexAttribute &attrib,
104                           const VertexBinding &binding,
105                           const VertexAttribCurrentValueData &currentValueData,
106                           GLenum pname,
107                           GLint *params);
108 
109 void QueryVertexAttribIuiv(const VertexAttribute &attrib,
110                            const VertexBinding &binding,
111                            const VertexAttribCurrentValueData &currentValueData,
112                            GLenum pname,
113                            GLuint *params);
114 
115 void QueryActiveUniformBlockiv(const Program *program,
116                                UniformBlockIndex uniformBlockIndex,
117                                GLenum pname,
118                                GLint *params);
119 
120 void QueryInternalFormativ(const Context *context,
121                            const Texture *texture,
122                            GLenum internalformat,
123                            const TextureCaps &format,
124                            GLenum pname,
125                            GLsizei bufSize,
126                            GLint *params);
127 
128 void QueryFramebufferParameteriv(const Framebuffer *framebuffer, GLenum pname, GLint *params);
129 
130 angle::Result QuerySynciv(const Context *context,
131                           const Sync *sync,
132                           GLenum pname,
133                           GLsizei bufSize,
134                           GLsizei *length,
135                           GLint *values);
136 
137 void SetTexParameterf(Context *context, Texture *texture, GLenum pname, GLfloat param);
138 void SetTexParameterfv(Context *context, Texture *texture, GLenum pname, const GLfloat *params);
139 void SetTexParameteri(Context *context, Texture *texture, GLenum pname, GLint param);
140 void SetTexParameteriv(Context *context, Texture *texture, GLenum pname, const GLint *params);
141 void SetTexParameterIiv(Context *context, Texture *texture, GLenum pname, const GLint *params);
142 void SetTexParameterIuiv(Context *context, Texture *texture, GLenum pname, const GLuint *params);
143 void SetTexParameterx(Context *context, Texture *texture, GLenum pname, GLfixed param);
144 void SetTexParameterxv(Context *context, Texture *texture, GLenum pname, const GLfixed *params);
145 
146 void SetSamplerParameterf(Context *context, Sampler *sampler, GLenum pname, GLfloat param);
147 void SetSamplerParameterfv(Context *context, Sampler *sampler, GLenum pname, const GLfloat *params);
148 void SetSamplerParameteri(Context *context, Sampler *sampler, GLenum pname, GLint param);
149 void SetSamplerParameteriv(Context *context, Sampler *sampler, GLenum pname, const GLint *params);
150 void SetSamplerParameterIiv(Context *context, Sampler *sampler, GLenum pname, const GLint *params);
151 void SetSamplerParameterIuiv(Context *context,
152                              Sampler *sampler,
153                              GLenum pname,
154                              const GLuint *params);
155 
156 void SetFramebufferParameteri(const Context *context,
157                               Framebuffer *framebuffer,
158                               GLenum pname,
159                               GLint param);
160 
161 void SetProgramParameteri(const Context *context, Program *program, GLenum pname, GLint value);
162 
163 GLint GetUniformResourceProperty(const Program *program, GLuint index, const GLenum prop);
164 
165 GLuint QueryProgramResourceIndex(const Program *program,
166                                  GLenum programInterface,
167                                  const GLchar *name);
168 
169 void QueryProgramResourceName(const Context *context,
170                               const Program *program,
171                               GLenum programInterface,
172                               GLuint index,
173                               GLsizei bufSize,
174                               GLsizei *length,
175                               GLchar *name);
176 
177 GLint QueryProgramResourceLocation(const Program *program,
178                                    GLenum programInterface,
179                                    const GLchar *name);
180 void QueryProgramResourceiv(const Program *program,
181                             GLenum programInterface,
182                             UniformBlockIndex index,
183                             GLsizei propCount,
184                             const GLenum *props,
185                             GLsizei bufSize,
186                             GLsizei *length,
187                             GLint *params);
188 
189 void QueryProgramInterfaceiv(const Program *program,
190                              GLenum programInterface,
191                              GLenum pname,
192                              GLint *params);
193 
194 angle::Result SetMemoryObjectParameteriv(const Context *context,
195                                          MemoryObject *memoryObject,
196                                          GLenum pname,
197                                          const GLint *params);
198 void QueryMemoryObjectParameteriv(const MemoryObject *memoryObject, GLenum pname, GLint *params);
199 
200 // GLES1 emulation
201 
202 ClientVertexArrayType ParamToVertexArrayType(GLenum param);
203 
204 void SetLightParameters(GLES1State *state,
205                         GLenum light,
206                         LightParameter pname,
207                         const GLfloat *params);
208 void GetLightParameters(const GLES1State *state,
209                         GLenum light,
210                         LightParameter pname,
211                         GLfloat *params);
212 
213 void SetLightModelParameters(GLES1State *state, GLenum pname, const GLfloat *params);
214 void GetLightModelParameters(const GLES1State *state, GLenum pname, GLfloat *params);
215 bool IsLightModelTwoSided(const GLES1State *state);
216 
217 void SetMaterialParameters(GLES1State *state,
218                            GLenum face,
219                            MaterialParameter pname,
220                            const GLfloat *params);
221 void GetMaterialParameters(const GLES1State *state,
222                            GLenum face,
223                            MaterialParameter pname,
224                            GLfloat *params);
225 
226 unsigned int GetLightModelParameterCount(GLenum pname);
227 unsigned int GetLightParameterCount(LightParameter pname);
228 unsigned int GetMaterialParameterCount(MaterialParameter pname);
229 
230 void SetFogParameters(GLES1State *state, GLenum pname, const GLfloat *params);
231 void GetFogParameters(const GLES1State *state, GLenum pname, GLfloat *params);
232 unsigned int GetFogParameterCount(GLenum pname);
233 
234 unsigned int GetTextureEnvParameterCount(TextureEnvParameter pname);
235 
236 void ConvertTextureEnvFromInt(TextureEnvParameter pname, const GLint *input, GLfloat *output);
237 void ConvertTextureEnvFromFixed(TextureEnvParameter pname, const GLfixed *input, GLfloat *output);
238 void ConvertTextureEnvToInt(TextureEnvParameter pname, const GLfloat *input, GLint *output);
239 void ConvertTextureEnvToFixed(TextureEnvParameter pname, const GLfloat *input, GLfixed *output);
240 
241 void SetTextureEnv(unsigned int unit,
242                    GLES1State *state,
243                    TextureEnvTarget target,
244                    TextureEnvParameter pname,
245                    const GLfloat *params);
246 void GetTextureEnv(unsigned int unit,
247                    const GLES1State *state,
248                    TextureEnvTarget target,
249                    TextureEnvParameter pname,
250                    GLfloat *params);
251 
252 unsigned int GetPointParameterCount(PointParameter pname);
253 
254 void SetPointParameter(GLES1State *state, PointParameter pname, const GLfloat *params);
255 void GetPointParameter(const GLES1State *state, PointParameter pname, GLfloat *params);
256 
257 void SetPointSize(GLES1State *state, GLfloat size);
258 void GetPointSize(const GLES1State *state, GLfloat *sizeOut);
259 
260 unsigned int GetTexParameterCount(GLenum pname);
261 
262 bool GetQueryParameterInfo(const State &glState,
263                            GLenum pname,
264                            GLenum *type,
265                            unsigned int *numParams);
266 
267 bool GetIndexedQueryParameterInfo(const State &glState,
268                                   GLenum target,
269                                   GLenum *type,
270                                   unsigned int *numParams);
271 
272 void QueryProgramPipelineiv(const Context *context,
273                             ProgramPipeline *programPipeline,
274                             GLenum pname,
275                             GLint *params);
276 }  // namespace gl
277 
278 namespace egl
279 {
280 struct Config;
281 class Display;
282 class Surface;
283 class Sync;
284 
285 void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value);
286 
287 void QueryContextAttrib(const gl::Context *context, EGLint attribute, EGLint *value);
288 
289 egl::Error QuerySurfaceAttrib(const Display *display,
290                               const gl::Context *context,
291                               Surface *surface,
292                               EGLint attribute,
293                               EGLint *value);
294 egl::Error SetSurfaceAttrib(Surface *surface, EGLint attribute, EGLint value);
295 Error GetSyncAttrib(Display *display, SyncID sync, EGLint attribute, EGLint *value);
296 egl::Error QuerySurfaceAttrib64KHR(const Display *display,
297                                    const gl::Context *context,
298                                    Surface *surface,
299                                    EGLint attribute,
300                                    EGLAttribKHR *value);
301 
302 }  // namespace egl
303 
304 #endif  // LIBANGLE_QUERYUTILS_H_
305