1 // 2 // Copyright (c) 2013 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 // validationES.h: Validation functions for generic OpenGL ES entry point parameters 8 9 #ifndef LIBANGLE_VALIDATION_ES_H_ 10 #define LIBANGLE_VALIDATION_ES_H_ 11 12 #include "common/mathutil.h" 13 #include "libANGLE/PackedGLEnums.h" 14 15 #include <GLES2/gl2.h> 16 #include <GLES3/gl3.h> 17 #include <GLES3/gl31.h> 18 19 namespace egl 20 { 21 class Display; 22 class Image; 23 } 24 25 namespace gl 26 { 27 class Context; 28 struct Format; 29 struct LinkedUniform; 30 class Program; 31 class Shader; 32 class ValidationContext; 33 34 bool ValidTextureTarget(const ValidationContext *context, GLenum target); 35 bool ValidTexture2DTarget(const ValidationContext *context, GLenum target); 36 bool ValidTexture3DTarget(const ValidationContext *context, GLenum target); 37 bool ValidTextureExternalTarget(const ValidationContext *context, GLenum target); 38 bool ValidTexture2DDestinationTarget(const ValidationContext *context, GLenum target); 39 bool ValidTexture3DDestinationTarget(const ValidationContext *context, GLenum target); 40 bool ValidTexLevelDestinationTarget(const ValidationContext *context, GLenum target); 41 bool ValidFramebufferTarget(const ValidationContext *context, GLenum target); 42 bool ValidBufferType(const ValidationContext *context, BufferBinding target); 43 bool ValidBufferParameter(const ValidationContext *context, GLenum pname, GLsizei *numParams); 44 bool ValidMipLevel(const ValidationContext *context, GLenum target, GLint level); 45 bool ValidImageSizeParameters(ValidationContext *context, 46 GLenum target, 47 GLint level, 48 GLsizei width, 49 GLsizei height, 50 GLsizei depth, 51 bool isSubImage); 52 bool ValidCompressedImageSize(const ValidationContext *context, 53 GLenum internalFormat, 54 GLint level, 55 GLsizei width, 56 GLsizei height); 57 bool ValidCompressedSubImageSize(const ValidationContext *context, 58 GLenum internalFormat, 59 GLint xoffset, 60 GLint yoffset, 61 GLsizei width, 62 GLsizei height, 63 size_t textureWidth, 64 size_t textureHeight); 65 bool ValidImageDataSize(ValidationContext *context, 66 GLenum textureTarget, 67 GLsizei width, 68 GLsizei height, 69 GLsizei depth, 70 GLenum format, 71 GLenum type, 72 const void *pixels, 73 GLsizei imageSize); 74 75 bool ValidQueryType(const Context *context, GLenum queryType); 76 77 bool ValidateWebGLVertexAttribPointer(ValidationContext *context, 78 GLenum type, 79 GLboolean normalized, 80 GLsizei stride, 81 const void *ptr, 82 bool pureInteger); 83 84 // Returns valid program if id is a valid program name 85 // Errors INVALID_OPERATION if valid shader is given and returns NULL 86 // Errors INVALID_VALUE otherwise and returns NULL 87 Program *GetValidProgram(ValidationContext *context, GLuint id); 88 89 // Returns valid shader if id is a valid shader name 90 // Errors INVALID_OPERATION if valid program is given and returns NULL 91 // Errors INVALID_VALUE otherwise and returns NULL 92 Shader *GetValidShader(ValidationContext *context, GLuint id); 93 94 bool ValidateAttachmentTarget(Context *context, GLenum attachment); 95 bool ValidateRenderbufferStorageParametersBase(ValidationContext *context, 96 GLenum target, 97 GLsizei samples, 98 GLenum internalformat, 99 GLsizei width, 100 GLsizei height); 101 bool ValidateFramebufferRenderbufferParameters(Context *context, 102 GLenum target, 103 GLenum attachment, 104 GLenum renderbuffertarget, 105 GLuint renderbuffer); 106 107 bool ValidateBlitFramebufferParameters(ValidationContext *context, 108 GLint srcX0, 109 GLint srcY0, 110 GLint srcX1, 111 GLint srcY1, 112 GLint dstX0, 113 GLint dstY0, 114 GLint dstX1, 115 GLint dstY1, 116 GLbitfield mask, 117 GLenum filter); 118 119 bool ValidateReadPixelsBase(Context *context, 120 GLint x, 121 GLint y, 122 GLsizei width, 123 GLsizei height, 124 GLenum format, 125 GLenum type, 126 GLsizei bufSize, 127 GLsizei *length, 128 GLsizei *columns, 129 GLsizei *rows, 130 void *pixels); 131 bool ValidateReadPixelsRobustANGLE(Context *context, 132 GLint x, 133 GLint y, 134 GLsizei width, 135 GLsizei height, 136 GLenum format, 137 GLenum type, 138 GLsizei bufSize, 139 GLsizei *length, 140 GLsizei *columns, 141 GLsizei *rows, 142 void *pixels); 143 bool ValidateReadnPixelsEXT(Context *context, 144 GLint x, 145 GLint y, 146 GLsizei width, 147 GLsizei height, 148 GLenum format, 149 GLenum type, 150 GLsizei bufSize, 151 void *pixels); 152 bool ValidateReadnPixelsRobustANGLE(Context *context, 153 GLint x, 154 GLint y, 155 GLsizei width, 156 GLsizei height, 157 GLenum format, 158 GLenum type, 159 GLsizei bufSize, 160 GLsizei *length, 161 GLsizei *columns, 162 GLsizei *rows, 163 void *data); 164 165 bool ValidateGenQueriesEXT(gl::Context *context, GLsizei n, GLuint *ids); 166 bool ValidateDeleteQueriesEXT(gl::Context *context, GLsizei n, const GLuint *ids); 167 bool ValidateIsQueryEXT(gl::Context *context, GLuint id); 168 bool ValidateBeginQueryBase(Context *context, GLenum target, GLuint id); 169 bool ValidateBeginQueryEXT(Context *context, GLenum target, GLuint id); 170 bool ValidateEndQueryBase(Context *context, GLenum target); 171 bool ValidateEndQueryEXT(Context *context, GLenum target); 172 bool ValidateQueryCounterEXT(Context *context, GLuint id, GLenum target); 173 bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsizei *numParams); 174 bool ValidateGetQueryivEXT(Context *context, GLenum target, GLenum pname, GLint *params); 175 bool ValidateGetQueryivRobustANGLE(Context *context, 176 GLenum target, 177 GLenum pname, 178 GLsizei bufSize, 179 GLsizei *length, 180 GLint *params); 181 bool ValidateGetQueryObjectValueBase(Context *context, 182 GLenum target, 183 GLenum pname, 184 GLsizei *numParams); 185 bool ValidateGetQueryObjectivEXT(Context *context, GLuint id, GLenum pname, GLint *params); 186 bool ValidateGetQueryObjectivRobustANGLE(Context *context, 187 GLuint id, 188 GLenum pname, 189 GLsizei bufSize, 190 GLsizei *length, 191 GLint *params); 192 bool ValidateGetQueryObjectuivEXT(Context *context, GLuint id, GLenum pname, GLuint *params); 193 bool ValidateGetQueryObjectuivRobustANGLE(Context *context, 194 GLuint id, 195 GLenum pname, 196 GLsizei bufSize, 197 GLsizei *length, 198 GLuint *params); 199 bool ValidateGetQueryObjecti64vEXT(Context *context, GLuint id, GLenum pname, GLint64 *params); 200 bool ValidateGetQueryObjecti64vRobustANGLE(Context *context, 201 GLuint id, 202 GLenum pname, 203 GLsizei bufSize, 204 GLsizei *length, 205 GLint64 *params); 206 bool ValidateGetQueryObjectui64vEXT(Context *context, GLuint id, GLenum pname, GLuint64 *params); 207 bool ValidateGetQueryObjectui64vRobustANGLE(Context *context, 208 GLuint id, 209 GLenum pname, 210 GLsizei bufSize, 211 GLsizei *length, 212 GLuint64 *params); 213 214 bool ValidateUniformCommonBase(ValidationContext *context, 215 gl::Program *program, 216 GLint location, 217 GLsizei count, 218 const LinkedUniform **uniformOut); 219 bool ValidateUniform1ivValue(ValidationContext *context, 220 GLenum uniformType, 221 GLsizei count, 222 const GLint *value); 223 bool ValidateUniformValue(ValidationContext *context, GLenum valueType, GLenum uniformType); 224 bool ValidateUniformMatrixValue(ValidationContext *context, GLenum valueType, GLenum uniformType); 225 bool ValidateUniform(ValidationContext *context, GLenum uniformType, GLint location, GLsizei count); 226 bool ValidateUniformMatrix(ValidationContext *context, 227 GLenum matrixType, 228 GLint location, 229 GLsizei count, 230 GLboolean transpose); 231 232 bool ValidateStateQuery(ValidationContext *context, 233 GLenum pname, 234 GLenum *nativeType, 235 unsigned int *numParams); 236 237 bool ValidateRobustStateQuery(ValidationContext *context, 238 GLenum pname, 239 GLsizei bufSize, 240 GLenum *nativeType, 241 unsigned int *numParams); 242 243 bool ValidateCopyTexImageParametersBase(ValidationContext *context, 244 GLenum target, 245 GLint level, 246 GLenum internalformat, 247 bool isSubImage, 248 GLint xoffset, 249 GLint yoffset, 250 GLint zoffset, 251 GLint x, 252 GLint y, 253 GLsizei width, 254 GLsizei height, 255 GLint border, 256 Format *textureFormatOut); 257 258 bool ValidateDrawBase(ValidationContext *context, GLenum mode, GLsizei count); 259 bool ValidateDrawArraysCommon(ValidationContext *context, 260 GLenum mode, 261 GLint first, 262 GLsizei count, 263 GLsizei primcount); 264 bool ValidateDrawArraysInstancedBase(Context *context, 265 GLenum mode, 266 GLint first, 267 GLsizei count, 268 GLsizei primcount); 269 bool ValidateDrawArraysInstancedANGLE(Context *context, 270 GLenum mode, 271 GLint first, 272 GLsizei count, 273 GLsizei primcount); 274 275 bool ValidateDrawElementsBase(ValidationContext *context, GLenum type); 276 bool ValidateDrawElementsCommon(ValidationContext *context, 277 GLenum mode, 278 GLsizei count, 279 GLenum type, 280 const void *indices, 281 GLsizei primcount); 282 283 bool ValidateDrawElementsInstancedCommon(ValidationContext *context, 284 GLenum mode, 285 GLsizei count, 286 GLenum type, 287 const void *indices, 288 GLsizei primcount); 289 bool ValidateDrawElementsInstancedANGLE(Context *context, 290 GLenum mode, 291 GLsizei count, 292 GLenum type, 293 const void *indices, 294 GLsizei primcount); 295 296 bool ValidateFramebufferTextureBase(Context *context, 297 GLenum target, 298 GLenum attachment, 299 GLuint texture, 300 GLint level); 301 302 bool ValidateGetUniformBase(Context *context, GLuint program, GLint location); 303 bool ValidateGetnUniformfvEXT(Context *context, 304 GLuint program, 305 GLint location, 306 GLsizei bufSize, 307 GLfloat *params); 308 bool ValidateGetnUniformivEXT(Context *context, 309 GLuint program, 310 GLint location, 311 GLsizei bufSize, 312 GLint *params); 313 bool ValidateGetUniformfvRobustANGLE(Context *context, 314 GLuint program, 315 GLint location, 316 GLsizei bufSize, 317 GLsizei *length, 318 GLfloat *params); 319 bool ValidateGetUniformivRobustANGLE(Context *context, 320 GLuint program, 321 GLint location, 322 GLsizei bufSize, 323 GLsizei *length, 324 GLint *params); 325 bool ValidateGetUniformuivRobustANGLE(Context *context, 326 GLuint program, 327 GLint location, 328 GLsizei bufSize, 329 GLsizei *length, 330 GLuint *params); 331 332 bool ValidateDiscardFramebufferBase(Context *context, 333 GLenum target, 334 GLsizei numAttachments, 335 const GLenum *attachments, 336 bool defaultFramebuffer); 337 338 bool ValidateInsertEventMarkerEXT(Context *context, GLsizei length, const char *marker); 339 bool ValidatePushGroupMarkerEXT(Context *context, GLsizei length, const char *marker); 340 341 bool ValidateEGLImageTargetTexture2DOES(Context *context, 342 GLenum target, 343 egl::Image *image); 344 bool ValidateEGLImageTargetRenderbufferStorageOES(Context *context, 345 GLenum target, 346 egl::Image *image); 347 348 bool ValidateBindVertexArrayBase(Context *context, GLuint array); 349 350 bool ValidateProgramBinaryBase(Context *context, 351 GLuint program, 352 GLenum binaryFormat, 353 const void *binary, 354 GLint length); 355 bool ValidateGetProgramBinaryBase(Context *context, 356 GLuint program, 357 GLsizei bufSize, 358 GLsizei *length, 359 GLenum *binaryFormat, 360 void *binary); 361 362 bool ValidateDrawBuffersBase(ValidationContext *context, GLsizei n, const GLenum *bufs); 363 364 bool ValidateGetBufferPointervBase(Context *context, 365 BufferBinding target, 366 GLenum pname, 367 GLsizei *length, 368 void **params); 369 bool ValidateUnmapBufferBase(Context *context, BufferBinding target); 370 bool ValidateMapBufferRangeBase(Context *context, 371 BufferBinding target, 372 GLintptr offset, 373 GLsizeiptr length, 374 GLbitfield access); 375 bool ValidateFlushMappedBufferRangeBase(Context *context, 376 BufferBinding target, 377 GLintptr offset, 378 GLsizeiptr length); 379 380 bool ValidateGenOrDelete(Context *context, GLint n); 381 382 bool ValidateRobustEntryPoint(ValidationContext *context, GLsizei bufSize); 383 bool ValidateRobustBufferSize(ValidationContext *context, GLsizei bufSize, GLsizei numParams); 384 385 bool ValidateGetFramebufferAttachmentParameterivBase(ValidationContext *context, 386 GLenum target, 387 GLenum attachment, 388 GLenum pname, 389 GLsizei *numParams); 390 bool ValidateGetFramebufferAttachmentParameterivRobustANGLE(ValidationContext *context, 391 GLenum target, 392 GLenum attachment, 393 GLenum pname, 394 GLsizei bufSize, 395 GLsizei *numParams); 396 397 bool ValidateGetBufferParameterBase(ValidationContext *context, 398 BufferBinding target, 399 GLenum pname, 400 bool pointerVersion, 401 GLsizei *numParams); 402 bool ValidateGetBufferParameterivRobustANGLE(ValidationContext *context, 403 BufferBinding target, 404 GLenum pname, 405 GLsizei bufSize, 406 GLsizei *length, 407 GLint *params); 408 409 bool ValidateGetBufferParameteri64vRobustANGLE(ValidationContext *context, 410 BufferBinding target, 411 GLenum pname, 412 GLsizei bufSize, 413 GLsizei *length, 414 GLint64 *params); 415 416 bool ValidateGetProgramivBase(ValidationContext *context, 417 GLuint program, 418 GLenum pname, 419 GLsizei *numParams); 420 bool ValidateGetProgramivRobustANGLE(Context *context, 421 GLuint program, 422 GLenum pname, 423 GLsizei bufSize, 424 GLsizei *numParams); 425 426 bool ValidateGetRenderbufferParameterivBase(Context *context, 427 GLenum target, 428 GLenum pname, 429 GLsizei *length); 430 bool ValidateGetRenderbufferParameterivRobustANGLE(Context *context, 431 GLenum target, 432 GLenum pname, 433 GLsizei bufSize, 434 GLsizei *length, 435 GLint *params); 436 437 bool ValidateGetShaderivBase(Context *context, GLuint shader, GLenum pname, GLsizei *length); 438 bool ValidateGetShaderivRobustANGLE(Context *context, 439 GLuint shader, 440 GLenum pname, 441 GLsizei bufSize, 442 GLsizei *length, 443 GLint *params); 444 445 bool ValidateGetTexParameterBase(Context *context, GLenum target, GLenum pname, GLsizei *length); 446 bool ValidateGetTexParameterfvRobustANGLE(Context *context, 447 GLenum target, 448 GLenum pname, 449 GLsizei bufSize, 450 GLsizei *length, 451 GLfloat *params); 452 bool ValidateGetTexParameterivRobustANGLE(Context *context, 453 GLenum target, 454 GLenum pname, 455 GLsizei bufSize, 456 GLsizei *length, 457 GLint *params); 458 459 template <typename ParamType> 460 bool ValidateTexParameterBase(Context *context, 461 GLenum target, 462 GLenum pname, 463 GLsizei bufSize, 464 const ParamType *params); 465 bool ValidateTexParameterfvRobustANGLE(Context *context, 466 GLenum target, 467 GLenum pname, 468 GLsizei bufSize, 469 const GLfloat *params); 470 bool ValidateTexParameterivRobustANGLE(Context *context, 471 GLenum target, 472 GLenum pname, 473 GLsizei bufSize, 474 const GLint *params); 475 476 bool ValidateGetSamplerParameterfvRobustANGLE(Context *context, 477 GLuint sampler, 478 GLenum pname, 479 GLuint bufSize, 480 GLsizei *length, 481 GLfloat *params); 482 bool ValidateGetSamplerParameterivRobustANGLE(Context *context, 483 GLuint sampler, 484 GLenum pname, 485 GLuint bufSize, 486 GLsizei *length, 487 GLint *params); 488 489 bool ValidateSamplerParameterfvRobustANGLE(Context *context, 490 GLuint sampler, 491 GLenum pname, 492 GLsizei bufSize, 493 const GLfloat *params); 494 bool ValidateSamplerParameterivRobustANGLE(Context *context, 495 GLuint sampler, 496 GLenum pname, 497 GLsizei bufSize, 498 const GLint *params); 499 500 bool ValidateGetVertexAttribBase(Context *context, 501 GLuint index, 502 GLenum pname, 503 GLsizei *length, 504 bool pointer, 505 bool pureIntegerEntryPoint); 506 bool ValidateGetVertexAttribfvRobustANGLE(Context *context, 507 GLuint index, 508 GLenum pname, 509 GLsizei bufSize, 510 GLsizei *length, 511 GLfloat *params); 512 513 bool ValidateGetVertexAttribivRobustANGLE(Context *context, 514 GLuint index, 515 GLenum pname, 516 GLsizei bufSize, 517 GLsizei *length, 518 GLint *params); 519 520 bool ValidateGetVertexAttribPointervRobustANGLE(Context *context, 521 GLuint index, 522 GLenum pname, 523 GLsizei bufSize, 524 GLsizei *length, 525 void **pointer); 526 527 bool ValidateGetVertexAttribIivRobustANGLE(Context *context, 528 GLuint index, 529 GLenum pname, 530 GLsizei bufSize, 531 GLsizei *length, 532 GLint *params); 533 534 bool ValidateGetVertexAttribIuivRobustANGLE(Context *context, 535 GLuint index, 536 GLenum pname, 537 GLsizei bufSize, 538 GLsizei *length, 539 GLuint *params); 540 541 bool ValidateGetActiveUniformBlockivRobustANGLE(Context *context, 542 GLuint program, 543 GLuint uniformBlockIndex, 544 GLenum pname, 545 GLsizei bufSize, 546 GLsizei *length, 547 GLint *params); 548 549 bool ValidateGetInternalFormativRobustANGLE(Context *context, 550 GLenum target, 551 GLenum internalformat, 552 GLenum pname, 553 GLsizei bufSize, 554 GLsizei *length, 555 GLint *params); 556 557 bool ValidateVertexFormatBase(ValidationContext *context, 558 GLuint attribIndex, 559 GLint size, 560 GLenum type, 561 GLboolean pureInteger); 562 563 bool ValidateWebGLFramebufferAttachmentClearType(ValidationContext *context, 564 GLint drawbuffer, 565 const GLenum *validComponentTypes, 566 size_t validComponentTypeCount); 567 568 bool ValidateRobustCompressedTexImageBase(ValidationContext *context, 569 GLsizei imageSize, 570 GLsizei dataSize); 571 572 bool ValidateVertexAttribIndex(ValidationContext *context, GLuint index); 573 574 bool ValidateGetActiveUniformBlockivBase(Context *context, 575 GLuint program, 576 GLuint uniformBlockIndex, 577 GLenum pname, 578 GLsizei *length); 579 580 bool ValidateGetSamplerParameterBase(Context *context, 581 GLuint sampler, 582 GLenum pname, 583 GLsizei *length); 584 585 template <typename ParamType> 586 bool ValidateSamplerParameterBase(Context *context, 587 GLuint sampler, 588 GLenum pname, 589 GLsizei bufSize, 590 ParamType *params); 591 592 bool ValidateGetInternalFormativBase(Context *context, 593 GLenum target, 594 GLenum internalformat, 595 GLenum pname, 596 GLsizei bufSize, 597 GLsizei *numParams); 598 599 } // namespace gl 600 601 #endif // LIBANGLE_VALIDATION_ES_H_ 602