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