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 // validationES3.h: Validation functions for OpenGL ES 3.0 entry point parameters 8 9 #ifndef LIBANGLE_VALIDATION_ES3_H_ 10 #define LIBANGLE_VALIDATION_ES3_H_ 11 12 #include "libANGLE/PackedGLEnums.h" 13 14 #include <GLES3/gl3.h> 15 16 namespace gl 17 { 18 class Context; 19 struct IndexRange; 20 class ValidationContext; 21 22 bool ValidateES3TexImageParametersBase(ValidationContext *context, 23 GLenum target, 24 GLint level, 25 GLenum internalformat, 26 bool isCompressed, 27 bool isSubImage, 28 GLint xoffset, 29 GLint yoffset, 30 GLint zoffset, 31 GLsizei width, 32 GLsizei height, 33 GLsizei depth, 34 GLint border, 35 GLenum format, 36 GLenum type, 37 GLsizei imageSize, 38 const void *pixels); 39 40 bool ValidateES3TexStorageParameters(Context *context, 41 GLenum target, 42 GLsizei levels, 43 GLenum internalformat, 44 GLsizei width, 45 GLsizei height, 46 GLsizei depth); 47 48 bool ValidateES3TexImage2DParameters(Context *context, 49 GLenum target, 50 GLint level, 51 GLenum internalformat, 52 bool isCompressed, 53 bool isSubImage, 54 GLint xoffset, 55 GLint yoffset, 56 GLint zoffset, 57 GLsizei width, 58 GLsizei height, 59 GLsizei depth, 60 GLint border, 61 GLenum format, 62 GLenum type, 63 GLsizei imageSize, 64 const void *pixels); 65 66 bool ValidateES3TexImage3DParameters(Context *context, 67 GLenum target, 68 GLint level, 69 GLenum internalformat, 70 bool isCompressed, 71 bool isSubImage, 72 GLint xoffset, 73 GLint yoffset, 74 GLint zoffset, 75 GLsizei width, 76 GLsizei height, 77 GLsizei depth, 78 GLint border, 79 GLenum format, 80 GLenum type, 81 GLsizei bufSize, 82 const void *pixels); 83 84 bool ValidateES3CopyTexImageParametersBase(ValidationContext *context, 85 GLenum target, 86 GLint level, 87 GLenum internalformat, 88 bool isSubImage, 89 GLint xoffset, 90 GLint yoffset, 91 GLint zoffset, 92 GLint x, 93 GLint y, 94 GLsizei width, 95 GLsizei height, 96 GLint border); 97 98 bool ValidateES3CopyTexImage2DParameters(ValidationContext *context, 99 GLenum target, 100 GLint level, 101 GLenum internalformat, 102 bool isSubImage, 103 GLint xoffset, 104 GLint yoffset, 105 GLint zoffset, 106 GLint x, 107 GLint y, 108 GLsizei width, 109 GLsizei height, 110 GLint border); 111 112 bool ValidateES3CopyTexImage3DParameters(ValidationContext *context, 113 GLenum target, 114 GLint level, 115 GLenum internalformat, 116 bool isSubImage, 117 GLint xoffset, 118 GLint yoffset, 119 GLint zoffset, 120 GLint x, 121 GLint y, 122 GLsizei width, 123 GLsizei height, 124 GLint border); 125 126 bool ValidateES3TexStorageParametersBase(Context *context, 127 GLenum target, 128 GLsizei levels, 129 GLenum internalformat, 130 GLsizei width, 131 GLsizei height, 132 GLsizei depth); 133 134 bool ValidateES3TexStorage2DParameters(Context *context, 135 GLenum target, 136 GLsizei levels, 137 GLenum internalformat, 138 GLsizei width, 139 GLsizei height, 140 GLsizei depth); 141 142 bool ValidateES3TexStorage3DParameters(Context *context, 143 GLenum target, 144 GLsizei levels, 145 GLenum internalformat, 146 GLsizei width, 147 GLsizei height, 148 GLsizei depth); 149 150 bool ValidateBeginQuery(Context *context, GLenum target, GLuint id); 151 152 bool ValidateEndQuery(Context *context, GLenum target); 153 154 bool ValidateGetQueryiv(Context *context, GLenum target, GLenum pname, GLint *params); 155 156 bool ValidateGetQueryObjectuiv(Context *context, GLuint id, GLenum pname, GLuint *params); 157 158 bool ValidateFramebufferTextureLayer(Context *context, 159 GLenum target, 160 GLenum attachment, 161 GLuint texture, 162 GLint level, 163 GLint layer); 164 165 bool ValidateInvalidateFramebuffer(Context *context, 166 GLenum target, 167 GLsizei numAttachments, 168 const GLenum *attachments); 169 170 bool ValidateInvalidateSubFramebuffer(Context *context, 171 GLenum target, 172 GLsizei numAttachments, 173 const GLenum *attachments, 174 GLint x, 175 GLint y, 176 GLsizei width, 177 GLsizei height); 178 179 bool ValidateClearBuffer(ValidationContext *context); 180 181 bool ValidateDrawRangeElements(Context *context, 182 GLenum mode, 183 GLuint start, 184 GLuint end, 185 GLsizei count, 186 GLenum type, 187 const void *indices); 188 189 bool ValidateGetUniformuiv(Context *context, GLuint program, GLint location, GLuint *params); 190 191 bool ValidateReadBuffer(Context *context, GLenum mode); 192 193 bool ValidateCompressedTexImage3D(Context *context, 194 GLenum target, 195 GLint level, 196 GLenum internalformat, 197 GLsizei width, 198 GLsizei height, 199 GLsizei depth, 200 GLint border, 201 GLsizei imageSize, 202 const void *data); 203 bool ValidateCompressedTexImage3DRobustANGLE(Context *context, 204 GLenum target, 205 GLint level, 206 GLenum internalformat, 207 GLsizei width, 208 GLsizei height, 209 GLsizei depth, 210 GLint border, 211 GLsizei imageSize, 212 GLsizei dataSize, 213 const void *data); 214 215 bool ValidateBindVertexArray(Context *context, GLuint array); 216 bool ValidateIsVertexArray(Context *context, GLuint array); 217 218 bool ValidateBindBufferBase(Context *context, BufferBinding target, GLuint index, GLuint buffer); 219 bool ValidateBindBufferRange(Context *context, 220 BufferBinding target, 221 GLuint index, 222 GLuint buffer, 223 GLintptr offset, 224 GLsizeiptr size); 225 226 bool ValidateProgramBinary(Context *context, 227 GLuint program, 228 GLenum binaryFormat, 229 const void *binary, 230 GLint length); 231 bool ValidateGetProgramBinary(Context *context, 232 GLuint program, 233 GLsizei bufSize, 234 GLsizei *length, 235 GLenum *binaryFormat, 236 void *binary); 237 bool ValidateProgramParameteri(Context *context, GLuint program, GLenum pname, GLint value); 238 bool ValidateBlitFramebuffer(Context *context, 239 GLint srcX0, 240 GLint srcY0, 241 GLint srcX1, 242 GLint srcY1, 243 GLint dstX0, 244 GLint dstY0, 245 GLint dstX1, 246 GLint dstY1, 247 GLbitfield mask, 248 GLenum filter); 249 bool ValidateClearBufferiv(ValidationContext *context, 250 GLenum buffer, 251 GLint drawbuffer, 252 const GLint *value); 253 bool ValidateClearBufferuiv(ValidationContext *context, 254 GLenum buffer, 255 GLint drawbuffer, 256 const GLuint *value); 257 bool ValidateClearBufferfv(ValidationContext *context, 258 GLenum buffer, 259 GLint drawbuffer, 260 const GLfloat *value); 261 bool ValidateClearBufferfi(ValidationContext *context, 262 GLenum buffer, 263 GLint drawbuffer, 264 GLfloat depth, 265 GLint stencil); 266 bool ValidateDrawBuffers(ValidationContext *context, GLsizei n, const GLenum *bufs); 267 bool ValidateCopyTexSubImage3D(Context *context, 268 GLenum target, 269 GLint level, 270 GLint xoffset, 271 GLint yoffset, 272 GLint zoffset, 273 GLint x, 274 GLint y, 275 GLsizei width, 276 GLsizei height); 277 bool ValidateTexImage3D(Context *context, 278 GLenum target, 279 GLint level, 280 GLint internalformat, 281 GLsizei width, 282 GLsizei height, 283 GLsizei depth, 284 GLint border, 285 GLenum format, 286 GLenum type, 287 const void *pixels); 288 bool ValidateTexImage3DRobustANGLE(Context *context, 289 GLenum target, 290 GLint level, 291 GLint internalformat, 292 GLsizei width, 293 GLsizei height, 294 GLsizei depth, 295 GLint border, 296 GLenum format, 297 GLenum type, 298 GLsizei bufSize, 299 const void *pixels); 300 bool ValidateTexSubImage3D(Context *context, 301 GLenum target, 302 GLint level, 303 GLint xoffset, 304 GLint yoffset, 305 GLint zoffset, 306 GLsizei width, 307 GLsizei height, 308 GLsizei depth, 309 GLenum format, 310 GLenum type, 311 const void *pixels); 312 bool ValidateTexSubImage3DRobustANGLE(Context *context, 313 GLenum target, 314 GLint level, 315 GLint xoffset, 316 GLint yoffset, 317 GLint zoffset, 318 GLsizei width, 319 GLsizei height, 320 GLsizei depth, 321 GLenum format, 322 GLenum type, 323 GLsizei bufSize, 324 const void *pixels); 325 bool ValidateCompressedTexSubImage3D(Context *context, 326 GLenum target, 327 GLint level, 328 GLint xoffset, 329 GLint yoffset, 330 GLint zoffset, 331 GLsizei width, 332 GLsizei height, 333 GLsizei depth, 334 GLenum format, 335 GLsizei imageSize, 336 const void *data); 337 bool ValidateCompressedTexSubImage3DRobustANGLE(Context *context, 338 GLenum target, 339 GLint level, 340 GLint xoffset, 341 GLint yoffset, 342 GLint zoffset, 343 GLsizei width, 344 GLsizei height, 345 GLsizei depth, 346 GLenum format, 347 GLsizei imageSize, 348 GLsizei dataSize, 349 const void *data); 350 351 bool ValidateGenQueries(Context *context, GLint n, GLuint *ids); 352 bool ValidateDeleteQueries(Context *context, GLint n, const GLuint *ids); 353 bool ValidateGenSamplers(Context *context, GLint count, GLuint *samplers); 354 bool ValidateDeleteSamplers(Context *context, GLint count, const GLuint *samplers); 355 bool ValidateGenTransformFeedbacks(Context *context, GLint n, GLuint *ids); 356 bool ValidateDeleteTransformFeedbacks(Context *context, GLint n, const GLuint *ids); 357 bool ValidateGenVertexArrays(Context *context, GLint n, GLuint *arrays); 358 bool ValidateDeleteVertexArrays(Context *context, GLint n, const GLuint *arrays); 359 360 bool ValidateBeginTransformFeedback(Context *context, GLenum primitiveMode); 361 362 bool ValidateGetBufferPointerv(Context *context, BufferBinding target, GLenum pname, void **params); 363 bool ValidateGetBufferPointervRobustANGLE(Context *context, 364 BufferBinding target, 365 GLenum pname, 366 GLsizei bufSize, 367 GLsizei *length, 368 void **params); 369 bool ValidateUnmapBuffer(Context *context, BufferBinding target); 370 bool ValidateMapBufferRange(Context *context, 371 BufferBinding target, 372 GLintptr offset, 373 GLsizeiptr length, 374 GLbitfield access); 375 bool ValidateFlushMappedBufferRange(Context *context, 376 BufferBinding target, 377 GLintptr offset, 378 GLsizeiptr length); 379 380 bool ValidateIndexedStateQuery(ValidationContext *context, 381 GLenum pname, 382 GLuint index, 383 GLsizei *length); 384 bool ValidateGetIntegeri_v(ValidationContext *context, GLenum target, GLuint index, GLint *data); 385 bool ValidateGetIntegeri_vRobustANGLE(ValidationContext *context, 386 GLenum target, 387 GLuint index, 388 GLsizei bufSize, 389 GLsizei *length, 390 GLint *data); 391 bool ValidateGetInteger64i_v(ValidationContext *context, 392 GLenum target, 393 GLuint index, 394 GLint64 *data); 395 bool ValidateGetInteger64i_vRobustANGLE(ValidationContext *context, 396 GLenum target, 397 GLuint index, 398 GLsizei bufSize, 399 GLsizei *length, 400 GLint64 *data); 401 402 bool ValidateCopyBufferSubData(ValidationContext *context, 403 BufferBinding readTarget, 404 BufferBinding writeTarget, 405 GLintptr readOffset, 406 GLintptr writeOffset, 407 GLsizeiptr size); 408 409 bool ValidateGetStringi(Context *context, GLenum name, GLuint index); 410 bool ValidateRenderbufferStorageMultisample(ValidationContext *context, 411 GLenum target, 412 GLsizei samples, 413 GLenum internalformat, 414 GLsizei width, 415 GLsizei height); 416 417 bool ValidateVertexAttribIPointer(ValidationContext *context, 418 GLuint index, 419 GLint size, 420 GLenum type, 421 GLsizei stride, 422 const void *pointer); 423 424 bool ValidateGetSynciv(Context *context, 425 GLsync sync, 426 GLenum pname, 427 GLsizei bufSize, 428 GLsizei *length, 429 GLint *values); 430 431 bool ValidateDrawElementsInstanced(ValidationContext *context, 432 GLenum mode, 433 GLsizei count, 434 GLenum type, 435 const void *indices, 436 GLsizei instanceCount); 437 438 bool ValidateFramebufferTextureMultiviewLayeredANGLE(Context *context, 439 GLenum target, 440 GLenum attachment, 441 GLuint texture, 442 GLint level, 443 GLint baseViewIndex, 444 GLsizei numViews); 445 446 bool ValidateFramebufferTextureMultiviewSideBySideANGLE(Context *context, 447 GLenum target, 448 GLenum attachment, 449 GLuint texture, 450 GLint level, 451 GLsizei numViews, 452 const GLint *viewportOffsets); 453 454 bool ValidateIsQuery(Context *context, GLuint id); 455 456 bool ValidateUniform1ui(Context *context, GLint location, GLuint v0); 457 bool ValidateUniform2ui(Context *context, GLint location, GLuint v0, GLuint v1); 458 bool ValidateUniform3ui(Context *context, GLint location, GLuint v0, GLuint v1, GLuint v2); 459 bool ValidateUniform4ui(Context *context, 460 GLint location, 461 GLuint v0, 462 GLuint v1, 463 GLuint v2, 464 GLuint v3); 465 466 bool ValidateUniform1uiv(Context *context, GLint location, GLsizei count, const GLuint *value); 467 bool ValidateUniform2uiv(Context *context, GLint location, GLsizei count, const GLuint *value); 468 bool ValidateUniform3uiv(Context *context, GLint location, GLsizei count, const GLuint *value); 469 bool ValidateUniform4uiv(Context *context, GLint location, GLsizei count, const GLuint *value); 470 471 bool ValidateUniformMatrix2x3fv(Context *context, 472 GLint location, 473 GLsizei count, 474 GLboolean transpose, 475 const GLfloat *value); 476 bool ValidateUniformMatrix3x2fv(Context *context, 477 GLint location, 478 GLsizei count, 479 GLboolean transpose, 480 const GLfloat *value); 481 bool ValidateUniformMatrix2x4fv(Context *context, 482 GLint location, 483 GLsizei count, 484 GLboolean transpose, 485 const GLfloat *value); 486 bool ValidateUniformMatrix4x2fv(Context *context, 487 GLint location, 488 GLsizei count, 489 GLboolean transpose, 490 const GLfloat *value); 491 bool ValidateUniformMatrix3x4fv(Context *context, 492 GLint location, 493 GLsizei count, 494 GLboolean transpose, 495 const GLfloat *value); 496 bool ValidateUniformMatrix4x3fv(Context *context, 497 GLint location, 498 GLsizei count, 499 GLboolean transpose, 500 const GLfloat *value); 501 502 bool ValidateEndTransformFeedback(Context *context); 503 bool ValidateTransformFeedbackVaryings(Context *context, 504 GLuint program, 505 GLsizei count, 506 const GLchar *const *varyings, 507 GLenum bufferMode); 508 bool ValidateGetTransformFeedbackVarying(Context *context, 509 GLuint program, 510 GLuint index, 511 GLsizei bufSize, 512 GLsizei *length, 513 GLsizei *size, 514 GLenum *type, 515 GLchar *name); 516 bool ValidateBindTransformFeedback(Context *context, GLenum target, GLuint id); 517 bool ValidateIsTransformFeedback(Context *context, GLuint id); 518 bool ValidatePauseTransformFeedback(Context *context); 519 bool ValidateResumeTransformFeedback(Context *context); 520 bool ValidateVertexAttribI4i(Context *context, GLuint index, GLint x, GLint y, GLint z, GLint w); 521 bool ValidateVertexAttribI4ui(Context *context, 522 GLuint index, 523 GLuint x, 524 GLuint y, 525 GLuint z, 526 GLuint w); 527 bool ValidateVertexAttribI4iv(Context *context, GLuint index, const GLint *v); 528 bool ValidateVertexAttribI4uiv(Context *context, GLuint index, const GLuint *v); 529 bool ValidateGetFragDataLocation(Context *context, GLuint program, const GLchar *name); 530 bool ValidateGetUniformIndices(Context *context, 531 GLuint program, 532 GLsizei uniformCount, 533 const GLchar *const *uniformNames, 534 GLuint *uniformIndices); 535 bool ValidateGetActiveUniformsiv(Context *context, 536 GLuint program, 537 GLsizei uniformCount, 538 const GLuint *uniformIndices, 539 GLenum pname, 540 GLint *params); 541 bool ValidateGetUniformBlockIndex(Context *context, GLuint program, const GLchar *uniformBlockName); 542 bool ValidateGetActiveUniformBlockiv(Context *context, 543 GLuint program, 544 GLuint uniformBlockIndex, 545 GLenum pname, 546 GLint *params); 547 bool ValidateGetActiveUniformBlockName(Context *context, 548 GLuint program, 549 GLuint uniformBlockIndex, 550 GLsizei bufSize, 551 GLsizei *length, 552 GLchar *uniformBlockName); 553 bool ValidateUniformBlockBinding(Context *context, 554 GLuint program, 555 GLuint uniformBlockIndex, 556 GLuint uniformBlockBinding); 557 bool ValidateDrawArraysInstanced(Context *context, 558 GLenum mode, 559 GLint first, 560 GLsizei count, 561 GLsizei primcount); 562 563 bool ValidateFenceSync(Context *context, GLenum condition, GLbitfield flags); 564 bool ValidateIsSync(Context *context, GLsync sync); 565 bool ValidateDeleteSync(Context *context, GLsync sync); 566 bool ValidateClientWaitSync(Context *context, GLsync sync, GLbitfield flags, GLuint64 timeout); 567 bool ValidateWaitSync(Context *context, GLsync sync, GLbitfield flags, GLuint64 timeout); 568 bool ValidateGetInteger64v(Context *context, GLenum pname, GLint64 *params); 569 570 bool ValidateIsSampler(Context *context, GLuint sampler); 571 bool ValidateBindSampler(Context *context, GLuint unit, GLuint sampler); 572 bool ValidateVertexAttribDivisor(Context *context, GLuint index, GLuint divisor); 573 bool ValidateTexStorage2D(Context *context, 574 GLenum target, 575 GLsizei levels, 576 GLenum internalformat, 577 GLsizei width, 578 GLsizei height); 579 bool ValidateTexStorage3D(Context *context, 580 GLenum target, 581 GLsizei levels, 582 GLenum internalformat, 583 GLsizei width, 584 GLsizei height, 585 GLsizei depth); 586 587 bool ValidateGetVertexAttribIiv(Context *context, GLuint index, GLenum pname, GLint *params); 588 bool ValidateGetVertexAttribIuiv(Context *context, GLuint index, GLenum pname, GLuint *params); 589 bool ValidateGetBufferParameteri64v(ValidationContext *context, 590 BufferBinding target, 591 GLenum pname, 592 GLint64 *params); 593 bool ValidateSamplerParameteri(Context *context, GLuint sampler, GLenum pname, GLint param); 594 bool ValidateSamplerParameteriv(Context *context, 595 GLuint sampler, 596 GLenum pname, 597 const GLint *params); 598 bool ValidateSamplerParameterf(Context *context, GLuint sampler, GLenum pname, GLfloat param); 599 bool ValidateSamplerParameterfv(Context *context, 600 GLuint sampler, 601 GLenum pname, 602 const GLfloat *params); 603 bool ValidateGetSamplerParameteriv(Context *context, GLuint sampler, GLenum pname, GLint *params); 604 bool ValidateGetSamplerParameterfv(Context *context, GLuint sampler, GLenum pname, GLfloat *params); 605 bool ValidateGetInternalformativ(Context *context, 606 GLenum target, 607 GLenum internalformat, 608 GLenum pname, 609 GLsizei bufSize, 610 GLint *params); 611 612 } // namespace gl 613 614 #endif // LIBANGLE_VALIDATION_ES3_H_ 615