X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fvarray.h;h=c596c277cf6afe599663f05f44aadd4d8c0065bd;hb=fd241722006def2dfdffaf260daa74dc19332cae;hp=dd06fbf209c7dcf3d7473a2ca04708ae5f4684a6;hpb=5a7f04925f60a0222c66de8e3e4e788a0a550d5b;p=mesa.git diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index dd06fbf209c..c596c277cf6 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,77 +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)) + if (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->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); @@ -143,40 +180,83 @@ _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_EnableVertexAttribArray_no_error(GLuint index); + + +extern void GLAPIENTRY +_mesa_EnableVertexArrayAttrib(GLuint vaobj, GLuint index); + +extern void GLAPIENTRY +_mesa_EnableVertexArrayAttrib_no_error(GLuint vaobj, GLuint index); + +extern void GLAPIENTRY +_mesa_EnableVertexArrayAttribEXT( GLuint vaobj, GLuint index ); + extern void GLAPIENTRY _mesa_DisableVertexAttribArray(GLuint index); +extern void GLAPIENTRY +_mesa_DisableVertexAttribArray_no_error(GLuint index); + + +extern void GLAPIENTRY +_mesa_DisableVertexArrayAttrib(GLuint vaobj, GLuint index); + +extern void GLAPIENTRY +_mesa_DisableVertexArrayAttrib_no_error(GLuint vaobj, GLuint index); + +extern void GLAPIENTRY +_mesa_DisableVertexArrayAttribEXT( GLuint vaobj, GLuint index ); extern void GLAPIENTRY _mesa_GetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params); @@ -190,6 +270,9 @@ _mesa_GetVertexAttribLdv(GLuint index, GLenum pname, GLdouble *params); extern void GLAPIENTRY _mesa_GetVertexAttribiv(GLuint index, GLenum pname, GLint *params); +extern void GLAPIENTRY +_mesa_GetVertexAttribLui64vARB(GLuint index, GLenum pname, GLuint64EXT *params); + extern void GLAPIENTRY _mesa_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params); @@ -203,116 +286,190 @@ extern void GLAPIENTRY _mesa_GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid **pointer); +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_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer); extern void GLAPIENTRY -_mesa_MultiDrawArrays( GLenum mode, const GLint *first, - const GLsizei *count, GLsizei primcount ); +_mesa_LockArraysEXT(GLint first, GLsizei count); extern void GLAPIENTRY -_mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type, - const GLvoid **indices, GLsizei primcount ); +_mesa_UnlockArraysEXT(void); + + +void GLAPIENTRY +_mesa_PrimitiveRestartIndex_no_error(GLuint index); extern void GLAPIENTRY -_mesa_MultiDrawElementsBaseVertex( GLenum mode, - const GLsizei *count, GLenum type, - const GLvoid **indices, GLsizei primcount, - const GLint *basevertex); +_mesa_PrimitiveRestartIndex(GLuint index); extern void GLAPIENTRY -_mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first, - const GLsizei * count, - GLsizei primcount, GLint modestride ); +_mesa_VertexAttribDivisor_no_error(GLuint index, GLuint divisor); +extern void GLAPIENTRY +_mesa_VertexAttribDivisor(GLuint index, GLuint divisor); +extern void GLAPIENTRY +_mesa_VertexArrayVertexAttribDivisorEXT(GLuint vaobj, GLuint index, GLuint divisor); +static inline unsigned +_mesa_get_prim_restart_index(bool fixed_index, unsigned restart_index, + unsigned index_size) +{ + /* The index_size parameter is meant 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 (fixed_index) { + /* 1 -> 0xff, 2 -> 0xffff, 4 -> 0xffffffff */ + return 0xffffffffu >> 8 * (4 - index_size); + } + + return restart_index; +} + +static inline unsigned +_mesa_primitive_restart_index(const struct gl_context *ctx, + unsigned index_size) +{ + return _mesa_get_prim_restart_index(ctx->Array.PrimitiveRestartFixedIndex, + ctx->Array.RestartIndex, index_size); +} + +extern void GLAPIENTRY +_mesa_BindVertexBuffer_no_error(GLuint bindingIndex, GLuint buffer, + GLintptr offset, GLsizei stride); extern void GLAPIENTRY -_mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count, - GLenum type, const GLvoid * const * indices, - GLsizei primcount, GLint modestride ); +_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_LockArraysEXT(GLint first, GLsizei count); +_mesa_VertexArrayVertexBuffer(GLuint vaobj, GLuint bindingIndex, GLuint buffer, + GLintptr offset, GLsizei stride); extern void GLAPIENTRY -_mesa_UnlockArraysEXT( void ); +_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, + const GLsizei *strides); extern void GLAPIENTRY -_mesa_DrawArrays(GLenum mode, GLint first, GLsizei count); +_mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, + const GLintptr *offsets, const GLsizei *strides); -extern void GLAPIENTRY -_mesa_DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, - GLsizei primcount); +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_DrawElements(GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices); +_mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, + const GLuint *buffers, + const GLintptr *offsets, const GLsizei *strides); extern void GLAPIENTRY -_mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, - GLenum type, const GLvoid *indices); +_mesa_VertexAttribFormat(GLuint attribIndex, GLint size, GLenum type, + GLboolean normalized, GLuint relativeOffset); extern void GLAPIENTRY -_mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices, GLint basevertex); +_mesa_VertexArrayAttribFormat(GLuint vaobj, GLuint attribIndex, GLint size, + GLenum type, GLboolean normalized, + GLuint relativeOffset); extern void GLAPIENTRY -_mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, - GLsizei count, GLenum type, - const GLvoid *indices, - GLint basevertex); +_mesa_VertexArrayVertexAttribFormatEXT(GLuint vaobj, GLuint attribIndex, GLint size, + GLenum type, GLboolean normalized, + GLuint relativeOffset); extern void GLAPIENTRY -_mesa_DrawTransformFeedback(GLenum mode, GLuint name); +_mesa_VertexAttribIFormat(GLuint attribIndex, GLint size, GLenum type, + GLuint relativeOffset); extern void GLAPIENTRY -_mesa_PrimitiveRestartIndex(GLuint index); - +_mesa_VertexArrayAttribIFormat(GLuint vaobj, GLuint attribIndex, + GLint size, GLenum type, + GLuint relativeOffset); extern void GLAPIENTRY -_mesa_VertexAttribDivisor(GLuint index, GLuint divisor); - -extern unsigned -_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type); +_mesa_VertexArrayVertexAttribIFormatEXT(GLuint vaobj, GLuint attribIndex, + GLint size, GLenum type, + GLuint relativeOffset); extern void GLAPIENTRY -_mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset, - GLsizei stride); +_mesa_VertexAttribLFormat(GLuint attribIndex, GLint size, GLenum type, + GLuint relativeOffset); extern void GLAPIENTRY -_mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, - const GLintptr *offsets, const GLsizei *strides); +_mesa_VertexArrayAttribLFormat(GLuint vaobj, GLuint attribIndex, + GLint size, GLenum type, + GLuint relativeOffset); extern void GLAPIENTRY -_mesa_VertexAttribFormat(GLuint attribIndex, GLint size, GLenum type, - GLboolean normalized, GLuint relativeOffset); +_mesa_VertexArrayVertexAttribLFormatEXT(GLuint vaobj, GLuint attribIndex, + GLint size, GLenum type, + GLuint relativeOffset); + +void GLAPIENTRY +_mesa_VertexAttribBinding_no_error(GLuint attribIndex, GLuint bindingIndex); extern void GLAPIENTRY -_mesa_VertexAttribIFormat(GLuint attribIndex, GLint size, GLenum type, - GLuint relativeOffset); +_mesa_VertexAttribBinding(GLuint attribIndex, GLuint bindingIndex); + +void GLAPIENTRY +_mesa_VertexArrayAttribBinding_no_error(GLuint vaobj, GLuint attribIndex, + GLuint bindingIndex); extern void GLAPIENTRY -_mesa_VertexAttribLFormat(GLuint attribIndex, GLint size, GLenum type, - GLuint relativeOffset); +_mesa_VertexArrayAttribBinding(GLuint vaobj, GLuint attribIndex, + GLuint bindingIndex); extern void GLAPIENTRY -_mesa_VertexAttribBinding(GLuint attribIndex, GLuint bindingIndex); +_mesa_VertexArrayVertexAttribBindingEXT(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 GLAPIENTRY +_mesa_VertexArrayVertexBindingDivisorEXT(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, @@ -323,9 +480,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