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 ¤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 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