mesa/es: Validate buffer object targets in Mesa code rather than the ES wrapper

v2: Add proper core-profile and GLES3 filtering.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Ian Romanick 2012-07-25 15:29:48 -07:00
parent e2cf14d7b2
commit b0b6b76d52
2 changed files with 8 additions and 36 deletions

View file

@ -1806,11 +1806,6 @@
<param name="pname" type="GLenum"/> <param name="pname" type="GLenum"/>
<vector name="params" type="GLvoid **" size="dynamic"/> <vector name="params" type="GLvoid **" size="dynamic"/>
</proto> </proto>
<desc name="target">
<value name="GL_ARRAY_BUFFER"/>
<value name="GL_ELEMENT_ARRAY_BUFFER"/>
</desc>
</template> </template>
<template name="MapBuffer" direction="get"> <template name="MapBuffer" direction="get">
@ -1820,11 +1815,6 @@
<param name="access" type="GLenum"/> <param name="access" type="GLenum"/>
</proto> </proto>
<desc name="target">
<value name="GL_ARRAY_BUFFER"/>
<value name="GL_ELEMENT_ARRAY_BUFFER"/>
</desc>
<desc name="access"> <desc name="access">
<value name="GL_WRITE_ONLY_OES"/> <value name="GL_WRITE_ONLY_OES"/>
</desc> </desc>
@ -1835,11 +1825,6 @@
<return type="GLboolean"/> <return type="GLboolean"/>
<param name="target" type="GLenum"/> <param name="target" type="GLenum"/>
</proto> </proto>
<desc name="target">
<value name="GL_ARRAY_BUFFER"/>
<value name="GL_ELEMENT_ARRAY_BUFFER"/>
</desc>
</template> </template>
<template name="BindBuffer"> <template name="BindBuffer">
@ -1848,11 +1833,6 @@
<param name="target" type="GLenum"/> <param name="target" type="GLenum"/>
<param name="buffer" type="GLuint"/> <param name="buffer" type="GLuint"/>
</proto> </proto>
<desc name="target">
<value name="GL_ARRAY_BUFFER"/>
<value name="GL_ELEMENT_ARRAY_BUFFER"/>
</desc>
</template> </template>
<template name="BufferData"> <template name="BufferData">
@ -1864,11 +1844,6 @@
<param name="usage" type="GLenum"/> <param name="usage" type="GLenum"/>
</proto> </proto>
<desc name="target">
<value name="GL_ARRAY_BUFFER"/>
<value name="GL_ELEMENT_ARRAY_BUFFER"/>
</desc>
<desc name="usage"> <desc name="usage">
<value name="GL_STATIC_DRAW"/> <value name="GL_STATIC_DRAW"/>
<value name="GL_DYNAMIC_DRAW"/> <value name="GL_DYNAMIC_DRAW"/>
@ -1884,11 +1859,6 @@
<param name="size" type="GLsizeiptr"/> <param name="size" type="GLsizeiptr"/>
<param name="data" type="const GLvoid *"/> <param name="data" type="const GLvoid *"/>
</proto> </proto>
<desc name="target">
<value name="GL_ARRAY_BUFFER"/>
<value name="GL_ELEMENT_ARRAY_BUFFER"/>
</desc>
</template> </template>
<template name="DeleteBuffers"> <template name="DeleteBuffers">
@ -1915,11 +1885,6 @@
<vector name="params" type="GLtype *" size="dynamic"/> <vector name="params" type="GLtype *" size="dynamic"/>
</proto> </proto>
<desc name="target">
<value name="GL_ARRAY_BUFFER"/>
<value name="GL_ELEMENT_ARRAY_BUFFER"/>
</desc>
<desc name="pname"> <desc name="pname">
<value name="GL_BUFFER_SIZE"/> <value name="GL_BUFFER_SIZE"/>
<value name="GL_BUFFER_USAGE"/> <value name="GL_BUFFER_USAGE"/>

View file

@ -68,6 +68,12 @@ static struct gl_buffer_object DummyBufferObject;
static inline struct gl_buffer_object ** static inline struct gl_buffer_object **
get_buffer_target(struct gl_context *ctx, GLenum target) get_buffer_target(struct gl_context *ctx, GLenum target)
{ {
/* Other targets are only supported in desktop OpenGL and OpenGL ES 3.0.
*/
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)
&& target != GL_ARRAY_BUFFER && target != GL_ELEMENT_ARRAY_BUFFER)
return NULL;
switch (target) { switch (target) {
case GL_ARRAY_BUFFER_ARB: case GL_ARRAY_BUFFER_ARB:
return &ctx->Array.ArrayBufferObj; return &ctx->Array.ArrayBufferObj;
@ -89,7 +95,8 @@ get_buffer_target(struct gl_context *ctx, GLenum target)
break; break;
#endif #endif
case GL_TEXTURE_BUFFER: case GL_TEXTURE_BUFFER:
if (ctx->Extensions.ARB_texture_buffer_object) { if (_mesa_is_desktop_gl(ctx)
&& ctx->Extensions.ARB_texture_buffer_object) {
return &ctx->Texture.BufferObject; return &ctx->Texture.BufferObject;
} }
break; break;