mesa: add ARB_vertex_attrib_binding glVertexArray* functions
We can't simply alias ARB_direct_state_access functions because those fail if the vao has never been bound before. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
657396aa10
commit
8b6d19413f
|
@ -46,6 +46,51 @@
|
|||
<param name="divisor" type="GLuint"/>
|
||||
</function>
|
||||
|
||||
<function name="VertexArrayBindVertexBufferEXT">
|
||||
<param name="vaobj" type="GLuint"/>
|
||||
<param name="bindingindex" type="GLuint"/>
|
||||
<param name="buffer" type="GLuint"/>
|
||||
<param name="offset" type="GLintptr"/>
|
||||
<param name="stride" type="GLsizei"/>
|
||||
</function>
|
||||
|
||||
<function name="VertexArrayVertexAttribFormatEXT">
|
||||
<param name="vaobj" type="GLuint"/>
|
||||
<param name="attribindex" type="GLuint"/>
|
||||
<param name="size" type="GLint"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="normalized" type="GLboolean"/>
|
||||
<param name="relativeoffset" type="GLuint"/>
|
||||
</function>
|
||||
|
||||
<function name="VertexArrayVertexAttribIFormatEXT">
|
||||
<param name="vaobj" type="GLuint"/>
|
||||
<param name="attribindex" type="GLuint"/>
|
||||
<param name="size" type="GLint"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="relativeoffset" type="GLuint"/>
|
||||
</function>
|
||||
|
||||
<function name="VertexArrayVertexAttribLFormatEXT">
|
||||
<param name="vaobj" type="GLuint"/>
|
||||
<param name="attribindex" type="GLuint"/>
|
||||
<param name="size" type="GLint"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="relativeoffset" type="GLuint"/>
|
||||
</function>
|
||||
|
||||
<function name="VertexArrayVertexAttribBindingEXT">
|
||||
<param name="vaobj" type="GLuint"/>
|
||||
<param name="attribindex" type="GLuint"/>
|
||||
<param name="bindingindex" type="GLuint"/>
|
||||
</function>
|
||||
|
||||
<function name="VertexArrayVertexBindingDivisorEXT">
|
||||
<param name="vaobj" type="GLuint"/>
|
||||
<param name="attribindex" type="GLuint"/>
|
||||
<param name="divisor" type="GLuint"/>
|
||||
</function>
|
||||
|
||||
<enum name="VERTEX_ATTRIB_BINDING" value="0x82D4"/>
|
||||
<enum name="VERTEX_ATTRIB_RELATIVE_OFFSET" value="0x82D5"/>
|
||||
<enum name="VERTEX_BINDING_DIVISOR" value="0x82D6"/>
|
||||
|
|
|
@ -1625,6 +1625,12 @@ offsets = {
|
|||
"TextureBufferRangeEXT": 1589,
|
||||
"TextureStorage2DMultisampleEXT": 1590,
|
||||
"TextureStorage3DMultisampleEXT": 1591,
|
||||
"VertexArrayBindVertexBufferEXT": 1592,
|
||||
"VertexArrayVertexAttribFormatEXT": 1593,
|
||||
"VertexArrayVertexAttribIFormatEXT": 1594,
|
||||
"VertexArrayVertexAttribLFormatEXT": 1595,
|
||||
"VertexArrayVertexAttribBindingEXT": 1596,
|
||||
"VertexArrayVertexBindingDivisorEXT": 1597,
|
||||
}
|
||||
|
||||
functions = [
|
||||
|
|
|
@ -869,11 +869,12 @@ const struct function common_desktop_functions_possible[] = {
|
|||
{ "glVertexAttribLFormat", 43, -1 },
|
||||
{ "glVertexAttribBinding", 43, -1 },
|
||||
{ "glVertexBindingDivisor", 43, -1 },
|
||||
// { "glVertexArrayBindVertexBufferEXT", 43, -1 }, // XXX: Add to xml
|
||||
// { "glVertexArrayVertexAttribFormatEXT", 43, -1 }, // XXX: Add to xml
|
||||
// { "glVertexArrayVertexAttribIFormatEXT", 43, -1 }, // XXX: Add to xml
|
||||
// { "glVertexArrayVertexAttribBindingEXT", 43, -1 }, // XXX: Add to xml
|
||||
// { "glVertexArrayVertexBindingDivisorEXT", 43, -1 }, // XXX: Add to xml
|
||||
{ "glVertexArrayBindVertexBufferEXT", 43, -1 },
|
||||
{ "glVertexArrayVertexAttribFormatEXT", 43, -1 },
|
||||
{ "glVertexArrayVertexAttribIFormatEXT", 43, -1 },
|
||||
{ "glVertexArrayVertexAttribLFormatEXT", 43, -1 },
|
||||
{ "glVertexArrayVertexAttribBindingEXT", 43, -1 },
|
||||
{ "glVertexArrayVertexBindingDivisorEXT", 43, -1 },
|
||||
{ "glFramebufferParameteri", 43, -1 },
|
||||
{ "glGetFramebufferParameteriv", 43, -1 },
|
||||
{ "glNamedFramebufferParameteriEXT", 43, -1 },
|
||||
|
|
|
@ -2775,6 +2775,21 @@ _mesa_VertexArrayVertexBuffer(GLuint vaobj, GLuint bindingIndex, GLuint buffer,
|
|||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexArrayBindVertexBufferEXT(GLuint vaobj, GLuint bindingIndex, GLuint buffer,
|
||||
GLintptr offset, GLsizei stride)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
struct gl_vertex_array_object *vao;
|
||||
vao = _mesa_lookup_vao_err(ctx, vaobj, true, "glVertexArrayBindVertexBufferEXT");
|
||||
if (!vao)
|
||||
return;
|
||||
|
||||
vertex_array_vertex_buffer_err(ctx, vao, bindingIndex, buffer, offset,
|
||||
stride, "glVertexArrayBindVertexBufferEXT");
|
||||
}
|
||||
|
||||
|
||||
static ALWAYS_INLINE void
|
||||
vertex_array_vertex_buffers(struct gl_context *ctx,
|
||||
struct gl_vertex_array_object *vao,
|
||||
|
@ -3137,6 +3152,18 @@ _mesa_VertexArrayAttribFormat(GLuint vaobj, GLuint attribIndex, GLint size,
|
|||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexAttribFormatEXT(GLuint vaobj, GLuint attribIndex, GLint size,
|
||||
GLenum type, GLboolean normalized,
|
||||
GLuint relativeOffset)
|
||||
{
|
||||
vertex_array_attrib_format(vaobj, true, attribIndex, size, type, normalized,
|
||||
GL_FALSE, GL_FALSE, ATTRIB_FORMAT_TYPES_MASK,
|
||||
BGRA_OR_4, relativeOffset,
|
||||
"glVertexArrayVertexAttribFormatEXT");
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexArrayAttribIFormat(GLuint vaobj, GLuint attribIndex,
|
||||
GLint size, GLenum type,
|
||||
|
@ -3149,6 +3176,18 @@ _mesa_VertexArrayAttribIFormat(GLuint vaobj, GLuint attribIndex,
|
|||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexAttribIFormatEXT(GLuint vaobj, GLuint attribIndex,
|
||||
GLint size, GLenum type,
|
||||
GLuint relativeOffset)
|
||||
{
|
||||
vertex_array_attrib_format(vaobj, true, attribIndex, size, type, GL_FALSE,
|
||||
GL_TRUE, GL_FALSE, ATTRIB_IFORMAT_TYPES_MASK,
|
||||
4, relativeOffset,
|
||||
"glVertexArrayVertexAttribIFormatEXT");
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexArrayAttribLFormat(GLuint vaobj, GLuint attribIndex,
|
||||
GLint size, GLenum type,
|
||||
|
@ -3161,6 +3200,18 @@ _mesa_VertexArrayAttribLFormat(GLuint vaobj, GLuint attribIndex,
|
|||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexAttribLFormatEXT(GLuint vaobj, GLuint attribIndex,
|
||||
GLint size, GLenum type,
|
||||
GLuint relativeOffset)
|
||||
{
|
||||
vertex_array_attrib_format(vaobj, true, attribIndex, size, type, GL_FALSE,
|
||||
GL_FALSE, GL_TRUE, ATTRIB_LFORMAT_TYPES_MASK,
|
||||
4, relativeOffset,
|
||||
"glVertexArrayVertexAttribLFormatEXT");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
vertex_array_attrib_binding(struct gl_context *ctx,
|
||||
struct gl_vertex_array_object *vao,
|
||||
|
@ -3267,6 +3318,20 @@ _mesa_VertexArrayAttribBinding(GLuint vaobj, GLuint attribIndex, GLuint bindingI
|
|||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexAttribBindingEXT(GLuint vaobj, GLuint attribIndex, GLuint bindingIndex)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
struct gl_vertex_array_object *vao;
|
||||
vao = _mesa_lookup_vao_err(ctx, vaobj, true, "glVertexArrayVertexAttribBindingEXT");
|
||||
if (!vao)
|
||||
return;
|
||||
|
||||
vertex_array_attrib_binding(ctx, vao, attribIndex, bindingIndex,
|
||||
"glVertexArrayVertexAttribBindingEXT");
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
vertex_array_binding_divisor(struct gl_context *ctx,
|
||||
struct gl_vertex_array_object *vao,
|
||||
|
@ -3362,6 +3427,28 @@ _mesa_VertexArrayBindingDivisor(GLuint vaobj, GLuint bindingIndex,
|
|||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexBindingDivisorEXT(GLuint vaobj, GLuint bindingIndex,
|
||||
GLuint divisor)
|
||||
{
|
||||
struct gl_vertex_array_object *vao;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
/* The ARB_direct_state_access specification says:
|
||||
*
|
||||
* "An INVALID_OPERATION error is generated by VertexArrayBindingDivisor
|
||||
* if <vaobj> is not [compatibility profile: zero or] the name of an
|
||||
* existing vertex array object."
|
||||
*/
|
||||
vao = _mesa_lookup_vao_err(ctx, vaobj, true, "glVertexArrayVertexBindingDivisorEXT");
|
||||
if (!vao)
|
||||
return;
|
||||
|
||||
vertex_array_binding_divisor(ctx, vao, bindingIndex, divisor,
|
||||
"glVertexArrayVertexBindingDivisorEXT");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_copy_vertex_attrib_array(struct gl_context *ctx,
|
||||
struct gl_array_attributes *dst,
|
||||
|
|
|
@ -355,6 +355,10 @@ extern void GLAPIENTRY
|
|||
_mesa_VertexArrayVertexBuffer(GLuint vaobj, GLuint bindingIndex, GLuint buffer,
|
||||
GLintptr offset, GLsizei stride);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexArrayBindVertexBufferEXT(GLuint vaobj, GLuint bindingIndex, GLuint buffer,
|
||||
GLintptr offset, GLsizei stride);
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindVertexBuffers_no_error(GLuint first, GLsizei count,
|
||||
const GLuint *buffers, const GLintptr *offsets,
|
||||
|
@ -384,6 +388,11 @@ _mesa_VertexArrayAttribFormat(GLuint vaobj, GLuint attribIndex, GLint size,
|
|||
GLenum type, GLboolean normalized,
|
||||
GLuint relativeOffset);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexAttribFormatEXT(GLuint vaobj, GLuint attribIndex, GLint size,
|
||||
GLenum type, GLboolean normalized,
|
||||
GLuint relativeOffset);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexAttribIFormat(GLuint attribIndex, GLint size, GLenum type,
|
||||
GLuint relativeOffset);
|
||||
|
@ -393,6 +402,11 @@ _mesa_VertexArrayAttribIFormat(GLuint vaobj, GLuint attribIndex,
|
|||
GLint size, GLenum type,
|
||||
GLuint relativeOffset);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexAttribIFormatEXT(GLuint vaobj, GLuint attribIndex,
|
||||
GLint size, GLenum type,
|
||||
GLuint relativeOffset);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexAttribLFormat(GLuint attribIndex, GLint size, GLenum type,
|
||||
GLuint relativeOffset);
|
||||
|
@ -402,6 +416,11 @@ _mesa_VertexArrayAttribLFormat(GLuint vaobj, GLuint attribIndex,
|
|||
GLint size, GLenum type,
|
||||
GLuint relativeOffset);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexAttribLFormatEXT(GLuint vaobj, GLuint attribIndex,
|
||||
GLint size, GLenum type,
|
||||
GLuint relativeOffset);
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexAttribBinding_no_error(GLuint attribIndex, GLuint bindingIndex);
|
||||
|
||||
|
@ -416,6 +435,10 @@ extern void GLAPIENTRY
|
|||
_mesa_VertexArrayAttribBinding(GLuint vaobj, GLuint attribIndex,
|
||||
GLuint bindingIndex);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexAttribBindingEXT(GLuint vaobj, GLuint attribIndex,
|
||||
GLuint bindingIndex);
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_VertexBindingDivisor_no_error(GLuint bindingIndex, GLuint divisor);
|
||||
|
||||
|
@ -430,6 +453,10 @@ extern void GLAPIENTRY
|
|||
_mesa_VertexArrayBindingDivisor(GLuint vaobj, GLuint bindingIndex,
|
||||
GLuint divisor);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_VertexArrayVertexBindingDivisorEXT(GLuint vaobj, GLuint bindingIndex,
|
||||
GLuint divisor);
|
||||
|
||||
|
||||
extern void
|
||||
_mesa_copy_vertex_attrib_array(struct gl_context *ctx,
|
||||
|
|
Loading…
Reference in New Issue