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