• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, const 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 TextureCaps &format, GLenum pname, GLsizei bufSize, GLint *params);
121 
122 void QueryFramebufferParameteriv(const Framebuffer *framebuffer, GLenum pname, GLint *params);
123 
124 angle::Result QuerySynciv(const Context *context,
125                           const Sync *sync,
126                           GLenum pname,
127                           GLsizei bufSize,
128                           GLsizei *length,
129                           GLint *values);
130 
131 void SetTexParameterf(Context *context, Texture *texture, GLenum pname, GLfloat param);
132 void SetTexParameterfv(Context *context, Texture *texture, GLenum pname, const GLfloat *params);
133 void SetTexParameteri(Context *context, Texture *texture, GLenum pname, GLint param);
134 void SetTexParameteriv(Context *context, Texture *texture, GLenum pname, const GLint *params);
135 void SetTexParameterIiv(Context *context, Texture *texture, GLenum pname, const GLint *params);
136 void SetTexParameterIuiv(Context *context, Texture *texture, GLenum pname, const GLuint *params);
137 void SetTexParameterx(Context *context, Texture *texture, GLenum pname, GLfixed param);
138 void SetTexParameterxv(Context *context, Texture *texture, GLenum pname, const GLfixed *params);
139 
140 void SetSamplerParameterf(Context *context, Sampler *sampler, GLenum pname, GLfloat param);
141 void SetSamplerParameterfv(Context *context, Sampler *sampler, GLenum pname, const GLfloat *params);
142 void SetSamplerParameteri(Context *context, Sampler *sampler, GLenum pname, GLint param);
143 void SetSamplerParameteriv(Context *context, Sampler *sampler, GLenum pname, const GLint *params);
144 void SetSamplerParameterIiv(Context *context, Sampler *sampler, GLenum pname, const GLint *params);
145 void SetSamplerParameterIuiv(Context *context,
146                              Sampler *sampler,
147                              GLenum pname,
148                              const GLuint *params);
149 
150 void SetFramebufferParameteri(const Context *context,
151                               Framebuffer *framebuffer,
152                               GLenum pname,
153                               GLint param);
154 
155 void SetProgramParameteri(Program *program, GLenum pname, GLint value);
156 
157 GLint GetUniformResourceProperty(const Program *program, GLuint index, const GLenum prop);
158 
159 GLuint QueryProgramResourceIndex(const Program *program,
160                                  GLenum programInterface,
161                                  const GLchar *name);
162 
163 void QueryProgramResourceName(const Context *context,
164                               const Program *program,
165                               GLenum programInterface,
166                               GLuint index,
167                               GLsizei bufSize,
168                               GLsizei *length,
169                               GLchar *name);
170 
171 GLint QueryProgramResourceLocation(const Program *program,
172                                    GLenum programInterface,
173                                    const GLchar *name);
174 void QueryProgramResourceiv(const Program *program,
175                             GLenum programInterface,
176                             UniformBlockIndex index,
177                             GLsizei propCount,
178                             const GLenum *props,
179                             GLsizei bufSize,
180                             GLsizei *length,
181                             GLint *params);
182 
183 void QueryProgramInterfaceiv(const Program *program,
184                              GLenum programInterface,
185                              GLenum pname,
186                              GLint *params);
187 
188 angle::Result SetMemoryObjectParameteriv(const Context *context,
189                                          MemoryObject *memoryObject,
190                                          GLenum pname,
191                                          const GLint *params);
192 void QueryMemoryObjectParameteriv(const MemoryObject *memoryObject, GLenum pname, GLint *params);
193 
194 // GLES1 emulation
195 
196 ClientVertexArrayType ParamToVertexArrayType(GLenum param);
197 
198 void SetLightParameters(GLES1State *state,
199                         GLenum light,
200                         LightParameter pname,
201                         const GLfloat *params);
202 void GetLightParameters(const GLES1State *state,
203                         GLenum light,
204                         LightParameter pname,
205                         GLfloat *params);
206 
207 void SetLightModelParameters(GLES1State *state, GLenum pname, const GLfloat *params);
208 void GetLightModelParameters(const GLES1State *state, GLenum pname, GLfloat *params);
209 bool IsLightModelTwoSided(const GLES1State *state);
210 
211 void SetMaterialParameters(GLES1State *state,
212                            GLenum face,
213                            MaterialParameter pname,
214                            const GLfloat *params);
215 void GetMaterialParameters(const GLES1State *state,
216                            GLenum face,
217                            MaterialParameter pname,
218                            GLfloat *params);
219 
220 unsigned int GetLightModelParameterCount(GLenum pname);
221 unsigned int GetLightParameterCount(LightParameter pname);
222 unsigned int GetMaterialParameterCount(MaterialParameter pname);
223 
224 void SetFogParameters(GLES1State *state, GLenum pname, const GLfloat *params);
225 void GetFogParameters(const GLES1State *state, GLenum pname, GLfloat *params);
226 unsigned int GetFogParameterCount(GLenum pname);
227 
228 unsigned int GetTextureEnvParameterCount(TextureEnvParameter pname);
229 
230 void ConvertTextureEnvFromInt(TextureEnvParameter pname, const GLint *input, GLfloat *output);
231 void ConvertTextureEnvFromFixed(TextureEnvParameter pname, const GLfixed *input, GLfloat *output);
232 void ConvertTextureEnvToInt(TextureEnvParameter pname, const GLfloat *input, GLint *output);
233 void ConvertTextureEnvToFixed(TextureEnvParameter pname, const GLfloat *input, GLfixed *output);
234 
235 void SetTextureEnv(unsigned int unit,
236                    GLES1State *state,
237                    TextureEnvTarget target,
238                    TextureEnvParameter pname,
239                    const GLfloat *params);
240 void GetTextureEnv(unsigned int unit,
241                    const GLES1State *state,
242                    TextureEnvTarget target,
243                    TextureEnvParameter pname,
244                    GLfloat *params);
245 
246 unsigned int GetPointParameterCount(PointParameter pname);
247 
248 void SetPointParameter(GLES1State *state, PointParameter pname, const GLfloat *params);
249 void GetPointParameter(const GLES1State *state, PointParameter pname, GLfloat *params);
250 
251 void SetPointSize(GLES1State *state, GLfloat size);
252 void GetPointSize(const GLES1State *state, GLfloat *sizeOut);
253 
254 unsigned int GetTexParameterCount(GLenum pname);
255 
256 bool GetQueryParameterInfo(const State &glState,
257                            GLenum pname,
258                            GLenum *type,
259                            unsigned int *numParams);
260 
261 void QueryProgramPipelineiv(const Context *context,
262                             ProgramPipeline *programPipeline,
263                             GLenum pname,
264                             GLint *params);
265 }  // namespace gl
266 
267 namespace egl
268 {
269 struct Config;
270 class Display;
271 class Surface;
272 class Sync;
273 
274 void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value);
275 
276 void QueryContextAttrib(const gl::Context *context, EGLint attribute, EGLint *value);
277 
278 egl::Error QuerySurfaceAttrib(const Display *display,
279                               const gl::Context *context,
280                               Surface *surface,
281                               EGLint attribute,
282                               EGLint *value);
283 egl::Error SetSurfaceAttrib(Surface *surface, EGLint attribute, EGLint value);
284 Error GetSyncAttrib(Display *display, SyncID sync, EGLint attribute, EGLint *value);
285 egl::Error QuerySurfaceAttrib64KHR(const Display *display,
286                                    const gl::Context *context,
287                                    const Surface *surface,
288                                    EGLint attribute,
289                                    EGLAttribKHR *value);
290 
291 }  // namespace egl
292 
293 #endif  // LIBANGLE_QUERYUTILS_H_
294