Path: blob/main_old/extensions/ANGLE_robust_client_memory.txt
1693 views
Name12ANGLE_robust_client_memory34Name Strings56GL_ANGLE_robust_client_memory78Contributors910Geoff Lang, Google1112Contacts1314Geoff Lang, Google (geofflang 'at' google.com)1516Status1718Draft1920Version2122Version 4, March 30, 20172324Number2526OpenGL ES Extension #??2728Dependencies2930OpenGL ES 2.0 is required.3132This extension is written against the wording of the OpenGL ES333.2 specification.3435Interacts with GL_KHR_debug, GL_EXT_disjoint_timer_queries,36GL_KHR_robustness.3738Overview3940This extension adds overloads of many OpenGL ES functions that read from41and write to client memory to ensure that all reads and writes done by the42OpenGL ES implementation are safe. When the OpenGL ES API is exposed to43users through complex bindings such as WebGL, allowing undefined behaviour44that may result in crashing the implementation is not acceptable.4546New Types4748None4950New Procedures and Functions5152void GetBooleanvRobustANGLE(enum pname, sizei bufSize, sizei *length, boolean *data)53void GetBufferParameterivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)54void GetFloatvRobustANGLE(enum pname, sizei bufSize, sizei *length, float *data)55void GetFramebufferAttachmentParameterivRobustANGLE(enum target, enum attachment, enum pname, sizei bufSize, sizei *length, int *params)56void GetIntegervRobustANGLE(enum pname, sizei bufSize, sizei *length, int *data)57void GetProgramivRobustANGLE(uint program, enum pname, sizei bufSize, sizei *length, int *params)58void GetRenderbufferParameterivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)59void GetShaderivRobustANGLE(uint shader, enum pname, sizei bufSize, sizei *length, int *params)60void GetTexParameterfvRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, float *params)61void GetTexParameterivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)62void GetUniformfvRobustANGLE(uint program, int location, sizei bufSize, sizei *length, float *params)63void GetUniformivRobustANGLE(uint program, int location, sizei bufSize, sizei *length, int *params)64void GetVertexAttribfvRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, float *params)65void GetVertexAttribivRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, int *params)66void GetVertexAttribPointervRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, void **pointer)67void ReadPixelsRobustANGLE(int x, int y, sizei width, sizei height, enum format, enum type, sizei bufSize, sizei *length, sizei *columns, sizei *rows, void *pixels)68void TexImage2DRobustANGLE(enum target, int level, int internalformat, sizei width, sizei height, int border, enum format, enum type, sizei bufSize, const void *pixels)69void TexParameterfvRobustANGLE(enum target, enum pname, sizei bufSize, const GLfloat *params)70void TexParameterivRobustANGLE(enum target, enum pname, sizei bufSize, const GLint *params)71void TexSubImage2DRobustANGLE(enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, enum type, sizei bufSize, const void *pixels)72void CompressedTexImage2D(enum target, int level, enum internalformat, sizei width, sizei height, int border, sizei imageSize, sizei bufSize, const void* data)73void CompressedTexSubImage2D(enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, sizei imageSize, sizei bufSize, const void* data)74void CompressedTexImage3D(enum target, int level, enum internalformat, sizei width, sizei height, sizei depth, int border, sizei imageSize, sizei bufSize, const void* data)75void CompressedTexSubImage3D(enum target, int level, int xoffset, int yoffset, int zoffset, sizei width, sizei height, sizei depth, enum format, sizei imageSize, sizei bufSize, const void* data)7677void TexImage3DRobustANGLE(enum target, int level, int internalformat, sizei width, sizei height, sizei depth, int border, enum format, enum type, sizei bufSize, const void *pixels);78void TexSubImage3DRobustANGLE(enum target, int level, int xoffset, int yoffset, int zoffset, sizei width, sizei height, sizei depth, enum format, enum type, sizei bufSize, const void *pixels);79void GetQueryivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)80void GetQueryObjectuivRobustANGLE(uint id, enum pname, sizei bufSize, sizei *length, uint *params)81void GetBufferPointervRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, void **params)82void GetIntegeri_vRobustANGLE(enum target, uint index, sizei bufSize, sizei *length, int *data)83void GetInternalformativRobustANGLE(enum target, enum internalformat, enum pname, sizei bufSize, sizei *length, int *params)84void GetVertexAttribIivRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, int *params)85void GetVertexAttribIuivRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, uint *params)86void GetUniformuivRobustANGLE(uint program, int location, sizei bufSize, sizei *length, uint *params)87void GetActiveUniformBlockivRobustANGLE(uint program, uint uniformBlockIndex, enum pname, sizei bufSize, sizei *length, int *params)88void GetInteger64vRobustANGLE(enum pname, sizei bufSize, sizei *length, int64 *data)89void GetInteger64i_vRobustANGLE(enum target, uint index, sizei bufSize, sizei *length, int64 *data)90void GetBufferParameteri64vRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int64 *params)91void SamplerParameterivRobustANGLE(uint sampler, enum pname, sizei bufSize, const GLint *param)92void SamplerParameterfvRobustANGLE(uint sampler, enum pname, sizei bufSize, const GLfloat *param)93void GetSamplerParameterivRobustANGLE(uint sampler, enum pname, sizei bufSize, sizei *length, int *params)94void GetSamplerParameterfvRobustANGLE(uint sampler, enum pname, sizei bufSize, sizei *length, float *params)9596void GetFramebufferParameterivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)97void GetProgramInterfaceivRobustANGLE(uint program, enum programInterface, enum pname, sizei bufSize, sizei *length, int *params)98void GetBooleani_vRobustANGLE(enum target, uint index, sizei bufSize, sizei *length, boolean *data)99void GetMultisamplefvRobustANGLE(enum pname, uint index, sizei bufSize, sizei *length, float *val)100void GetTexLevelParameterivRobustANGLE(enum target, int level, enum pname, sizei bufSize, sizei *length, int *params)101void GetTexLevelParameterfvRobustANGLE(enum target, int level, enum pname, sizei bufSize, sizei *length, float *params)102103void GetPointervRobustANGLERobustANGLE(enum pname, sizei bufSize, sizei *length, void **params)104void ReadnPixelsRobustANGLE(int x, int y, sizei width, sizei height, enum format, enum type, sizei bufSize, sizei *length, sizei *columns, sizei *rows, void *data)105void GetnUniformfvRobustANGLE(uint program, int location, sizei bufSize, sizei *length, float *params)106void GetnUniformivRobustANGLE(uint program, int location, sizei bufSize, sizei *length, int *params)107void GetnUniformuivRobustANGLE(uint program, int location, sizei bufSize, sizei *length, uint *params)108void TexParameterIivRobustANGLE(enum target, enum pname, sizei bufSize, const GLint *params)109void TexParameterIuivRobustANGLE(enum target, enum pname, sizei bufSize, const GLuint *params)110void GetTexParameterIivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)111void GetTexParameterIuivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, uint *params)112void SamplerParameterIivRobustANGLE(uint sampler, enum pname, sizei bufSize, const GLint *param)113void SamplerParameterIuivRobustANGLE(uint sampler, enum pname, sizei bufSize, const GLuint *param)114void GetSamplerParameterIivRobustANGLE(uint sampler, enum pname, sizei bufSize, sizei *length, int *params)115void GetSamplerParameterIuivRobustANGLE(uint sampler, enum pname, sizei bufSize, sizei *length, uint *params)116117void GetQueryObjectivRobustANGLE(uint id, enum pname, sizei bufSize, sizei *length, int *params)118void GetQueryObjecti64vRobustANGLE(uint id, enum pname, sizei bufSize, sizei *length, int64 *params)119void GetQueryObjectui64vRobustANGLE(uint id, enum pname, sizei bufSize, sizei *length, uint64 *params)120121New Tokens122123None124125Additions to the OpenGL ES Specification:126127The xRobustANGLE entry points perform additional validation using <bufSize>128to indicate the maximum number of values that can be read from or written129to the provided buffer. INVALID_OPERATION is generated if <bufSize> is not130large enough. The optional <length> specifies an address of a variable to131recieve the number of values written to the buffer. When an error is132generated nothing will be written to <length>.133134The <columns> and <rows> parameters of ReadPixelsRobustANGLE and135ReadnPixelsRobustANGLE specify addresses of variables to recieve the number136of columns and rows of pixels written to the buffer which may be less than137the <width> and <height> parameters if they would have read outside of the138framebuffer.139140Calls to "xRobustANGLE" will generate errors under the same conditions as141"x". Any instances of undefined behaviour in "x" will also be undefined in142"xRobustANGLE". For example, it is invalid to call143GetPointervRobustANGLERobustANGLE without first verifying that the context144is at least OpenGL ES version 3.2 or the GL_KHR_debug extension is present.145146Issues1471481) Should additional entry points be added to specify sizes of client side149data provided to the VertexAttribPointer functions?1501512) Should <length> be allowed to be null?152153RESOLVED: Yes, <length> will not be written to when it is a null154pointer.1551563) Should <bufSize> be specified in bytes or values (uint, int, float,157etc)?158159There is no consistancy in current entry points for this. For example,160glGetnUniformuiv indicates that bufSize is in bytes while GetSynciv161uses values despite GetnUniformuiv having a clear value type.162163RESOLOVED: <bufSize> always indicates size in values. Functions that164specify data by void* such as TexImage2DRobustANGLE treat the client165data as bytes.1661674) Should <length> be written to if an error is generated?168169RESOLVED: No, using the prescedent set by glGetSynciv.170171Revision History172173Rev. Date Author Changes174---- ------------- --------- -------------------------------------------1751 Sept 26, 2016 geofflang Initial version1762 Sept 28, 2016 geofflang Changed name from ANGLE_robust_queries to177ANGLE_robust_client_memory, added issue 3.1783 Oct 7, 2016 geofflang Added and resolved issue 4.1794 Mar 30, 2017 geofflang Added columns and rows to ReadPixels.180181182