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 ¤tValueData, 92 GLenum pname, 93 GLfloat *params); 94 95 void QueryVertexAttribiv(const VertexAttribute &attrib, 96 const VertexBinding &binding, 97 const VertexAttribCurrentValueData ¤tValueData, 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 ¤tValueData, 106 GLenum pname, 107 GLint *params); 108 109 void QueryVertexAttribIuiv(const VertexAttribute &attrib, 110 const VertexBinding &binding, 111 const VertexAttribCurrentValueData ¤tValueData, 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