1 //
2 // Copyright (c) 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/angleutils.h"
14 
15 #include <EGL/egl.h>
16 
17 namespace gl
18 {
19 class Buffer;
20 class Context;
21 class Error;
22 class Sync;
23 class Framebuffer;
24 class Program;
25 class Renderbuffer;
26 class Sampler;
27 class Shader;
28 class Texture;
29 struct TextureCaps;
30 struct UniformBlock;
31 struct VertexAttribute;
32 class VertexBinding;
33 struct VertexAttribCurrentValueData;
34 
35 void QueryFramebufferAttachmentParameteriv(const Framebuffer *framebuffer,
36                                            GLenum attachment,
37                                            GLenum pname,
38                                            GLint *params);
39 void QueryBufferParameteriv(const Buffer *buffer, GLenum pname, GLint *params);
40 void QueryBufferParameteri64v(const Buffer *buffer, GLenum pname, GLint64 *params);
41 void QueryBufferPointerv(const Buffer *buffer, GLenum pname, void **params);
42 void QueryProgramiv(const Context *context, const Program *program, GLenum pname, GLint *params);
43 void QueryRenderbufferiv(const Context *context,
44                          const Renderbuffer *renderbuffer,
45                          GLenum pname,
46                          GLint *params);
47 void QueryShaderiv(const Context *context, Shader *shader, GLenum pname, GLint *params);
48 void QueryTexLevelParameterfv(const Texture *texture,
49                               GLenum target,
50                               GLint level,
51                               GLenum pname,
52                               GLfloat *params);
53 void QueryTexLevelParameteriv(const Texture *texture,
54                               GLenum target,
55                               GLint level,
56                               GLenum pname,
57                               GLint *params);
58 void QueryTexParameterfv(const Texture *texture, GLenum pname, GLfloat *params);
59 void QueryTexParameteriv(const Texture *texture, GLenum pname, GLint *params);
60 void QuerySamplerParameterfv(const Sampler *sampler, GLenum pname, GLfloat *params);
61 void QuerySamplerParameteriv(const Sampler *sampler, GLenum pname, GLint *params);
62 
63 // Warning: you should ensure binding really matches attrib.bindingIndex before using the following
64 // functions.
65 void QueryVertexAttribfv(const VertexAttribute &attrib,
66                          const VertexBinding &binding,
67                          const VertexAttribCurrentValueData &currentValueData,
68                          GLenum pname,
69                          GLfloat *params);
70 
71 void QueryVertexAttribiv(const VertexAttribute &attrib,
72                          const VertexBinding &binding,
73                          const VertexAttribCurrentValueData &currentValueData,
74                          GLenum pname,
75                          GLint *params);
76 
77 void QueryVertexAttribPointerv(const VertexAttribute &attrib, GLenum pname, void **pointer);
78 
79 void QueryVertexAttribIiv(const VertexAttribute &attrib,
80                           const VertexBinding &binding,
81                           const VertexAttribCurrentValueData &currentValueData,
82                           GLenum pname,
83                           GLint *params);
84 
85 void QueryVertexAttribIuiv(const VertexAttribute &attrib,
86                            const VertexBinding &binding,
87                            const VertexAttribCurrentValueData &currentValueData,
88                            GLenum pname,
89                            GLuint *params);
90 
91 void QueryActiveUniformBlockiv(const Program *program,
92                                GLuint uniformBlockIndex,
93                                GLenum pname,
94                                GLint *params);
95 
96 void QueryInternalFormativ(const TextureCaps &format, GLenum pname, GLsizei bufSize, GLint *params);
97 
98 void QueryFramebufferParameteriv(const Framebuffer *framebuffer, GLenum pname, GLint *params);
99 
100 Error QuerySynciv(const Sync *sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
101 
102 void SetTexParameterf(Context *context, Texture *texture, GLenum pname, GLfloat param);
103 void SetTexParameterfv(Context *context, Texture *texture, GLenum pname, const GLfloat *params);
104 void SetTexParameteri(Context *context, Texture *texture, GLenum pname, GLint param);
105 void SetTexParameteriv(Context *context, Texture *texture, GLenum pname, const GLint *params);
106 
107 void SetSamplerParameterf(Sampler *sampler, GLenum pname, GLfloat param);
108 void SetSamplerParameterfv(Sampler *sampler, GLenum pname, const GLfloat *params);
109 void SetSamplerParameteri(Sampler *sampler, GLenum pname, GLint param);
110 void SetSamplerParameteriv(Sampler *sampler, GLenum pname, const GLint *params);
111 
112 void SetFramebufferParameteri(Framebuffer *framebuffer, GLenum pname, GLint param);
113 
114 void SetProgramParameteri(Program *program, GLenum pname, GLint value);
115 
116 GLint GetUniformResourceProperty(const Program *program, GLuint index, const GLenum prop);
117 
118 GLuint QueryProgramResourceIndex(const Program *program,
119                                  GLenum programInterface,
120                                  const GLchar *name);
121 
122 void QueryProgramResourceName(const Program *program,
123                               GLenum programInterface,
124                               GLuint index,
125                               GLsizei bufSize,
126                               GLsizei *length,
127                               GLchar *name);
128 
129 GLint QueryProgramResourceLocation(const Program *program,
130                                    GLenum programInterface,
131                                    const GLchar *name);
132 void QueryProgramResourceiv(const Program *program,
133                             GLenum programInterface,
134                             GLuint index,
135                             GLsizei propCount,
136                             const GLenum *props,
137                             GLsizei bufSize,
138                             GLsizei *length,
139                             GLint *params);
140 
141 void QueryProgramInterfaceiv(const Program *program,
142                              GLenum programInterface,
143                              GLenum pname,
144                              GLint *params);
145 
146 }  // namespace gl
147 
148 namespace egl
149 {
150 struct Config;
151 class Surface;
152 
153 void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value);
154 
155 void QueryContextAttrib(const gl::Context *context, EGLint attribute, EGLint *value);
156 
157 void QuerySurfaceAttrib(const Surface *surface, EGLint attribute, EGLint *value);
158 void SetSurfaceAttrib(Surface *surface, EGLint attribute, EGLint value);
159 
160 }  // namespace egl
161 
162 #endif  // LIBANGLE_QUERYUTILS_H_
163