mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 12:50:10 +01:00
mesa/varray: make use of dispatch KHR_no_error support
Make use of dispatch KHR_no_error support for varray functions. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
2f541f63ea
commit
e473fdcdab
6 changed files with 367 additions and 178 deletions
|
|
@ -51,7 +51,7 @@
|
|||
<param name="v" type="const GLdouble *"/>
|
||||
</function>
|
||||
|
||||
<function name="VertexAttribLPointer">
|
||||
<function name="VertexAttribLPointer" no_error="true">
|
||||
<param name="index" type="GLuint"/>
|
||||
<param name="size" type="GLint"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
|
|
|
|||
|
|
@ -257,6 +257,7 @@
|
|||
<!-- These functions alias ones from GL_EXT_gpu_shader4 -->
|
||||
|
||||
<function name="VertexAttribIPointer" es2="3.0" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="index" type="GLuint"/>
|
||||
<param name="size" type="GLint"/>
|
||||
|
|
@ -624,7 +625,7 @@
|
|||
<enum name="TEXTURE_SWIZZLE_A" value="0x8E45"/>
|
||||
<enum name="TEXTURE_SWIZZLE_RGBA" value="0x8E46"/>
|
||||
|
||||
<function name="VertexAttribDivisor" es2="3.0">
|
||||
<function name="VertexAttribDivisor" es2="3.0" no_error="true">
|
||||
<param name="index" type="GLuint"/>
|
||||
<param name="divisor" type="GLuint"/>
|
||||
</function>
|
||||
|
|
|
|||
|
|
@ -318,7 +318,8 @@
|
|||
<enum name="POINT_SIZE_ARRAY_OES" value="0x8B9C"/>
|
||||
<enum name="POINT_SIZE_ARRAY_BUFFER_BINDING_OES" value="0x8B9F"/>
|
||||
|
||||
<function name="PointSizePointerOES" es1="1.0" desktop="false">
|
||||
<function name="PointSizePointerOES" es1="1.0" desktop="false"
|
||||
no_error="true">
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="stride" type="GLsizei"/>
|
||||
<param name="pointer" type="const GLvoid *"/>
|
||||
|
|
|
|||
|
|
@ -3154,6 +3154,7 @@
|
|||
</function>
|
||||
|
||||
<function name="ColorPointer" es1="1.0" deprecated="3.1" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="size" type="GLint"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
|
|
@ -3184,6 +3185,7 @@
|
|||
</function>
|
||||
|
||||
<function name="EdgeFlagPointer" deprecated="3.1" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="stride" type="GLsizei"/>
|
||||
<param name="pointer" type="const GLvoid *"/>
|
||||
|
|
@ -3202,6 +3204,7 @@
|
|||
</function>
|
||||
|
||||
<function name="IndexPointer" deprecated="3.1" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="stride" type="GLsizei"/>
|
||||
|
|
@ -3217,6 +3220,7 @@
|
|||
</function>
|
||||
|
||||
<function name="NormalPointer" es1="1.0" deprecated="3.1" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="stride" type="GLsizei"/>
|
||||
|
|
@ -3225,6 +3229,7 @@
|
|||
</function>
|
||||
|
||||
<function name="TexCoordPointer" es1="1.0" deprecated="3.1" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="size" type="GLint"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
|
|
@ -3234,6 +3239,7 @@
|
|||
</function>
|
||||
|
||||
<function name="VertexPointer" es1="1.0" deprecated="3.1" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="size" type="GLint"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
|
|
@ -4725,6 +4731,7 @@
|
|||
</function>
|
||||
|
||||
<function name="FogCoordPointer" deprecated="3.1" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="stride" type="GLsizei"/>
|
||||
|
|
@ -4862,6 +4869,7 @@
|
|||
</function>
|
||||
|
||||
<function name="SecondaryColorPointer" deprecated="3.1" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="size" type="GLint"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
|
|
@ -5817,6 +5825,7 @@
|
|||
</function>
|
||||
|
||||
<function name="VertexAttribPointer" es2="2.0" marshal="async"
|
||||
no_error="true"
|
||||
marshal_fail="_mesa_glthread_is_non_vbo_vertex_attrib_pointer(ctx)">
|
||||
<param name="index" type="GLuint"/>
|
||||
<param name="size" type="GLint"/>
|
||||
|
|
|
|||
|
|
@ -577,6 +577,17 @@ update_array(struct gl_context *ctx,
|
|||
effectiveStride);
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexPointer_no_error(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_POS, GL_RGBA, 4, size, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
|
||||
|
|
@ -586,26 +597,35 @@ _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
GLbitfield legalTypes = (ctx->API == API_OPENGLES)
|
||||
? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
|
||||
: (SHORT_BIT | INT_BIT | FLOAT_BIT |
|
||||
DOUBLE_BIT | HALF_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
GLbitfield legalTypes = (ctx->API == API_OPENGLES)
|
||||
? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
|
||||
: (SHORT_BIT | INT_BIT | FLOAT_BIT |
|
||||
DOUBLE_BIT | HALF_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glVertexPointer", VERT_ATTRIB_POS,
|
||||
legalTypes, 2, 4, size, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
}
|
||||
if (!validate_array_and_format(ctx, "glVertexPointer", VERT_ATTRIB_POS,
|
||||
legalTypes, 2, 4, size, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_POS, format, 4, size, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_NormalPointer_no_error(GLenum type, GLsizei stride, const GLvoid *ptr )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_NORMAL, GL_RGBA, 3, 3, type, stride, GL_TRUE,
|
||||
GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
|
||||
{
|
||||
|
|
@ -614,26 +634,37 @@ _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
const GLbitfield legalTypes = (ctx->API == API_OPENGLES)
|
||||
? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
|
||||
: (BYTE_BIT | SHORT_BIT | INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
const GLbitfield legalTypes = (ctx->API == API_OPENGLES)
|
||||
? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
|
||||
: (BYTE_BIT | SHORT_BIT | INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glNormalPointer",
|
||||
VERT_ATTRIB_NORMAL, legalTypes, 3, 3, 3,
|
||||
type, stride, GL_TRUE, GL_FALSE,
|
||||
GL_FALSE, format, ptr, ctx->Array.VAO))
|
||||
return;
|
||||
}
|
||||
if (!validate_array_and_format(ctx, "glNormalPointer",
|
||||
VERT_ATTRIB_NORMAL, legalTypes, 3, 3, 3,
|
||||
type, stride, GL_TRUE, GL_FALSE,
|
||||
GL_FALSE, format, ptr, ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_NORMAL, format, 3, 3, type, stride, GL_TRUE,
|
||||
GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_ColorPointer_no_error(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = get_array_format(ctx, BGRA_OR_4, &size);
|
||||
update_array(ctx, VERT_ATTRIB_COLOR0, format, BGRA_OR_4, size,
|
||||
type, stride, GL_TRUE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
|
|
@ -643,29 +674,38 @@ _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = get_array_format(ctx, BGRA_OR_4, &size);
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
const GLbitfield legalTypes = (ctx->API == API_OPENGLES)
|
||||
? (UNSIGNED_BYTE_BIT | HALF_BIT | FLOAT_BIT | FIXED_ES_BIT)
|
||||
: (BYTE_BIT | UNSIGNED_BYTE_BIT |
|
||||
SHORT_BIT | UNSIGNED_SHORT_BIT |
|
||||
INT_BIT | UNSIGNED_INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
const GLbitfield legalTypes = (ctx->API == API_OPENGLES)
|
||||
? (UNSIGNED_BYTE_BIT | HALF_BIT | FLOAT_BIT | FIXED_ES_BIT)
|
||||
: (BYTE_BIT | UNSIGNED_BYTE_BIT |
|
||||
SHORT_BIT | UNSIGNED_SHORT_BIT |
|
||||
INT_BIT | UNSIGNED_INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glColorPointer",
|
||||
VERT_ATTRIB_COLOR0, legalTypes, sizeMin,
|
||||
BGRA_OR_4, size, type, stride, GL_TRUE,
|
||||
GL_FALSE, GL_FALSE, format, ptr,
|
||||
ctx->Array.VAO))
|
||||
return;
|
||||
}
|
||||
if (!validate_array_and_format(ctx, "glColorPointer",
|
||||
VERT_ATTRIB_COLOR0, legalTypes, sizeMin,
|
||||
BGRA_OR_4, size, type, stride, GL_TRUE,
|
||||
GL_FALSE, GL_FALSE, format, ptr,
|
||||
ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_COLOR0, format, BGRA_OR_4, size,
|
||||
type, stride, GL_TRUE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_FogCoordPointer_no_error(GLenum type, GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_FOG, GL_RGBA, 1, 1, type, stride, GL_FALSE,
|
||||
GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_FogCoordPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
|
|
@ -674,21 +714,30 @@ _mesa_FogCoordPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
const GLbitfield legalTypes = (HALF_BIT | FLOAT_BIT | DOUBLE_BIT);
|
||||
const GLbitfield legalTypes = (HALF_BIT | FLOAT_BIT | DOUBLE_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glFogCoordPointer",
|
||||
VERT_ATTRIB_FOG, legalTypes, 1, 1, 1,
|
||||
type, stride, GL_FALSE, GL_FALSE,
|
||||
GL_FALSE, format, ptr, ctx->Array.VAO))
|
||||
return;
|
||||
}
|
||||
if (!validate_array_and_format(ctx, "glFogCoordPointer",
|
||||
VERT_ATTRIB_FOG, legalTypes, 1, 1, 1,
|
||||
type, stride, GL_FALSE, GL_FALSE,
|
||||
GL_FALSE, format, ptr, ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_FOG, format, 1, 1, type, stride, GL_FALSE,
|
||||
GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_IndexPointer_no_error(GLenum type, GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_COLOR_INDEX, GL_RGBA, 1, 1, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
|
|
@ -697,23 +746,34 @@ _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
const GLbitfield legalTypes = (UNSIGNED_BYTE_BIT | SHORT_BIT | INT_BIT |
|
||||
const GLbitfield legalTypes = (UNSIGNED_BYTE_BIT | SHORT_BIT | INT_BIT |
|
||||
FLOAT_BIT | DOUBLE_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glIndexPointer",
|
||||
VERT_ATTRIB_COLOR_INDEX,
|
||||
legalTypes, 1, 1, 1, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
}
|
||||
if (!validate_array_and_format(ctx, "glIndexPointer",
|
||||
VERT_ATTRIB_COLOR_INDEX,
|
||||
legalTypes, 1, 1, 1, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_COLOR_INDEX, format, 1, 1, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_SecondaryColorPointer_no_error(GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = get_array_format(ctx, BGRA_OR_4, &size);
|
||||
update_array(ctx, VERT_ATTRIB_COLOR1, format, BGRA_OR_4, size, type,
|
||||
stride, GL_TRUE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_SecondaryColorPointer(GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr)
|
||||
|
|
@ -723,27 +783,38 @@ _mesa_SecondaryColorPointer(GLint size, GLenum type,
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = get_array_format(ctx, BGRA_OR_4, &size);
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
|
||||
SHORT_BIT | UNSIGNED_SHORT_BIT |
|
||||
INT_BIT | UNSIGNED_INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
|
||||
SHORT_BIT | UNSIGNED_SHORT_BIT |
|
||||
INT_BIT | UNSIGNED_INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glSecondaryColorPointer",
|
||||
VERT_ATTRIB_COLOR1, legalTypes, 3,
|
||||
BGRA_OR_4, size, type, stride,
|
||||
GL_TRUE, GL_FALSE, GL_FALSE, format, ptr,
|
||||
ctx->Array.VAO))
|
||||
return;
|
||||
}
|
||||
if (!validate_array_and_format(ctx, "glSecondaryColorPointer",
|
||||
VERT_ATTRIB_COLOR1, legalTypes, 3,
|
||||
BGRA_OR_4, size, type, stride,
|
||||
GL_TRUE, GL_FALSE, GL_FALSE, format, ptr,
|
||||
ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_COLOR1, format, BGRA_OR_4, size, type,
|
||||
stride, GL_TRUE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_TexCoordPointer_no_error(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
const GLuint unit = ctx->Array.ActiveTexture;
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_TEX(unit), GL_RGBA, 4, size, type,
|
||||
stride, GL_FALSE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr)
|
||||
|
|
@ -755,27 +826,38 @@ _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
const GLbitfield legalTypes = (ctx->API == API_OPENGLES)
|
||||
? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
|
||||
: (SHORT_BIT | INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
const GLbitfield legalTypes = (ctx->API == API_OPENGLES)
|
||||
? (BYTE_BIT | SHORT_BIT | FLOAT_BIT | FIXED_ES_BIT)
|
||||
: (SHORT_BIT | INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glTexCoordPointer",
|
||||
VERT_ATTRIB_TEX(unit), legalTypes,
|
||||
sizeMin, 4, size, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, format, ptr,
|
||||
ctx->Array.VAO))
|
||||
return;
|
||||
}
|
||||
if (!validate_array_and_format(ctx, "glTexCoordPointer",
|
||||
VERT_ATTRIB_TEX(unit), legalTypes,
|
||||
sizeMin, 4, size, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, format, ptr,
|
||||
ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_TEX(unit), format, 4, size, type,
|
||||
stride, GL_FALSE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_EdgeFlagPointer_no_error(GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
/* this is the same type that glEdgeFlag uses */
|
||||
const GLboolean integer = GL_FALSE;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_EDGEFLAG, GL_RGBA, 1, 1, GL_UNSIGNED_BYTE,
|
||||
stride, GL_FALSE, integer, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
|
|
@ -786,22 +868,32 @@ _mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr)
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
const GLbitfield legalTypes = UNSIGNED_BYTE_BIT;
|
||||
const GLbitfield legalTypes = UNSIGNED_BYTE_BIT;
|
||||
|
||||
if (!validate_array_and_format(ctx, "glEdgeFlagPointer",
|
||||
VERT_ATTRIB_EDGEFLAG, legalTypes,
|
||||
1, 1, 1, GL_UNSIGNED_BYTE, stride,
|
||||
GL_FALSE, integer, GL_FALSE, format, ptr,
|
||||
ctx->Array.VAO))
|
||||
return;
|
||||
}
|
||||
if (!validate_array_and_format(ctx, "glEdgeFlagPointer",
|
||||
VERT_ATTRIB_EDGEFLAG, legalTypes,
|
||||
1, 1, 1, GL_UNSIGNED_BYTE, stride,
|
||||
GL_FALSE, integer, GL_FALSE, format, ptr,
|
||||
ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_EDGEFLAG, format, 1, 1, GL_UNSIGNED_BYTE,
|
||||
stride, GL_FALSE, integer, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_PointSizePointerOES_no_error(GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_POINT_SIZE, GL_RGBA, 1, 1, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
|
|
@ -810,27 +902,38 @@ _mesa_PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *ptr)
|
|||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
if (ctx->API != API_OPENGLES) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glPointSizePointer(ES 1.x only)");
|
||||
return;
|
||||
}
|
||||
|
||||
const GLbitfield legalTypes = (FLOAT_BIT | FIXED_ES_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glPointSizePointer",
|
||||
VERT_ATTRIB_POINT_SIZE, legalTypes,
|
||||
1, 1, 1, type, stride, GL_FALSE, GL_FALSE,
|
||||
GL_FALSE, format, ptr, ctx->Array.VAO))
|
||||
return;
|
||||
if (ctx->API != API_OPENGLES) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glPointSizePointer(ES 1.x only)");
|
||||
return;
|
||||
}
|
||||
|
||||
const GLbitfield legalTypes = (FLOAT_BIT | FIXED_ES_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glPointSizePointer",
|
||||
VERT_ATTRIB_POINT_SIZE, legalTypes,
|
||||
1, 1, 1, type, stride, GL_FALSE, GL_FALSE,
|
||||
GL_FALSE, format, ptr, ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_POINT_SIZE, format, 1, 1, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexAttribPointer_no_error(GLuint index, GLint size, GLenum type,
|
||||
GLboolean normalized,
|
||||
GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
GLenum format = get_array_format(ctx, BGRA_OR_4, &size);
|
||||
update_array(ctx, VERT_ATTRIB_GENERIC(index), format, BGRA_OR_4,
|
||||
size, type, stride, normalized, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set a generic vertex attribute array.
|
||||
* Note that these arrays DO NOT alias the conventional GL vertex arrays
|
||||
|
|
@ -844,34 +947,45 @@ _mesa_VertexAttribPointer(GLuint index, GLint size, GLenum type,
|
|||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
GLenum format = get_array_format(ctx, BGRA_OR_4, &size);
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(idx)");
|
||||
return;
|
||||
}
|
||||
|
||||
const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
|
||||
SHORT_BIT | UNSIGNED_SHORT_BIT |
|
||||
INT_BIT | UNSIGNED_INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
FIXED_ES_BIT | FIXED_GL_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT |
|
||||
UNSIGNED_INT_10F_11F_11F_REV_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glVertexAttribPointer",
|
||||
VERT_ATTRIB_GENERIC(index), legalTypes,
|
||||
1, BGRA_OR_4, size, type, stride,
|
||||
normalized, GL_FALSE, GL_FALSE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribPointerARB(idx)");
|
||||
return;
|
||||
}
|
||||
|
||||
const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
|
||||
SHORT_BIT | UNSIGNED_SHORT_BIT |
|
||||
INT_BIT | UNSIGNED_INT_BIT |
|
||||
HALF_BIT | FLOAT_BIT | DOUBLE_BIT |
|
||||
FIXED_ES_BIT | FIXED_GL_BIT |
|
||||
UNSIGNED_INT_2_10_10_10_REV_BIT |
|
||||
INT_2_10_10_10_REV_BIT |
|
||||
UNSIGNED_INT_10F_11F_11F_REV_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glVertexAttribPointer",
|
||||
VERT_ATTRIB_GENERIC(index), legalTypes,
|
||||
1, BGRA_OR_4, size, type, stride,
|
||||
normalized, GL_FALSE, GL_FALSE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_GENERIC(index), format, BGRA_OR_4,
|
||||
size, type, stride, normalized, GL_FALSE, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexAttribIPointer_no_error(GLuint index, GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
const GLboolean normalized = GL_FALSE;
|
||||
const GLboolean integer = GL_TRUE;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_GENERIC(index), GL_RGBA, 4, size, type,
|
||||
stride, normalized, integer, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* GL_EXT_gpu_shader4 / GL 3.0.
|
||||
* Set an integer-valued vertex attribute array.
|
||||
|
|
@ -887,28 +1001,38 @@ _mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type,
|
|||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribIPointer(index)");
|
||||
return;
|
||||
}
|
||||
|
||||
const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
|
||||
SHORT_BIT | UNSIGNED_SHORT_BIT |
|
||||
INT_BIT | UNSIGNED_INT_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glVertexAttribIPointer",
|
||||
VERT_ATTRIB_GENERIC(index), legalTypes,
|
||||
1, 4, size, type, stride,
|
||||
normalized, integer, GL_FALSE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribIPointer(index)");
|
||||
return;
|
||||
}
|
||||
|
||||
const GLbitfield legalTypes = (BYTE_BIT | UNSIGNED_BYTE_BIT |
|
||||
SHORT_BIT | UNSIGNED_SHORT_BIT |
|
||||
INT_BIT | UNSIGNED_INT_BIT);
|
||||
|
||||
if (!validate_array_and_format(ctx, "glVertexAttribIPointer",
|
||||
VERT_ATTRIB_GENERIC(index), legalTypes,
|
||||
1, 4, size, type, stride,
|
||||
normalized, integer, GL_FALSE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_GENERIC(index), format, 4, size, type,
|
||||
stride, normalized, integer, GL_FALSE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexAttribLPointer_no_error(GLuint index, GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_GENERIC(index), GL_RGBA, 4, size, type,
|
||||
stride, GL_FALSE, GL_FALSE, GL_TRUE, ptr);
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexAttribLPointer(GLuint index, GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr)
|
||||
|
|
@ -916,22 +1040,20 @@ _mesa_VertexAttribLPointer(GLuint index, GLint size, GLenum type,
|
|||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
GLenum format = GL_RGBA;
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribLPointer(index)");
|
||||
return;
|
||||
}
|
||||
|
||||
const GLbitfield legalTypes = DOUBLE_BIT;
|
||||
|
||||
if (!validate_array_and_format(ctx, "glVertexAttribLPointer",
|
||||
VERT_ATTRIB_GENERIC(index), legalTypes,
|
||||
1, 4, size, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_TRUE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glVertexAttribLPointer(index)");
|
||||
return;
|
||||
}
|
||||
|
||||
const GLbitfield legalTypes = DOUBLE_BIT;
|
||||
|
||||
if (!validate_array_and_format(ctx, "glVertexAttribLPointer",
|
||||
VERT_ATTRIB_GENERIC(index), legalTypes,
|
||||
1, 4, size, type, stride,
|
||||
GL_FALSE, GL_FALSE, GL_TRUE, format,
|
||||
ptr, ctx->Array.VAO))
|
||||
return;
|
||||
|
||||
update_array(ctx, VERT_ATTRIB_GENERIC(index), format, 4, size, type,
|
||||
stride, GL_FALSE, GL_FALSE, GL_TRUE, ptr);
|
||||
}
|
||||
|
|
@ -1759,6 +1881,32 @@ _mesa_PrimitiveRestartIndex(GLuint index)
|
|||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexAttribDivisor_no_error(GLuint index, GLuint divisor)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
const GLuint genericIndex = VERT_ATTRIB_GENERIC(index);
|
||||
struct gl_vertex_array_object * const vao = ctx->Array.VAO;
|
||||
|
||||
assert(genericIndex < ARRAY_SIZE(vao->VertexAttrib));
|
||||
|
||||
/* The ARB_vertex_attrib_binding spec says:
|
||||
*
|
||||
* "The command
|
||||
*
|
||||
* void VertexAttribDivisor(uint index, uint divisor);
|
||||
*
|
||||
* is equivalent to (assuming no errors are generated):
|
||||
*
|
||||
* VertexAttribBinding(index, index);
|
||||
* VertexBindingDivisor(index, divisor);"
|
||||
*/
|
||||
vertex_attrib_binding(ctx, vao, genericIndex, genericIndex);
|
||||
vertex_binding_divisor(ctx, vao, genericIndex, divisor);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* See GL_ARB_instanced_arrays.
|
||||
* Note that the instance divisor only applies to generic arrays, not
|
||||
|
|
@ -1772,17 +1920,15 @@ _mesa_VertexAttribDivisor(GLuint index, GLuint divisor)
|
|||
const GLuint genericIndex = VERT_ATTRIB_GENERIC(index);
|
||||
struct gl_vertex_array_object * const vao = ctx->Array.VAO;
|
||||
|
||||
if (!_mesa_is_no_error_enabled(ctx)) {
|
||||
if (!ctx->Extensions.ARB_instanced_arrays) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glVertexAttribDivisor()");
|
||||
return;
|
||||
}
|
||||
if (!ctx->Extensions.ARB_instanced_arrays) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glVertexAttribDivisor()");
|
||||
return;
|
||||
}
|
||||
|
||||
if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
"glVertexAttribDivisor(index = %u)", index);
|
||||
return;
|
||||
}
|
||||
if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
"glVertexAttribDivisor(index = %u)", index);
|
||||
return;
|
||||
}
|
||||
|
||||
assert(genericIndex < ARRAY_SIZE(vao->VertexAttrib));
|
||||
|
|
|
|||
|
|
@ -109,27 +109,40 @@ _mesa_bind_vertex_buffer(struct gl_context *ctx,
|
|||
GLintptr offset, GLsizei stride);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexPointer_no_error(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_NormalPointer_no_error(GLenum type, GLsizei stride, const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_ColorPointer_no_error(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_IndexPointer_no_error(GLenum type, GLsizei stride, const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_TexCoordPointer_no_error(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_EdgeFlagPointer_no_error(GLsizei stride, const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr);
|
||||
|
||||
|
|
@ -162,30 +175,48 @@ _mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
|
|||
extern void GLAPIENTRY
|
||||
_mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_FogCoordPointer_no_error(GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_FogCoordPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_SecondaryColorPointer_no_error(GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_SecondaryColorPointer(GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_PointSizePointerOES_no_error(GLenum type, GLsizei stride,
|
||||
const GLvoid *ptr);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *ptr);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexAttribPointer_no_error(GLuint index, GLint size, GLenum type,
|
||||
GLboolean normalized, GLsizei stride,
|
||||
const GLvoid *pointer);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexAttribPointer(GLuint index, GLint size, GLenum type,
|
||||
GLboolean normalized, GLsizei stride,
|
||||
const GLvoid *pointer);
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexAttribIPointer_no_error(GLuint index, GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr);
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *ptr);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexAttribLPointer_no_error(GLuint index, GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *pointer);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexAttribLPointer(GLuint index, GLint size, GLenum type,
|
||||
GLsizei stride, const GLvoid *pointer);
|
||||
|
||||
|
|
@ -307,7 +338,8 @@ _mesa_DrawTransformFeedback(GLenum mode, GLuint name);
|
|||
extern void GLAPIENTRY
|
||||
_mesa_PrimitiveRestartIndex(GLuint index);
|
||||
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexAttribDivisor_no_error(GLuint index, GLuint divisor);
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexAttribDivisor(GLuint index, GLuint divisor);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue