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 ¤tValueData, 68 GLenum pname, 69 GLfloat *params); 70 71 void QueryVertexAttribiv(const VertexAttribute &attrib, 72 const VertexBinding &binding, 73 const VertexAttribCurrentValueData ¤tValueData, 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 ¤tValueData, 82 GLenum pname, 83 GLint *params); 84 85 void QueryVertexAttribIuiv(const VertexAttribute &attrib, 86 const VertexBinding &binding, 87 const VertexAttribCurrentValueData ¤tValueData, 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