• 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 Program *program,
164                               GLenum programInterface,
165                               GLuint index,
166                               GLsizei bufSize,
167                               GLsizei *length,
168                               GLchar *name);
169 
170 GLint QueryProgramResourceLocation(const Program *program,
171                                    GLenum programInterface,
172                                    const GLchar *name);
173 void QueryProgramResourceiv(const Program *program,
174                             GLenum programInterface,
175                             UniformBlockIndex index,
176                             GLsizei propCount,
177                             const GLenum *props,
178                             GLsizei bufSize,
179                             GLsizei *length,
180                             GLint *params);
181 
182 void QueryProgramInterfaceiv(const Program *program,
183                              GLenum programInterface,
184                              GLenum pname,
185                              GLint *params);
186 
187 angle::Result SetMemoryObjectParameteriv(const Context *context,
188                                          MemoryObject *memoryObject,
189                                          GLenum pname,
190                                          const GLint *params);
191 void QueryMemoryObjectParameteriv(const MemoryObject *memoryObject, GLenum pname, GLint *params);
192 
193 // GLES1 emulation
194 
195 ClientVertexArrayType ParamToVertexArrayType(GLenum param);
196 
197 void SetLightParameters(GLES1State *state,
198                         GLenum light,
199                         LightParameter pname,
200                         const GLfloat *params);
201 void GetLightParameters(const GLES1State *state,
202                         GLenum light,
203                         LightParameter pname,
204                         GLfloat *params);
205 
206 void SetLightModelParameters(GLES1State *state, GLenum pname, const GLfloat *params);
207 void GetLightModelParameters(const GLES1State *state, GLenum pname, GLfloat *params);
208 bool IsLightModelTwoSided(const GLES1State *state);
209 
210 void SetMaterialParameters(GLES1State *state,
211                            GLenum face,
212                            MaterialParameter pname,
213                            const GLfloat *params);
214 void GetMaterialParameters(const GLES1State *state,
215                            GLenum face,
216                            MaterialParameter pname,
217                            GLfloat *params);
218 
219 unsigned int GetLightModelParameterCount(GLenum pname);
220 unsigned int GetLightParameterCount(LightParameter pname);
221 unsigned int GetMaterialParameterCount(MaterialParameter pname);
222 
223 void SetFogParameters(GLES1State *state, GLenum pname, const GLfloat *params);
224 void GetFogParameters(const GLES1State *state, GLenum pname, GLfloat *params);
225 unsigned int GetFogParameterCount(GLenum pname);
226 
227 unsigned int GetTextureEnvParameterCount(TextureEnvParameter pname);
228 
229 void ConvertTextureEnvFromInt(TextureEnvParameter pname, const GLint *input, GLfloat *output);
230 void ConvertTextureEnvFromFixed(TextureEnvParameter pname, const GLfixed *input, GLfloat *output);
231 void ConvertTextureEnvToInt(TextureEnvParameter pname, const GLfloat *input, GLint *output);
232 void ConvertTextureEnvToFixed(TextureEnvParameter pname, const GLfloat *input, GLfixed *output);
233 
234 void SetTextureEnv(unsigned int unit,
235                    GLES1State *state,
236                    TextureEnvTarget target,
237                    TextureEnvParameter pname,
238                    const GLfloat *params);
239 void GetTextureEnv(unsigned int unit,
240                    const GLES1State *state,
241                    TextureEnvTarget target,
242                    TextureEnvParameter pname,
243                    GLfloat *params);
244 
245 unsigned int GetPointParameterCount(PointParameter pname);
246 
247 void SetPointParameter(GLES1State *state, PointParameter pname, const GLfloat *params);
248 void GetPointParameter(const GLES1State *state, PointParameter pname, GLfloat *params);
249 
250 void SetPointSize(GLES1State *state, GLfloat size);
251 void GetPointSize(const GLES1State *state, GLfloat *sizeOut);
252 
253 unsigned int GetTexParameterCount(GLenum pname);
254 
255 bool GetQueryParameterInfo(const State &glState,
256                            GLenum pname,
257                            GLenum *type,
258                            unsigned int *numParams);
259 
260 void QueryProgramPipelineiv(const Context *context,
261                             ProgramPipeline *programPipeline,
262                             GLenum pname,
263                             GLint *params);
264 }  // namespace gl
265 
266 namespace egl
267 {
268 struct Config;
269 class Display;
270 class Surface;
271 class Sync;
272 
273 void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value);
274 
275 void QueryContextAttrib(const gl::Context *context, EGLint attribute, EGLint *value);
276 
277 egl::Error QuerySurfaceAttrib(const Display *display,
278                               const gl::Context *context,
279                               const Surface *surface,
280                               EGLint attribute,
281                               EGLint *value);
282 void SetSurfaceAttrib(Surface *surface, EGLint attribute, EGLint value);
283 Error GetSyncAttrib(Display *display, Sync *sync, EGLint attribute, EGLint *value);
284 
285 }  // namespace egl
286 
287 #endif  // LIBANGLE_QUERYUTILS_H_
288