| // |
| // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| |
| // validationES.h: Validation functions for generic OpenGL ES entry point parameters |
| |
| #ifndef LIBANGLE_VALIDATION_ES_H_ |
| #define LIBANGLE_VALIDATION_ES_H_ |
| |
| #include "common/mathutil.h" |
| |
| #include <GLES2/gl2.h> |
| #include <GLES3/gl3.h> |
| #include <GLES3/gl31.h> |
| |
| namespace egl |
| { |
| class Display; |
| class Image; |
| } |
| |
| namespace gl |
| { |
| class Context; |
| struct Format; |
| class Program; |
| class Shader; |
| class ValidationContext; |
| |
| bool ValidTextureTarget(const ValidationContext *context, GLenum target); |
| bool ValidTexture2DTarget(const ValidationContext *context, GLenum target); |
| bool ValidTexture3DTarget(const ValidationContext *context, GLenum target); |
| bool ValidTextureExternalTarget(const ValidationContext *context, GLenum target); |
| bool ValidTexture2DDestinationTarget(const ValidationContext *context, GLenum target); |
| bool ValidTexture3DDestinationTarget(const ValidationContext *context, GLenum target); |
| bool ValidTexLevelDestinationTarget(const ValidationContext *context, GLenum target); |
| bool ValidFramebufferTarget(GLenum target); |
| bool ValidBufferTarget(const ValidationContext *context, GLenum target); |
| bool ValidBufferParameter(const ValidationContext *context, GLenum pname, GLsizei *numParams); |
| bool ValidMipLevel(const ValidationContext *context, GLenum target, GLint level); |
| bool ValidImageSizeParameters(const ValidationContext *context, |
| GLenum target, |
| GLint level, |
| GLsizei width, |
| GLsizei height, |
| GLsizei depth, |
| bool isSubImage); |
| bool ValidCompressedImageSize(const ValidationContext *context, |
| GLenum internalFormat, |
| GLsizei width, |
| GLsizei height); |
| bool ValidImageDataSize(ValidationContext *context, |
| GLenum textureTarget, |
| GLsizei width, |
| GLsizei height, |
| GLsizei depth, |
| GLenum internalFormat, |
| GLenum type, |
| const GLvoid *pixels, |
| GLsizei imageSize); |
| |
| bool ValidQueryType(const Context *context, GLenum queryType); |
| |
| // Returns valid program if id is a valid program name |
| // Errors INVALID_OPERATION if valid shader is given and returns NULL |
| // Errors INVALID_VALUE otherwise and returns NULL |
| Program *GetValidProgram(ValidationContext *context, GLuint id); |
| |
| // Returns valid shader if id is a valid shader name |
| // Errors INVALID_OPERATION if valid program is given and returns NULL |
| // Errors INVALID_VALUE otherwise and returns NULL |
| Shader *GetValidShader(ValidationContext *context, GLuint id); |
| |
| bool ValidateAttachmentTarget(Context *context, GLenum attachment); |
| bool ValidateRenderbufferStorageParametersBase(Context *context, |
| GLenum target, |
| GLsizei samples, |
| GLenum internalformat, |
| GLsizei width, |
| GLsizei height); |
| bool ValidateRenderbufferStorageParametersANGLE(Context *context, |
| GLenum target, |
| GLsizei samples, |
| GLenum internalformat, |
| GLsizei width, |
| GLsizei height); |
| |
| bool ValidateFramebufferRenderbufferParameters(Context *context, |
| GLenum target, |
| GLenum attachment, |
| GLenum renderbuffertarget, |
| GLuint renderbuffer); |
| |
| bool ValidateBlitFramebufferParameters(ValidationContext *context, |
| GLint srcX0, |
| GLint srcY0, |
| GLint srcX1, |
| GLint srcY1, |
| GLint dstX0, |
| GLint dstY0, |
| GLint dstX1, |
| GLint dstY1, |
| GLbitfield mask, |
| GLenum filter); |
| |
| bool ValidateReadPixels(ValidationContext *context, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height, |
| GLenum format, |
| GLenum type, |
| GLvoid *pixels); |
| bool ValidateReadPixelsRobustANGLE(ValidationContext *context, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height, |
| GLenum format, |
| GLenum type, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLvoid *pixels); |
| bool ValidateReadnPixelsEXT(Context *context, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height, |
| GLenum format, |
| GLenum type, |
| GLsizei bufSize, |
| GLvoid *pixels); |
| bool ValidateReadnPixelsRobustANGLE(ValidationContext *context, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height, |
| GLenum format, |
| GLenum type, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLvoid *data); |
| |
| bool ValidateGenQueriesEXT(gl::Context *context, GLsizei n); |
| bool ValidateDeleteQueriesEXT(gl::Context *context, GLsizei n); |
| bool ValidateBeginQueryBase(Context *context, GLenum target, GLuint id); |
| bool ValidateBeginQueryEXT(Context *context, GLenum target, GLuint id); |
| bool ValidateEndQueryBase(Context *context, GLenum target); |
| bool ValidateEndQueryEXT(Context *context, GLenum target); |
| bool ValidateQueryCounterEXT(Context *context, GLuint id, GLenum target); |
| bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsizei *numParams); |
| bool ValidateGetQueryivEXT(Context *context, GLenum target, GLenum pname, GLint *params); |
| bool ValidateGetQueryivRobustANGLE(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| bool ValidateGetQueryObjectValueBase(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei *numParams); |
| bool ValidateGetQueryObjectivEXT(Context *context, GLuint id, GLenum pname, GLint *params); |
| bool ValidateGetQueryObjectivRobustANGLE(Context *context, |
| GLuint id, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| bool ValidateGetQueryObjectuivEXT(Context *context, GLuint id, GLenum pname, GLuint *params); |
| bool ValidateGetQueryObjectuivRobustANGLE(Context *context, |
| GLuint id, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLuint *params); |
| bool ValidateGetQueryObjecti64vEXT(Context *context, GLuint id, GLenum pname, GLint64 *params); |
| bool ValidateGetQueryObjecti64vRobustANGLE(Context *context, |
| GLuint id, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint64 *params); |
| bool ValidateGetQueryObjectui64vEXT(Context *context, GLuint id, GLenum pname, GLuint64 *params); |
| bool ValidateGetQueryObjectui64vRobustANGLE(Context *context, |
| GLuint id, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLuint64 *params); |
| |
| bool ValidateProgramUniform(Context *context, |
| GLenum uniformType, |
| GLuint program, |
| GLint location, |
| GLsizei count); |
| bool ValidateProgramUniform1iv(Context *context, |
| GLuint program, |
| GLint location, |
| GLsizei count, |
| const GLint *value); |
| bool ValidateProgramUniformMatrix(Context *context, |
| GLenum matrixType, |
| GLuint program, |
| GLint location, |
| GLsizei count, |
| GLboolean transpose); |
| |
| bool ValidateUniform(Context *context, GLenum uniformType, GLint location, GLsizei count); |
| bool ValidateUniform1iv(Context *context, GLint location, GLsizei count, const GLint *value); |
| bool ValidateUniformMatrix(Context *context, |
| GLenum matrixType, |
| GLint location, |
| GLsizei count, |
| GLboolean transpose); |
| |
| bool ValidateStateQuery(ValidationContext *context, |
| GLenum pname, |
| GLenum *nativeType, |
| unsigned int *numParams); |
| |
| bool ValidateRobustStateQuery(ValidationContext *context, |
| GLenum pname, |
| GLsizei bufSize, |
| GLenum *nativeType, |
| unsigned int *numParams); |
| |
| bool ValidateCopyTexImageParametersBase(ValidationContext *context, |
| GLenum target, |
| GLint level, |
| GLenum internalformat, |
| bool isSubImage, |
| GLint xoffset, |
| GLint yoffset, |
| GLint zoffset, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height, |
| GLint border, |
| Format *textureFormatOut); |
| |
| bool ValidateDrawBase(ValidationContext *context, GLenum mode, GLsizei count); |
| bool ValidateDrawArrays(ValidationContext *context, |
| GLenum mode, |
| GLint first, |
| GLsizei count, |
| GLsizei primcount); |
| bool ValidateDrawArraysInstanced(Context *context, |
| GLenum mode, |
| GLint first, |
| GLsizei count, |
| GLsizei primcount); |
| bool ValidateDrawArraysInstancedANGLE(Context *context, |
| GLenum mode, |
| GLint first, |
| GLsizei count, |
| GLsizei primcount); |
| |
| bool ValidateDrawElementsBase(ValidationContext *context, GLenum type); |
| bool ValidateDrawElements(ValidationContext *context, |
| GLenum mode, |
| GLsizei count, |
| GLenum type, |
| const GLvoid *indices, |
| GLsizei primcount, |
| IndexRange *indexRangeOut); |
| |
| bool ValidateDrawElementsInstanced(Context *context, |
| GLenum mode, |
| GLsizei count, |
| GLenum type, |
| const GLvoid *indices, |
| GLsizei primcount, |
| IndexRange *indexRangeOut); |
| bool ValidateDrawElementsInstancedANGLE(Context *context, |
| GLenum mode, |
| GLsizei count, |
| GLenum type, |
| const GLvoid *indices, |
| GLsizei primcount, |
| IndexRange *indexRangeOut); |
| |
| bool ValidateFramebufferTextureBase(Context *context, |
| GLenum target, |
| GLenum attachment, |
| GLuint texture, |
| GLint level); |
| bool ValidateFramebufferTexture2D(Context *context, |
| GLenum target, |
| GLenum attachment, |
| GLenum textarget, |
| GLuint texture, |
| GLint level); |
| bool ValidateFramebufferRenderbuffer(Context *context, |
| GLenum target, |
| GLenum attachment, |
| GLenum renderbuffertarget, |
| GLuint renderbuffer); |
| |
| bool ValidateGetUniformBase(Context *context, GLuint program, GLint location); |
| bool ValidateGetUniformfv(Context *context, GLuint program, GLint location, GLfloat *params); |
| bool ValidateGetUniformiv(Context *context, GLuint program, GLint location, GLint *params); |
| bool ValidateGetnUniformfvEXT(Context *context, |
| GLuint program, |
| GLint location, |
| GLsizei bufSize, |
| GLfloat *params); |
| bool ValidateGetnUniformivEXT(Context *context, |
| GLuint program, |
| GLint location, |
| GLsizei bufSize, |
| GLint *params); |
| bool ValidateGetUniformfvRobustANGLE(Context *context, |
| GLuint program, |
| GLint location, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLfloat *params); |
| bool ValidateGetUniformivRobustANGLE(Context *context, |
| GLuint program, |
| GLint location, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| bool ValidateGetUniformuivRobustANGLE(Context *context, |
| GLuint program, |
| GLint location, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLuint *params); |
| |
| bool ValidateDiscardFramebufferBase(Context *context, |
| GLenum target, |
| GLsizei numAttachments, |
| const GLenum *attachments, |
| bool defaultFramebuffer); |
| |
| bool ValidateInsertEventMarkerEXT(Context *context, GLsizei length, const char *marker); |
| bool ValidatePushGroupMarkerEXT(Context *context, GLsizei length, const char *marker); |
| |
| bool ValidateEGLImageTargetTexture2DOES(Context *context, |
| egl::Display *display, |
| GLenum target, |
| egl::Image *image); |
| bool ValidateEGLImageTargetRenderbufferStorageOES(Context *context, |
| egl::Display *display, |
| GLenum target, |
| egl::Image *image); |
| |
| bool ValidateBindVertexArrayBase(Context *context, GLuint array); |
| |
| bool ValidateLinkProgram(Context *context, GLuint program); |
| bool ValidateProgramBinaryBase(Context *context, |
| GLuint program, |
| GLenum binaryFormat, |
| const void *binary, |
| GLint length); |
| bool ValidateGetProgramBinaryBase(Context *context, |
| GLuint program, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLenum *binaryFormat, |
| void *binary); |
| bool ValidateUseProgram(Context *context, GLuint program); |
| |
| bool ValidateCopyTexImage2D(ValidationContext *context, |
| GLenum target, |
| GLint level, |
| GLenum internalformat, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height, |
| GLint border); |
| bool ValidateDrawBuffersBase(ValidationContext *context, GLsizei n, const GLenum *bufs); |
| bool ValidateCopyTexSubImage2D(Context *context, |
| GLenum target, |
| GLint level, |
| GLint xoffset, |
| GLint yoffset, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height); |
| |
| bool ValidateGetBufferPointervBase(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei *length, |
| void **params); |
| bool ValidateUnmapBufferBase(Context *context, GLenum target); |
| bool ValidateMapBufferRangeBase(Context *context, |
| GLenum target, |
| GLintptr offset, |
| GLsizeiptr length, |
| GLbitfield access); |
| bool ValidateFlushMappedBufferRangeBase(Context *context, |
| GLenum target, |
| GLintptr offset, |
| GLsizeiptr length); |
| |
| bool ValidateGenerateMipmap(Context *context, GLenum target); |
| |
| bool ValidateGenBuffers(Context *context, GLint n, GLuint *buffers); |
| bool ValidateDeleteBuffers(Context *context, GLint n, const GLuint *buffers); |
| bool ValidateGenFramebuffers(Context *context, GLint n, GLuint *framebuffers); |
| bool ValidateDeleteFramebuffers(Context *context, GLint n, const GLuint *framebuffers); |
| bool ValidateGenRenderbuffers(Context *context, GLint n, GLuint *renderbuffers); |
| bool ValidateDeleteRenderbuffers(Context *context, GLint n, const GLuint *renderbuffers); |
| bool ValidateGenTextures(Context *context, GLint n, GLuint *textures); |
| bool ValidateDeleteTextures(Context *context, GLint n, const GLuint *textures); |
| |
| bool ValidateGenOrDelete(Context *context, GLint n); |
| |
| bool ValidateEnable(Context *context, GLenum cap); |
| bool ValidateDisable(Context *context, GLenum cap); |
| bool ValidateIsEnabled(Context *context, GLenum cap); |
| |
| bool ValidateRobustEntryPoint(ValidationContext *context, GLsizei bufSize); |
| bool ValidateRobustBufferSize(ValidationContext *context, GLsizei bufSize, GLsizei numParams); |
| |
| bool ValidateGetFramebufferAttachmentParameteriv(ValidationContext *context, |
| GLenum target, |
| GLenum attachment, |
| GLenum pname, |
| GLsizei *numParams); |
| bool ValidateGetFramebufferAttachmentParameterivRobustANGLE(ValidationContext *context, |
| GLenum target, |
| GLenum attachment, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *numParams); |
| |
| bool ValidateGetBufferParameteriv(ValidationContext *context, |
| GLenum target, |
| GLenum pname, |
| GLint *params); |
| bool ValidateGetBufferParameterivRobustANGLE(ValidationContext *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| bool ValidateGetBufferParameteri64v(ValidationContext *context, |
| GLenum target, |
| GLenum pname, |
| GLint64 *params); |
| bool ValidateGetBufferParameteri64vRobustANGLE(ValidationContext *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint64 *params); |
| |
| bool ValidateGetProgramiv(Context *context, GLuint program, GLenum pname, GLsizei *numParams); |
| bool ValidateGetProgramivRobustANGLE(Context *context, |
| GLuint program, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *numParams); |
| |
| bool ValidateGetRenderbufferParameteriv(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLint *params); |
| bool ValidateGetRenderbufferParameterivRobustANGLE(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| bool ValidateGetShaderiv(Context *context, GLuint shader, GLenum pname, GLint *params); |
| bool ValidateGetShaderivRobustANGLE(Context *context, |
| GLuint shader, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| bool ValidateGetTexParameterfv(Context *context, GLenum target, GLenum pname, GLfloat *params); |
| bool ValidateGetTexParameterfvRobustANGLE(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLfloat *params); |
| bool ValidateGetTexParameteriv(Context *context, GLenum target, GLenum pname, GLint *params); |
| bool ValidateGetTexParameterivRobustANGLE(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| bool ValidateTexParameterf(Context *context, GLenum target, GLenum pname, GLfloat param); |
| bool ValidateTexParameterfv(Context *context, GLenum target, GLenum pname, const GLfloat *params); |
| bool ValidateTexParameterfvRobustANGLE(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei bufSize, |
| const GLfloat *params); |
| bool ValidateTexParameteri(Context *context, GLenum target, GLenum pname, GLint param); |
| bool ValidateTexParameteriv(Context *context, GLenum target, GLenum pname, const GLint *params); |
| bool ValidateTexParameterivRobustANGLE(Context *context, |
| GLenum target, |
| GLenum pname, |
| GLsizei bufSize, |
| const GLint *params); |
| |
| bool ValidateGetSamplerParameterfv(Context *context, GLuint sampler, GLenum pname, GLfloat *params); |
| bool ValidateGetSamplerParameterfvRobustANGLE(Context *context, |
| GLuint sampler, |
| GLenum pname, |
| GLuint bufSize, |
| GLsizei *length, |
| GLfloat *params); |
| bool ValidateGetSamplerParameteriv(Context *context, GLuint sampler, GLenum pname, GLint *params); |
| bool ValidateGetSamplerParameterivRobustANGLE(Context *context, |
| GLuint sampler, |
| GLenum pname, |
| GLuint bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| bool ValidateSamplerParameterf(Context *context, GLuint sampler, GLenum pname, GLfloat param); |
| bool ValidateSamplerParameterfv(Context *context, |
| GLuint sampler, |
| GLenum pname, |
| const GLfloat *params); |
| bool ValidateSamplerParameterfvRobustANGLE(Context *context, |
| GLuint sampler, |
| GLenum pname, |
| GLsizei bufSize, |
| const GLfloat *params); |
| bool ValidateSamplerParameteri(Context *context, GLuint sampler, GLenum pname, GLint param); |
| bool ValidateSamplerParameteriv(Context *context, |
| GLuint sampler, |
| GLenum pname, |
| const GLint *params); |
| bool ValidateSamplerParameterivRobustANGLE(Context *context, |
| GLuint sampler, |
| GLenum pname, |
| GLsizei bufSize, |
| const GLint *params); |
| |
| bool ValidateGetVertexAttribfv(Context *context, GLuint index, GLenum pname, GLfloat *params); |
| bool ValidateGetVertexAttribfvRobustANGLE(Context *context, |
| GLuint index, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLfloat *params); |
| |
| bool ValidateGetVertexAttribiv(Context *context, GLuint index, GLenum pname, GLint *params); |
| bool ValidateGetVertexAttribivRobustANGLE(Context *context, |
| GLuint index, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| bool ValidateGetVertexAttribPointerv(Context *context, GLuint index, GLenum pname, void **pointer); |
| bool ValidateGetVertexAttribPointervRobustANGLE(Context *context, |
| GLuint index, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| void **pointer); |
| |
| bool ValidateGetVertexAttribIiv(Context *context, GLuint index, GLenum pname, GLint *params); |
| bool ValidateGetVertexAttribIivRobustANGLE(Context *context, |
| GLuint index, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| bool ValidateGetVertexAttribIuiv(Context *context, GLuint index, GLenum pname, GLuint *params); |
| bool ValidateGetVertexAttribIuivRobustANGLE(Context *context, |
| GLuint index, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLuint *params); |
| |
| bool ValidateGetActiveUniformBlockiv(Context *context, |
| GLuint program, |
| GLuint uniformBlockIndex, |
| GLenum pname, |
| GLint *params); |
| bool ValidateGetActiveUniformBlockivRobustANGLE(Context *context, |
| GLuint program, |
| GLuint uniformBlockIndex, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| bool ValidateGetInternalFormativ(Context *context, |
| GLenum target, |
| GLenum internalformat, |
| GLenum pname, |
| GLsizei bufSize, |
| GLint *params); |
| bool ValidateGetInternalFormativRobustANGLE(Context *context, |
| GLenum target, |
| GLenum internalformat, |
| GLenum pname, |
| GLsizei bufSize, |
| GLsizei *length, |
| GLint *params); |
| |
| // Error messages shared here for use in testing. |
| extern const char *g_ExceedsMaxElementErrorMessage; |
| } // namespace gl |
| |
| #endif // LIBANGLE_VALIDATION_ES_H_ |