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 Texture; 31 struct TextureCaps; 32 struct UniformBlock; 33 struct VertexAttribute; 34 class VertexBinding; 35 struct VertexAttribCurrentValueData; 36 37 void QueryFramebufferAttachmentParameteriv(const Context *context, 38 const Framebuffer *framebuffer, 39 GLenum attachment, 40 GLenum pname, 41 GLint *params); 42 void QueryBufferParameteriv(const Buffer *buffer, GLenum pname, GLint *params); 43 void QueryBufferParameteri64v(const Buffer *buffer, GLenum pname, GLint64 *params); 44 void QueryBufferPointerv(const Buffer *buffer, GLenum pname, void **params); 45 void QueryProgramiv(Context *context, const Program *program, GLenum pname, GLint *params); 46 void QueryRenderbufferiv(const Context *context, 47 const Renderbuffer *renderbuffer, 48 GLenum pname, 49 GLint *params); 50 void QueryShaderiv(const Context *context, Shader *shader, GLenum pname, GLint *params); 51 void QueryTexLevelParameterfv(const Texture *texture, 52 TextureTarget target, 53 GLint level, 54 GLenum pname, 55 GLfloat *params); 56 void QueryTexLevelParameteriv(const Texture *texture, 57 TextureTarget target, 58 GLint level, 59 GLenum pname, 60 GLint *params); 61 void QueryTexParameterfv(const Texture *texture, GLenum pname, GLfloat *params); 62 void QueryTexParameteriv(const Texture *texture, GLenum pname, GLint *params); 63 void QueryTexParameterIiv(const Texture *texture, GLenum pname, GLint *params); 64 void QueryTexParameterIuiv(const Texture *texture, GLenum pname, GLuint *params); 65 void QuerySamplerParameterfv(const Sampler *sampler, GLenum pname, GLfloat *params); 66 void QuerySamplerParameteriv(const Sampler *sampler, GLenum pname, GLint *params); 67 void QuerySamplerParameterIiv(const Sampler *sampler, GLenum pname, GLint *params); 68 void QuerySamplerParameterIuiv(const Sampler *sampler, GLenum pname, GLuint *params); 69 70 // Warning: you should ensure binding really matches attrib.bindingIndex before using the following 71 // functions. 72 void QueryVertexAttribfv(const VertexAttribute &attrib, 73 const VertexBinding &binding, 74 const VertexAttribCurrentValueData ¤tValueData, 75 GLenum pname, 76 GLfloat *params); 77 78 void QueryVertexAttribiv(const VertexAttribute &attrib, 79 const VertexBinding &binding, 80 const VertexAttribCurrentValueData ¤tValueData, 81 GLenum pname, 82 GLint *params); 83 84 void QueryVertexAttribPointerv(const VertexAttribute &attrib, GLenum pname, void **pointer); 85 86 void QueryVertexAttribIiv(const VertexAttribute &attrib, 87 const VertexBinding &binding, 88 const VertexAttribCurrentValueData ¤tValueData, 89 GLenum pname, 90 GLint *params); 91 92 void QueryVertexAttribIuiv(const VertexAttribute &attrib, 93 const VertexBinding &binding, 94 const VertexAttribCurrentValueData ¤tValueData, 95 GLenum pname, 96 GLuint *params); 97 98 void QueryActiveUniformBlockiv(const Program *program, 99 GLuint uniformBlockIndex, 100 GLenum pname, 101 GLint *params); 102 103 void QueryInternalFormativ(const TextureCaps &format, GLenum pname, GLsizei bufSize, GLint *params); 104 105 void QueryFramebufferParameteriv(const Framebuffer *framebuffer, GLenum pname, GLint *params); 106 107 angle::Result QuerySynciv(const Context *context, 108 const Sync *sync, 109 GLenum pname, 110 GLsizei bufSize, 111 GLsizei *length, 112 GLint *values); 113 114 void SetTexParameterf(Context *context, Texture *texture, GLenum pname, GLfloat param); 115 void SetTexParameterfv(Context *context, Texture *texture, GLenum pname, const GLfloat *params); 116 void SetTexParameteri(Context *context, Texture *texture, GLenum pname, GLint param); 117 void SetTexParameteriv(Context *context, Texture *texture, GLenum pname, const GLint *params); 118 void SetTexParameterIiv(Context *context, Texture *texture, GLenum pname, const GLint *params); 119 void SetTexParameterIuiv(Context *context, Texture *texture, GLenum pname, const GLuint *params); 120 121 void SetSamplerParameterf(Context *context, Sampler *sampler, GLenum pname, GLfloat param); 122 void SetSamplerParameterfv(Context *context, Sampler *sampler, GLenum pname, const GLfloat *params); 123 void SetSamplerParameteri(Context *context, Sampler *sampler, GLenum pname, GLint param); 124 void SetSamplerParameteriv(Context *context, Sampler *sampler, GLenum pname, const GLint *params); 125 void SetSamplerParameterIiv(Context *context, Sampler *sampler, GLenum pname, const GLint *params); 126 void SetSamplerParameterIuiv(Context *context, 127 Sampler *sampler, 128 GLenum pname, 129 const GLuint *params); 130 131 void SetFramebufferParameteri(const Context *context, 132 Framebuffer *framebuffer, 133 GLenum pname, 134 GLint param); 135 136 void SetProgramParameteri(Program *program, GLenum pname, GLint value); 137 138 GLint GetUniformResourceProperty(const Program *program, GLuint index, const GLenum prop); 139 140 GLuint QueryProgramResourceIndex(const Program *program, 141 GLenum programInterface, 142 const GLchar *name); 143 144 void QueryProgramResourceName(const Program *program, 145 GLenum programInterface, 146 GLuint index, 147 GLsizei bufSize, 148 GLsizei *length, 149 GLchar *name); 150 151 GLint QueryProgramResourceLocation(const Program *program, 152 GLenum programInterface, 153 const GLchar *name); 154 void QueryProgramResourceiv(const Program *program, 155 GLenum programInterface, 156 GLuint index, 157 GLsizei propCount, 158 const GLenum *props, 159 GLsizei bufSize, 160 GLsizei *length, 161 GLint *params); 162 163 void QueryProgramInterfaceiv(const Program *program, 164 GLenum programInterface, 165 GLenum pname, 166 GLint *params); 167 // GLES1 emulation 168 169 ClientVertexArrayType ParamToVertexArrayType(GLenum param); 170 171 void SetLightParameters(GLES1State *state, 172 GLenum light, 173 LightParameter pname, 174 const GLfloat *params); 175 void GetLightParameters(const GLES1State *state, 176 GLenum light, 177 LightParameter pname, 178 GLfloat *params); 179 180 void SetLightModelParameters(GLES1State *state, GLenum pname, const GLfloat *params); 181 void GetLightModelParameters(const GLES1State *state, GLenum pname, GLfloat *params); 182 bool IsLightModelTwoSided(const GLES1State *state); 183 184 void SetMaterialParameters(GLES1State *state, 185 GLenum face, 186 MaterialParameter pname, 187 const GLfloat *params); 188 void GetMaterialParameters(const GLES1State *state, 189 GLenum face, 190 MaterialParameter pname, 191 GLfloat *params); 192 193 unsigned int GetLightModelParameterCount(GLenum pname); 194 unsigned int GetLightParameterCount(LightParameter pname); 195 unsigned int GetMaterialParameterCount(MaterialParameter pname); 196 197 void SetFogParameters(GLES1State *state, GLenum pname, const GLfloat *params); 198 void GetFogParameters(const GLES1State *state, GLenum pname, GLfloat *params); 199 unsigned int GetFogParameterCount(GLenum pname); 200 201 unsigned int GetTextureEnvParameterCount(TextureEnvParameter pname); 202 203 void ConvertTextureEnvFromInt(TextureEnvParameter pname, const GLint *input, GLfloat *output); 204 void ConvertTextureEnvFromFixed(TextureEnvParameter pname, const GLfixed *input, GLfloat *output); 205 void ConvertTextureEnvToInt(TextureEnvParameter pname, const GLfloat *input, GLint *output); 206 void ConvertTextureEnvToFixed(TextureEnvParameter pname, const GLfloat *input, GLfixed *output); 207 208 void SetTextureEnv(unsigned int unit, 209 GLES1State *state, 210 TextureEnvTarget target, 211 TextureEnvParameter pname, 212 const GLfloat *params); 213 void GetTextureEnv(unsigned int unit, 214 const GLES1State *state, 215 TextureEnvTarget target, 216 TextureEnvParameter pname, 217 GLfloat *params); 218 219 unsigned int GetPointParameterCount(PointParameter pname); 220 221 void SetPointParameter(GLES1State *state, PointParameter pname, const GLfloat *params); 222 void GetPointParameter(const GLES1State *state, PointParameter pname, GLfloat *params); 223 224 void SetPointSize(GLES1State *state, GLfloat size); 225 void GetPointSize(GLES1State *state, GLfloat *sizeOut); 226 227 unsigned int GetTexParameterCount(GLenum pname); 228 229 } // namespace gl 230 231 namespace egl 232 { 233 struct Config; 234 class Display; 235 class Surface; 236 class Sync; 237 238 void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value); 239 240 void QueryContextAttrib(const gl::Context *context, EGLint attribute, EGLint *value); 241 242 void QuerySurfaceAttrib(const Surface *surface, EGLint attribute, EGLint *value); 243 void SetSurfaceAttrib(Surface *surface, EGLint attribute, EGLint value); 244 Error GetSyncAttrib(Display *display, Sync *sync, EGLint attribute, EGLint *value); 245 246 } // namespace egl 247 248 #endif // LIBANGLE_QUERYUTILS_H_ 249