X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Farrayobj.h;h=5de74505bb80285d360a66e6c2a93b1c51858f29;hb=ca721b3d894a49d7342f5aa053ed132017e9352a;hp=8999edc724f0603b79394e178e5a903abc5d3055;hpb=cd63e35603568c168e8aebbc47ca6ea308f2ccfa;p=mesa.git diff --git a/src/mesa/main/arrayobj.h b/src/mesa/main/arrayobj.h index 8999edc724f..5de74505bb8 100644 --- a/src/mesa/main/arrayobj.h +++ b/src/mesa/main/arrayobj.h @@ -1,6 +1,5 @@ /* * Mesa 3-D graphics library - * Version: 7.6 * * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * (C) Copyright IBM Corporation 2006 @@ -19,20 +18,24 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL OR IBM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. */ #ifndef ARRAYOBJ_H #define ARRAYOBJ_H -#include "context.h" +#include "glheader.h" +#include "mtypes.h" +#include "glformats.h" + +struct gl_context; /** * \file arrayobj.h - * Functions for the GL_APPLE_vertex_array_object extension. + * Functions for the GL_ARB_vertex_array_object extension. * * \author Ian Romanick * \author Brian Paul @@ -42,25 +45,96 @@ * Internal functions */ -extern struct gl_array_object * -_mesa_new_array_object( GLcontext *ctx, GLuint name ); +extern struct gl_vertex_array_object * +_mesa_lookup_vao(struct gl_context *ctx, GLuint id); + +extern struct gl_vertex_array_object * +_mesa_lookup_vao_err(struct gl_context *ctx, GLuint id, const char *caller); + +extern struct gl_vertex_array_object * +_mesa_new_vao(struct gl_context *ctx, GLuint name); extern void -_mesa_delete_array_object( GLcontext *ctx, struct gl_array_object *obj ); +_mesa_delete_vao(struct gl_context *ctx, struct gl_vertex_array_object *obj); extern void -_mesa_reference_array_object(GLcontext *ctx, - struct gl_array_object **ptr, - struct gl_array_object *arrayObj); +_mesa_reference_vao_(struct gl_context *ctx, + struct gl_vertex_array_object **ptr, + struct gl_vertex_array_object *vao); + +static inline void +_mesa_reference_vao(struct gl_context *ctx, + struct gl_vertex_array_object **ptr, + struct gl_vertex_array_object *vao) +{ + if (*ptr != vao) + _mesa_reference_vao_(ctx, ptr, vao); +} + extern void -_mesa_initialize_array_object( GLcontext *ctx, - struct gl_array_object *obj, GLuint name ); +_mesa_initialize_vao(struct gl_context *ctx, + struct gl_vertex_array_object *obj, GLuint name); extern void -_mesa_update_array_object_max_element(GLcontext *ctx, - struct gl_array_object *arrayObj); +_mesa_update_vao_derived_arrays(struct gl_context *ctx, + struct gl_vertex_array_object *vao); + +/* Returns true if all varying arrays reside in vbos */ +extern bool +_mesa_all_varyings_in_vbos(const struct gl_vertex_array_object *vao); + +/* Returns true if all vbos are unmapped */ +extern bool +_mesa_all_buffers_are_unmapped(const struct gl_vertex_array_object *vao); + + +/** + * Array to apply the position/generic0 aliasing map to + * an attribute value used in vertex processing inputs to an attribute + * as they appear in the vao. + */ +extern const GLubyte +_mesa_vao_attribute_map[ATTRIBUTE_MAP_MODE_MAX][VERT_ATTRIB_MAX]; + + +/** + * Apply the position/generic0 aliasing map to a bitfield from the vao. + * Use for example to convert gl_vertex_array_object::_Enabled + * or gl_vertex_buffer_binding::_VertexBinding from the vao numbering to + * the numbering used with vertex processing inputs. + */ +static inline GLbitfield +_mesa_vao_enable_to_vp_inputs(gl_attribute_map_mode mode, GLbitfield enabled) +{ + switch (mode) { + case ATTRIBUTE_MAP_MODE_IDENTITY: + return enabled; + case ATTRIBUTE_MAP_MODE_POSITION: + /* Copy VERT_ATTRIB_POS enable bit into GENERIC0 position */ + return (enabled & ~VERT_BIT_GENERIC0) + | ((enabled & VERT_BIT_POS) << VERT_ATTRIB_GENERIC0); + case ATTRIBUTE_MAP_MODE_GENERIC0: + /* Copy VERT_ATTRIB_GENERIC0 enable bit into POS position */ + return (enabled & ~VERT_BIT_POS) + | ((enabled & VERT_BIT_GENERIC0) >> VERT_ATTRIB_GENERIC0); + default: + return 0; + } +} + + +/** + * Return the vp_inputs enabled bitmask after application of + * the position/generic0 aliasing map. + */ +static inline GLbitfield +_mesa_get_vao_vp_inputs(const struct gl_vertex_array_object *vao) +{ + const gl_attribute_map_mode mode = vao->_AttributeMapMode; + return _mesa_vao_enable_to_vp_inputs(mode, vao->_Enabled); +} /* @@ -68,16 +142,33 @@ _mesa_update_array_object_max_element(GLcontext *ctx, */ +void GLAPIENTRY +_mesa_BindVertexArray_no_error(GLuint id); + void GLAPIENTRY _mesa_BindVertexArray( GLuint id ); -void GLAPIENTRY _mesa_BindVertexArrayAPPLE( GLuint id ); +void GLAPIENTRY +_mesa_DeleteVertexArrays_no_error(GLsizei n, const GLuint *ids); + +void GLAPIENTRY _mesa_DeleteVertexArrays(GLsizei n, const GLuint *ids); -void GLAPIENTRY _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids); +void GLAPIENTRY +_mesa_GenVertexArrays_no_error(GLsizei n, GLuint *arrays); void GLAPIENTRY _mesa_GenVertexArrays(GLsizei n, GLuint *arrays); -void GLAPIENTRY _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *buffer); +void GLAPIENTRY +_mesa_CreateVertexArrays_no_error(GLsizei n, GLuint *arrays); + +void GLAPIENTRY _mesa_CreateVertexArrays(GLsizei n, GLuint *arrays); + +GLboolean GLAPIENTRY _mesa_IsVertexArray( GLuint id ); + +void GLAPIENTRY +_mesa_VertexArrayElementBuffer_no_error(GLuint vaobj, GLuint buffer); + +void GLAPIENTRY _mesa_VertexArrayElementBuffer(GLuint vaobj, GLuint buffer); -GLboolean GLAPIENTRY _mesa_IsVertexArrayAPPLE( GLuint id ); +void GLAPIENTRY _mesa_GetVertexArrayiv(GLuint vaobj, GLenum pname, GLint *param); #endif /* ARRAYOBJ_H */