2016-09-07 18:32:23 +03:00
|
|
|
Name
|
|
|
|
|
|
|
|
ANGLE_robust_client_memory
|
|
|
|
|
|
|
|
Name Strings
|
|
|
|
|
|
|
|
GL_ANGLE_robust_client_memory
|
|
|
|
|
|
|
|
Contributors
|
|
|
|
|
|
|
|
Geoff Lang, Google
|
|
|
|
|
|
|
|
Contacts
|
|
|
|
|
|
|
|
Geoff Lang, Google (geofflang 'at' google.com)
|
|
|
|
|
|
|
|
Status
|
|
|
|
|
|
|
|
Draft
|
|
|
|
|
|
|
|
Version
|
|
|
|
|
2016-10-07 20:20:52 +03:00
|
|
|
Version 3, October 7, 2016
|
2016-09-07 18:32:23 +03:00
|
|
|
|
|
|
|
Number
|
|
|
|
|
|
|
|
OpenGL ES Extension #??
|
|
|
|
|
|
|
|
Dependencies
|
|
|
|
|
|
|
|
OpenGL ES 2.0 is required.
|
|
|
|
|
|
|
|
This extension is written against the wording of the OpenGL ES
|
|
|
|
3.2 specification.
|
|
|
|
|
|
|
|
Interacts with GL_KHR_debug, GL_EXT_disjoint_timer_queries,
|
|
|
|
GL_KHR_robustness.
|
|
|
|
|
|
|
|
Overview
|
|
|
|
|
|
|
|
This extension adds overloads of many OpenGL ES functions that read from
|
|
|
|
and write to client memory to ensure that all reads and writes done by the
|
|
|
|
OpenGL ES implementation are safe. When the OpenGL ES API is exposed to
|
|
|
|
users through complex bindings such as WebGL, allowing undefined behaviour
|
|
|
|
that may result in crashing the implementation is not acceptable.
|
|
|
|
|
|
|
|
New Types
|
|
|
|
|
|
|
|
None
|
|
|
|
|
|
|
|
New Procedures and Functions
|
|
|
|
|
|
|
|
void GetBooleanvRobustANGLE(enum pname, sizei bufSize, sizei *length, boolean *data)
|
|
|
|
void GetBufferParameterivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetFloatvRobustANGLE(enum pname, sizei bufSize, sizei *length, float *data)
|
|
|
|
void GetFramebufferAttachmentParameterivRobustANGLE(enum target, enum attachment, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetIntegervRobustANGLE(enum pname, sizei bufSize, sizei *length, int *data)
|
|
|
|
void GetProgramivRobustANGLE(uint program, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetRenderbufferParameterivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetShaderivRobustANGLE(uint shader, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetTexParameterfvRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, float *params)
|
|
|
|
void GetTexParameterivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetUniformfvRobustANGLE(uint program, int location, sizei bufSize, sizei *length, float *params)
|
|
|
|
void GetUniformivRobustANGLE(uint program, int location, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetVertexAttribfvRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, float *params)
|
|
|
|
void GetVertexAttribivRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetVertexAttribPointervRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, void **pointer)
|
|
|
|
void ReadPixelsRobustANGLE(int x, int y, sizei width, sizei height, enum format, enum type, sizei bufSize, sizei *length, void *pixels)
|
|
|
|
void TexImage2DRobustANGLE(enum target, int level, int internalformat, sizei width, sizei height, int border, enum format, enum type, sizei bufSize, const void *pixels)
|
|
|
|
void TexParameterfvRobustANGLE(enum target, enum pname, sizei bufSize, const GLfloat *params)
|
|
|
|
void TexParameterivRobustANGLE(enum target, enum pname, sizei bufSize, const GLint *params)
|
|
|
|
void TexSubImage2DRobustANGLE(enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, enum type, sizei bufSize, const void *pixels)
|
|
|
|
|
|
|
|
void TexImage3DRobustANGLE(enum target, int level, int internalformat, sizei width, sizei height, sizei depth, int border, enum format, enum type, sizei bufSize, const void *pixels);
|
|
|
|
void 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);
|
|
|
|
void GetQueryivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetQueryObjectuivRobustANGLE(uint id, enum pname, sizei bufSize, sizei *length, uint *params)
|
|
|
|
void GetBufferPointervRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, void **params)
|
|
|
|
void GetIntegeri_vRobustANGLE(enum target, uint index, sizei bufSize, sizei *length, int *data)
|
|
|
|
void GetVertexAttribIivRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetVertexAttribIuivRobustANGLE(uint index, enum pname, sizei bufSize, sizei *length, uint *params)
|
|
|
|
void GetUniformuivRobustANGLE(uint program, int location, sizei bufSize, sizei *length, uint *params)
|
|
|
|
void GetActiveUniformBlockivRobustANGLE(uint program, uint uniformBlockIndex, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetInteger64vRobustANGLE(enum pname, sizei bufSize, sizei *length, int64 *data)
|
|
|
|
void GetInteger64i_vRobustANGLE(enum target, uint index, sizei bufSize, sizei *length, int64 *data)
|
|
|
|
void GetBufferParameteri64vRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int64 *params)
|
|
|
|
void SamplerParameterivRobustANGLE(uint sampler, enum pname, sizei bufSize, const GLint *param)
|
|
|
|
void SamplerParameterfvRobustANGLE(uint sampler, enum pname, sizei bufSize, const GLfloat *param)
|
|
|
|
void GetSamplerParameterivRobustANGLE(uint sampler, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetSamplerParameterfvRobustANGLE(uint sampler, enum pname, sizei bufSize, sizei *length, float *params)
|
|
|
|
|
|
|
|
void GetFramebufferParameterivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetProgramInterfaceivRobustANGLE(uint program, enum programInterface, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetBooleani_vRobustANGLE(enum target, uint index, sizei bufSize, sizei *length, boolean *data)
|
|
|
|
void GetMultisamplefvRobustANGLE(enum pname, uint index, sizei bufSize, sizei *length, float *val)
|
|
|
|
void GetTexLevelParameterivRobustANGLE(enum target, int level, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetTexLevelParameterfvRobustANGLE(enum target, int level, enum pname, sizei bufSize, sizei *length, float *params)
|
|
|
|
|
|
|
|
void GetPointervRobustANGLERobustANGLE(enum pname, sizei bufSize, sizei *length, void **params)
|
|
|
|
void ReadnPixelsRobustANGLE(int x, int y, sizei width, sizei height, enum format, enum type, sizei bufSize, sizei *length, void *data)
|
|
|
|
void GetnUniformfvRobustANGLE(uint program, int location, sizei bufSize, sizei *length, float *params)
|
|
|
|
void GetnUniformivRobustANGLE(uint program, int location, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetnUniformuivRobustANGLE(uint program, int location, sizei bufSize, sizei *length, uint *params)
|
|
|
|
void TexParameterIivRobustANGLE(enum target, enum pname, sizei bufSize, const GLint *params)
|
|
|
|
void TexParameterIuivRobustANGLE(enum target, enum pname, sizei bufSize, const GLuint *params)
|
|
|
|
void GetTexParameterIivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetTexParameterIuivRobustANGLE(enum target, enum pname, sizei bufSize, sizei *length, uint *params)
|
|
|
|
void SamplerParameterIivRobustANGLE(uint sampler, enum pname, sizei bufSize, const GLint *param)
|
|
|
|
void SamplerParameterIuivRobustANGLE(uint sampler, enum pname, sizei bufSize, const GLuint *param)
|
|
|
|
void GetSamplerParameterIivRobustANGLE(uint sampler, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetSamplerParameterIuivRobustANGLE(uint sampler, enum pname, sizei bufSize, sizei *length, uint *params)
|
|
|
|
|
|
|
|
void GetQueryObjectivRobustANGLE(uint id, enum pname, sizei bufSize, sizei *length, int *params)
|
|
|
|
void GetQueryObjecti64vRobustANGLE(uint id, enum pname, sizei bufSize, sizei *length, int64 *params)
|
|
|
|
void GetQueryObjectui64vRobustANGLE(uint id, enum pname, sizei bufSize, sizei *length, uint64 *params)
|
|
|
|
|
|
|
|
New Tokens
|
|
|
|
|
|
|
|
None
|
|
|
|
|
|
|
|
Additions to the OpenGL ES Specification:
|
|
|
|
|
|
|
|
The xRobustANGLE entry points perform additional validation using <bufSize>
|
|
|
|
to indicate the maximum number of values that can be read from or written
|
|
|
|
to the provided buffer. INVALID_OPERATION is generated if <bufSize> is not
|
|
|
|
large enough. The optional <length> specifies an address of a variable to
|
|
|
|
recieve the number of values written to the buffer. When an error is
|
2016-10-07 20:20:52 +03:00
|
|
|
generated nothing will be written to <length>.
|
2016-09-07 18:32:23 +03:00
|
|
|
|
|
|
|
Calls to "xRobustANGLE" will generate errors under the same conditions as
|
|
|
|
"x". Any instances of undefined behaviour in "x" will also be undefined in
|
|
|
|
"xRobustANGLE". For example, it is invalid to call
|
|
|
|
GetPointervRobustANGLERobustANGLE without first verifying that the context
|
|
|
|
is at least OpenGL ES version 3.2 or the GL_KHR_debug extension is present.
|
|
|
|
|
|
|
|
Issues
|
|
|
|
|
|
|
|
1) Should additional entry points be added to specify sizes of client side
|
|
|
|
data provided to the VertexAttribPointer functions?
|
|
|
|
|
|
|
|
2) Should <length> be allowed to be null?
|
|
|
|
|
|
|
|
RESOLVED: Yes, <length> will not be written to when it is a null
|
|
|
|
pointer.
|
|
|
|
|
|
|
|
3) Should <bufSize> be specified in bytes or values (uint, int, float,
|
|
|
|
etc)?
|
|
|
|
|
|
|
|
There is no consistancy in current entry points for this. For example,
|
|
|
|
glGetnUniformuiv indicates that bufSize is in bytes while GetSynciv
|
|
|
|
uses values despite GetnUniformuiv having a clear value type.
|
|
|
|
|
|
|
|
RESOLOVED: <bufSize> always indicates size in values. Functions that
|
|
|
|
specify data by void* such as TexImage2DRobustANGLE treat the client
|
|
|
|
data as bytes.
|
|
|
|
|
2016-10-07 20:20:52 +03:00
|
|
|
4) Should <length> be written to if an error is generated?
|
|
|
|
|
|
|
|
RESOLVED: No, using the prescedent set by glGetSynciv.
|
|
|
|
|
2016-09-07 18:32:23 +03:00
|
|
|
Revision History
|
|
|
|
|
|
|
|
Rev. Date Author Changes
|
|
|
|
---- ------------- --------- -------------------------------------------
|
|
|
|
1 Sept 26, 2016 geofflang Initial version
|
|
|
|
2 Sept 28, 2016 geofflang Changed name from ANGLE_robust_queries to
|
|
|
|
ANGLE_robust_client_memory, added issue 3.
|
2016-10-07 20:20:52 +03:00
|
|
|
3 Oct 7, 2016 geofflang Added and resolved issue 4.
|