X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fvarray.h;h=fb490f1a586469855dd8cf6523269becdbb9b872;hb=442fd3d007d733a24e8d2473756467d616a134ac;hp=c70545a2f5b6dfeb173c40f5ca7c68cfa371722e;hpb=c4254ee526145ce9bab227264226f5d6f741ff0e;p=mesa.git diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index c70545a2f5b..fb490f1a586 100644 --- a/src/mesa/main/varray.h +++ b/src/mesa/main/varray.h @@ -27,12 +27,14 @@ #ifndef VARRAY_H #define VARRAY_H - -#include "glheader.h" #include "bufferobj.h" -struct gl_client_array; -struct gl_context; +void +_mesa_set_vertex_format(struct gl_vertex_format *vertex_format, + GLubyte size, GLenum16 type, GLenum16 format, + GLboolean normalized, GLboolean integer, + GLboolean doubles); + /** * Returns a pointer to the vertex attribute data in a client array, @@ -40,78 +42,112 @@ struct gl_context; * a vertex buffer. */ static inline const GLubyte * -_mesa_vertex_attrib_address(const struct gl_vertex_attrib_array *array, +_mesa_vertex_attrib_address(const struct gl_array_attributes *array, const struct gl_vertex_buffer_binding *binding) { if (_mesa_is_bufferobj(binding->BufferObj)) return (const GLubyte *) (binding->Offset + array->RelativeOffset); else - return array->Ptr; + return array->Ptr; } -/** - * Sets the fields in a gl_client_array to values derived from a - * gl_vertex_attrib_array and a gl_vertex_buffer_binding. - */ -static inline void -_mesa_update_client_array(struct gl_context *ctx, - struct gl_client_array *dst, - const struct gl_vertex_attrib_array *src, - const struct gl_vertex_buffer_binding *binding) + +static inline bool +_mesa_attr_zero_aliases_vertex(const struct gl_context *ctx) { - dst->Size = src->Size; - dst->Type = src->Type; - dst->Format = src->Format; - dst->Stride = src->Stride; - dst->StrideB = binding->Stride; - dst->Ptr = _mesa_vertex_attrib_address(src, binding); - dst->Enabled = src->Enabled; - dst->Normalized = src->Normalized; - dst->Integer = src->Integer; - dst->Doubles = src->Doubles; - dst->InstanceDivisor = binding->InstanceDivisor; - dst->_ElementSize = src->_ElementSize; - _mesa_reference_buffer_object(ctx, &dst->BufferObj, binding->BufferObj); + return ctx->_AttribZeroAliasesVertex; } -static inline bool -_mesa_attr_zero_aliases_vertex(struct gl_context *ctx) + +extern void +_mesa_update_array_format(struct gl_context *ctx, + struct gl_vertex_array_object *vao, + gl_vert_attrib attrib, GLint size, GLenum type, + GLenum format, GLboolean normalized, + GLboolean integer, GLboolean doubles, + GLuint relativeOffset); + +extern void +_mesa_enable_vertex_array_attribs(struct gl_context *ctx, + struct gl_vertex_array_object *vao, + GLbitfield attrib_bits); + +static inline void +_mesa_enable_vertex_array_attrib(struct gl_context *ctx, + struct gl_vertex_array_object *vao, + gl_vert_attrib attrib) { - const bool is_forward_compatible_context = - ctx->Const.ContextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT; + assert(attrib < VERT_ATTRIB_MAX); + _mesa_enable_vertex_array_attribs(ctx, vao, VERT_BIT(attrib)); +} - /* 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_COMPAT here because - * that will erroneously allow this usage in a 3.0 forward-compatible - * context too. - */ - return (ctx->API == API_OPENGLES - || (ctx->API == API_OPENGL_COMPAT - && !is_forward_compatible_context)); + +extern void +_mesa_disable_vertex_array_attribs(struct gl_context *ctx, + struct gl_vertex_array_object *vao, + GLbitfield attrib_bits); + +static inline void +_mesa_disable_vertex_array_attrib(struct gl_context *ctx, + struct gl_vertex_array_object *vao, + gl_vert_attrib attrib) +{ + assert(attrib < VERT_ATTRIB_MAX); + _mesa_disable_vertex_array_attribs(ctx, vao, VERT_BIT(attrib)); } + +extern void +_mesa_vertex_attrib_binding(struct gl_context *ctx, + struct gl_vertex_array_object *vao, + gl_vert_attrib attribIndex, + GLuint bindingIndex); + + +extern void +_mesa_bind_vertex_buffer(struct gl_context *ctx, + struct gl_vertex_array_object *vao, + GLuint index, + struct gl_buffer_object *vbo, + 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_MultiTexCoordPointerEXT(GLenum texunit, 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); @@ -144,176 +180,259 @@ _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); + 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); + 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); extern void GLAPIENTRY _mesa_EnableVertexAttribArray(GLuint index); - extern void GLAPIENTRY -_mesa_DisableVertexAttribArray(GLuint index); +_mesa_EnableVertexAttribArray_no_error(GLuint index); extern void GLAPIENTRY -_mesa_GetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params); +_mesa_EnableVertexArrayAttrib(GLuint vaobj, GLuint index); extern void GLAPIENTRY -_mesa_GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params); +_mesa_EnableVertexArrayAttrib_no_error(GLuint vaobj, GLuint index); extern void GLAPIENTRY -_mesa_GetVertexAttribLdv(GLuint index, GLenum pname, GLdouble *params); - -extern void GLAPIENTRY -_mesa_GetVertexAttribiv(GLuint index, GLenum pname, GLint *params); +_mesa_EnableVertexArrayAttribEXT( GLuint vaobj, GLuint index ); extern void GLAPIENTRY -_mesa_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params); - +_mesa_DisableVertexAttribArray(GLuint index); extern void GLAPIENTRY -_mesa_GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params); +_mesa_DisableVertexAttribArray_no_error(GLuint index); extern void GLAPIENTRY -_mesa_GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid **pointer); +_mesa_DisableVertexArrayAttrib(GLuint vaobj, GLuint index); +extern void GLAPIENTRY +_mesa_DisableVertexArrayAttrib_no_error(GLuint vaobj, GLuint index); extern void GLAPIENTRY -_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer); +_mesa_DisableVertexArrayAttribEXT( GLuint vaobj, GLuint index ); +extern void GLAPIENTRY +_mesa_GetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params); extern void GLAPIENTRY -_mesa_MultiDrawArrays( GLenum mode, const GLint *first, - const GLsizei *count, GLsizei primcount ); +_mesa_GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params); extern void GLAPIENTRY -_mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type, - const GLvoid **indices, GLsizei primcount ); +_mesa_GetVertexAttribLdv(GLuint index, GLenum pname, GLdouble *params); extern void GLAPIENTRY -_mesa_MultiDrawElementsBaseVertex( GLenum mode, - const GLsizei *count, GLenum type, - const GLvoid **indices, GLsizei primcount, - const GLint *basevertex); +_mesa_GetVertexAttribiv(GLuint index, GLenum pname, GLint *params); extern void GLAPIENTRY -_mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first, - const GLsizei * count, - GLsizei primcount, GLint modestride ); +_mesa_GetVertexAttribLui64vARB(GLuint index, GLenum pname, GLuint64EXT *params); extern void GLAPIENTRY -_mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count, - GLenum type, const GLvoid * const * indices, - GLsizei primcount, GLint modestride ); +_mesa_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params); -extern void GLAPIENTRY -_mesa_LockArraysEXT(GLint first, GLsizei count); extern void GLAPIENTRY -_mesa_UnlockArraysEXT( void ); +_mesa_GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params); extern void GLAPIENTRY -_mesa_DrawArrays(GLenum mode, GLint first, GLsizei count); +_mesa_GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid **pointer); -extern void GLAPIENTRY -_mesa_DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, - GLsizei primcount); -extern void GLAPIENTRY -_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices); +void GLAPIENTRY +_mesa_GetVertexArrayIndexediv(GLuint vaobj, GLuint index, + GLenum pname, GLint *param); + + +void GLAPIENTRY +_mesa_GetVertexArrayIndexed64iv(GLuint vaobj, GLuint index, + GLenum pname, GLint64 *param); -extern void GLAPIENTRY -_mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, - GLenum type, const GLvoid *indices); extern void GLAPIENTRY -_mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices, GLint basevertex); +_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer); + extern void GLAPIENTRY -_mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, - GLsizei count, GLenum type, - const GLvoid *indices, - GLint basevertex); +_mesa_LockArraysEXT(GLint first, GLsizei count); extern void GLAPIENTRY -_mesa_DrawTransformFeedback(GLenum mode, GLuint name); +_mesa_UnlockArraysEXT(void); + + +void GLAPIENTRY +_mesa_PrimitiveRestartIndex_no_error(GLuint index); 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); -extern unsigned -_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type); +static inline unsigned +_mesa_primitive_restart_index(const struct gl_context *ctx, + unsigned index_size) +{ + /* The index_size parameter is menat to be in bytes. */ + assert(index_size == 1 || index_size == 2 || index_size == 4); + /* From the OpenGL 4.3 core specification, page 302: + * "If both PRIMITIVE_RESTART and PRIMITIVE_RESTART_FIXED_INDEX are + * enabled, the index value determined by PRIMITIVE_RESTART_FIXED_INDEX + * is used." + */ + if (ctx->Array.PrimitiveRestartFixedIndex) { + /* 1 -> 0xff, 2 -> 0xffff, 4 -> 0xffffffff */ + return 0xffffffffu >> 8 * (4 - index_size); + } + + return ctx->Array.RestartIndex; +} + +extern void GLAPIENTRY +_mesa_BindVertexBuffer_no_error(GLuint bindingIndex, GLuint buffer, + GLintptr offset, GLsizei stride); extern void GLAPIENTRY _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset, GLsizei stride); +void GLAPIENTRY +_mesa_VertexArrayVertexBuffer_no_error(GLuint vaobj, GLuint bindingIndex, + GLuint buffer, GLintptr offset, + GLsizei stride); +extern void GLAPIENTRY +_mesa_VertexArrayVertexBuffer(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, + const GLsizei *strides); + extern void GLAPIENTRY _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +void GLAPIENTRY +_mesa_VertexArrayVertexBuffers_no_error(GLuint vaobj, GLuint first, + GLsizei count, const GLuint *buffers, + const GLintptr *offsets, + const GLsizei *strides); + +extern void GLAPIENTRY +_mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, + const GLuint *buffers, + const GLintptr *offsets, const GLsizei *strides); + extern void GLAPIENTRY _mesa_VertexAttribFormat(GLuint attribIndex, GLint size, GLenum type, GLboolean normalized, GLuint relativeOffset); +extern void GLAPIENTRY +_mesa_VertexArrayAttribFormat(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); +extern void GLAPIENTRY +_mesa_VertexArrayAttribIFormat(GLuint vaobj, GLuint attribIndex, + GLint size, GLenum type, + GLuint relativeOffset); + extern void GLAPIENTRY _mesa_VertexAttribLFormat(GLuint attribIndex, GLint size, GLenum type, GLuint relativeOffset); +extern void GLAPIENTRY +_mesa_VertexArrayAttribLFormat(GLuint vaobj, GLuint attribIndex, + GLint size, GLenum type, + GLuint relativeOffset); + +void GLAPIENTRY +_mesa_VertexAttribBinding_no_error(GLuint attribIndex, GLuint bindingIndex); + extern void GLAPIENTRY _mesa_VertexAttribBinding(GLuint attribIndex, GLuint bindingIndex); +void GLAPIENTRY +_mesa_VertexArrayAttribBinding_no_error(GLuint vaobj, GLuint attribIndex, + GLuint bindingIndex); + +extern void GLAPIENTRY +_mesa_VertexArrayAttribBinding(GLuint vaobj, GLuint attribIndex, + GLuint bindingIndex); + +void GLAPIENTRY +_mesa_VertexBindingDivisor_no_error(GLuint bindingIndex, GLuint divisor); + extern void GLAPIENTRY _mesa_VertexBindingDivisor(GLuint bindingIndex, GLuint divisor); +void GLAPIENTRY +_mesa_VertexArrayBindingDivisor_no_error(GLuint vaobj, GLuint bindingIndex, + GLuint divisor); + +extern void GLAPIENTRY +_mesa_VertexArrayBindingDivisor(GLuint vaobj, GLuint bindingIndex, + GLuint divisor); -extern void -_mesa_copy_client_array(struct gl_context *ctx, - struct gl_client_array *dst, - struct gl_client_array *src); extern void _mesa_copy_vertex_attrib_array(struct gl_context *ctx, - struct gl_vertex_attrib_array *dst, - const struct gl_vertex_attrib_array *src); + struct gl_array_attributes *dst, + const struct gl_array_attributes *src); extern void _mesa_copy_vertex_buffer_binding(struct gl_context *ctx, @@ -324,9 +443,71 @@ extern void _mesa_print_arrays(struct gl_context *ctx); extern void -_mesa_init_varray( struct gl_context * ctx ); +_mesa_init_varray(struct gl_context *ctx); -extern void +extern void _mesa_free_varray_data(struct gl_context *ctx); +extern void GLAPIENTRY +_mesa_VertexArrayVertexOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, + GLenum type, GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayColorOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, + GLenum type, GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayEdgeFlagOffsetEXT(GLuint vaobj, GLuint buffer, GLsizei stride, + GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayIndexOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, + GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayNormalOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, + GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayTexCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, + GLenum type, GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayMultiTexCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLenum texunit, + GLint size, GLenum type, GLsizei stride, + GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayFogCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, + GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArraySecondaryColorOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, + GLenum type, GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayVertexAttribOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, + GLenum type, GLboolean normalized, + GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayVertexAttribIOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, + GLenum type, GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_VertexArrayVertexAttribLOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, + GLenum type, GLsizei stride, GLintptr offset); + +extern void GLAPIENTRY +_mesa_GetVertexArrayIntegervEXT(GLuint vaobj, GLenum pname, GLint *param); + +extern void GLAPIENTRY +_mesa_GetVertexArrayPointervEXT(GLuint vaobj, GLenum pname, GLvoid** param); + +extern void GLAPIENTRY +_mesa_GetVertexArrayIntegeri_vEXT(GLuint vaobj, GLuint index, GLenum pname, GLint *param); + +extern void GLAPIENTRY +_mesa_GetVertexArrayPointeri_vEXT(GLuint vaobj, GLuint index, GLenum pname, GLvoid** param); + #endif