1 // 2 // Copyright (c) 2015 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 // validationEGL.h: Validation functions for generic EGL entry point parameters 8 9 #ifndef LIBANGLE_VALIDATIONEGL_H_ 10 #define LIBANGLE_VALIDATIONEGL_H_ 11 12 #include "libANGLE/Error.h" 13 14 #include <EGL/egl.h> 15 #include <EGL/eglext.h> 16 17 namespace gl 18 { 19 class Context; 20 } 21 22 namespace egl 23 { 24 25 class AttributeMap; 26 struct ClientExtensions; 27 struct Config; 28 class Device; 29 class Display; 30 class Image; 31 class Stream; 32 class Surface; 33 34 // Object validation 35 Error ValidateDisplay(const Display *display); 36 Error ValidateSurface(const Display *display, const Surface *surface); 37 Error ValidateConfig(const Display *display, const Config *config); 38 Error ValidateContext(const Display *display, const gl::Context *context); 39 Error ValidateImage(const Display *display, const Image *image); 40 41 // Entry point validation 42 Error ValidateCreateContext(Display *display, Config *configuration, gl::Context *shareContext, 43 const AttributeMap& attributes); 44 45 Error ValidateCreateWindowSurface(Display *display, Config *config, EGLNativeWindowType window, 46 const AttributeMap& attributes); 47 48 Error ValidateCreatePbufferSurface(Display *display, Config *config, const AttributeMap& attributes); 49 Error ValidateCreatePbufferFromClientBuffer(Display *display, EGLenum buftype, EGLClientBuffer buffer, 50 Config *config, const AttributeMap& attributes); 51 52 Error ValidateMakeCurrent(Display *display, EGLSurface draw, EGLSurface read, gl::Context *context); 53 54 Error ValidateCreateImageKHR(const Display *display, 55 gl::Context *context, 56 EGLenum target, 57 EGLClientBuffer buffer, 58 const AttributeMap &attributes); 59 Error ValidateDestroyImageKHR(const Display *display, const Image *image); 60 61 Error ValidateCreateDeviceANGLE(EGLint device_type, 62 void *native_device, 63 const EGLAttrib *attrib_list); 64 Error ValidateReleaseDeviceANGLE(Device *device); 65 66 Error ValidateCreateStreamKHR(const Display *display, const AttributeMap &attributes); 67 Error ValidateDestroyStreamKHR(const Display *display, const Stream *stream); 68 Error ValidateStreamAttribKHR(const Display *display, 69 const Stream *stream, 70 EGLint attribute, 71 EGLint value); 72 Error ValidateQueryStreamKHR(const Display *display, 73 const Stream *stream, 74 EGLenum attribute, 75 EGLint *value); 76 Error ValidateQueryStreamu64KHR(const Display *display, 77 const Stream *stream, 78 EGLenum attribute, 79 EGLuint64KHR *value); 80 Error ValidateStreamConsumerGLTextureExternalKHR(const Display *display, 81 gl::Context *context, 82 const Stream *stream); 83 Error ValidateStreamConsumerAcquireKHR(const Display *display, 84 gl::Context *context, 85 const Stream *stream); 86 Error ValidateStreamConsumerReleaseKHR(const Display *display, 87 gl::Context *context, 88 const Stream *stream); 89 Error ValidateStreamConsumerGLTextureExternalAttribsNV(const Display *display, 90 gl::Context *context, 91 const Stream *stream, 92 const AttributeMap &attribs); 93 Error ValidateCreateStreamProducerD3DTextureNV12ANGLE(const Display *display, 94 const Stream *stream, 95 const AttributeMap &attribs); 96 Error ValidateStreamPostD3DTextureNV12ANGLE(const Display *display, 97 const Stream *stream, 98 void *texture, 99 const AttributeMap &attribs); 100 101 Error ValidateGetSyncValuesCHROMIUM(const Display *display, 102 const Surface *surface, 103 const EGLuint64KHR *ust, 104 const EGLuint64KHR *msc, 105 const EGLuint64KHR *sbc); 106 107 Error ValidateSwapBuffersWithDamageEXT(const Display *display, 108 const Surface *surface, 109 EGLint *rects, 110 EGLint n_rects); 111 112 Error ValidateGetConfigAttrib(const Display *display, const Config *config, EGLint attribute); 113 Error ValidateChooseConfig(const Display *display, 114 const AttributeMap &attribs, 115 EGLint configSize, 116 EGLint *numConfig); 117 Error ValidateGetConfigs(const Display *display, EGLint configSize, EGLint *numConfig); 118 119 // Other validation 120 Error ValidateCompatibleConfigs(const Display *display, 121 const Config *config1, 122 const Surface *surface, 123 const Config *config2, 124 EGLint surfaceType); 125 126 Error ValidateGetPlatformDisplay(EGLenum platform, 127 void *native_display, 128 const EGLAttrib *attrib_list); 129 Error ValidateGetPlatformDisplayEXT(EGLenum platform, 130 void *native_display, 131 const EGLint *attrib_list); 132 133 Error ValidateProgramCacheGetAttribANGLE(const Display *display, EGLenum attrib); 134 135 Error ValidateProgramCacheQueryANGLE(const Display *display, 136 EGLint index, 137 void *key, 138 EGLint *keysize, 139 void *binary, 140 EGLint *binarysize); 141 142 Error ValidateProgramCachePopulateANGLE(const Display *display, 143 const void *key, 144 EGLint keysize, 145 const void *binary, 146 EGLint binarysize); 147 148 Error ValidateProgramCacheResizeANGLE(const Display *display, EGLint limit, EGLenum mode); 149 150 Error ValidateSurfaceAttrib(const Display *display, 151 const Surface *surface, 152 EGLint attribute, 153 EGLint value); 154 Error ValidateQuerySurface(const Display *display, 155 const Surface *surface, 156 EGLint attribute, 157 EGLint *value); 158 Error ValidateQueryContext(const Display *display, 159 const gl::Context *context, 160 EGLint attribute, 161 EGLint *value); 162 163 } // namespace egl 164 165 #define ANGLE_EGL_TRY(THREAD, EXPR) \ 166 { \ 167 auto ANGLE_LOCAL_VAR = (EXPR); \ 168 if (ANGLE_LOCAL_VAR.isError()) \ 169 return THREAD->setError(ANGLE_LOCAL_VAR); \ 170 } 171 172 #define ANGLE_EGL_TRY_RETURN(THREAD, EXPR, RETVAL) \ 173 { \ 174 auto ANGLE_LOCAL_VAR = (EXPR); \ 175 if (ANGLE_LOCAL_VAR.isError()) \ 176 { \ 177 THREAD->setError(ANGLE_LOCAL_VAR); \ 178 return RETVAL; \ 179 } \ 180 } 181 182 #endif // LIBANGLE_VALIDATIONEGL_H_ 183