mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 21:20:12 +01:00
mesa/es: Validate glGetVertexAttribf pname in Mesa code rather than the ES wrapper
v2: Add proper core-profile and GLES3 filtering. v3: Allow glGetVertexAttribfv(0, GL_CURRENT_VERTEX_ATTRIB_ARB, param) in OpenGL 3.1, just like OpenGL ES 2.0. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
c13f36ce4e
commit
2c87030a00
2 changed files with 12 additions and 19 deletions
|
|
@ -1622,22 +1622,6 @@
|
|||
<param name="pname" type="GLenum"/>
|
||||
<vector name="params" type="GLtype *" size="dynamic"/>
|
||||
</proto>
|
||||
|
||||
<desc name="pname">
|
||||
<value name="GL_VERTEX_ATTRIB_ARRAY_ENABLED"/>
|
||||
<value name="GL_VERTEX_ATTRIB_ARRAY_SIZE"/>
|
||||
<value name="GL_VERTEX_ATTRIB_ARRAY_STRIDE"/>
|
||||
<value name="GL_VERTEX_ATTRIB_ARRAY_TYPE"/>
|
||||
<value name="GL_VERTEX_ATTRIB_ARRAY_NORMALIZED"/>
|
||||
<value name="GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"/>
|
||||
|
||||
<desc name="params" vector_size="1" convert="false"/>
|
||||
</desc>
|
||||
|
||||
<desc name="pname">
|
||||
<value name="GL_CURRENT_VERTEX_ATTRIB"/>
|
||||
<desc name="params" vector_size="16?" convert="false"/>
|
||||
</desc>
|
||||
</template>
|
||||
|
||||
<template name="GetVertexAttribPointer" direction="get">
|
||||
|
|
|
|||
|
|
@ -590,12 +590,15 @@ get_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname,
|
|||
case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB:
|
||||
return array->BufferObj->Name;
|
||||
case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
|
||||
if (ctx->Version >= 30 || ctx->Extensions.EXT_gpu_shader4) {
|
||||
if ((_mesa_is_desktop_gl(ctx)
|
||||
&& (ctx->Version >= 30 || ctx->Extensions.EXT_gpu_shader4))
|
||||
|| _mesa_is_gles3(ctx)) {
|
||||
return array->Integer;
|
||||
}
|
||||
goto error;
|
||||
case GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB:
|
||||
if (ctx->Extensions.ARB_instanced_arrays) {
|
||||
if ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_instanced_arrays)
|
||||
|| _mesa_is_gles3(ctx)) {
|
||||
return array->InstanceDivisor;
|
||||
}
|
||||
goto error;
|
||||
|
|
@ -613,7 +616,13 @@ static const GLfloat *
|
|||
get_current_attrib(struct gl_context *ctx, GLuint index, const char *function)
|
||||
{
|
||||
if (index == 0) {
|
||||
if (ctx->API != API_OPENGLES2) {
|
||||
/* In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES
|
||||
* 2.0. Note that we cannot just check for API_OPENGL_CORE here because
|
||||
* that will erroneously allow this usage in a 3.0 forward-compatible
|
||||
* context too.
|
||||
*/
|
||||
if ((ctx->API != API_OPENGL_CORE || ctx->Version < 31)
|
||||
&& ctx->API != API_OPENGLES2) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(index==0)", function);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue