vbo_exec.h revision 7117f1b4
1/************************************************************************** 2 3Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas. 4 5All Rights Reserved. 6 7Permission is hereby granted, free of charge, to any person obtaining a 8copy of this software and associated documentation files (the "Software"), 9to deal in the Software without restriction, including without limitation 10on the rights to use, copy, modify, merge, publish, distribute, sub 11license, and/or sell copies of the Software, and to permit persons to whom 12the Software is furnished to do so, subject to the following conditions: 13 14The above copyright notice and this permission notice (including the next 15paragraph) shall be included in all copies or substantial portions of the 16Software. 17 18THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 21TUNGSTEN GRAPHICS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 22DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24USE OR OTHER DEALINGS IN THE SOFTWARE. 25 26**************************************************************************/ 27 28/* 29 * Authors: 30 * Keith Whitwell <keith@tungstengraphics.com> 31 * 32 */ 33 34#ifndef __VBO_EXEC_H__ 35#define __VBO_EXEC_H__ 36 37#include "mtypes.h" 38#include "vbo.h" 39#include "vbo_attrib.h" 40 41 42#define VBO_MAX_PRIM 64 43 44/* Wierd implementation stuff: 45 */ 46#define VBO_VERT_BUFFER_SIZE (1024*16) /* dwords == 64k */ 47#define VBO_MAX_ATTR_CODEGEN 16 48#define ERROR_ATTRIB 16 49 50 51 52 53struct vbo_exec_eval1_map { 54 struct gl_1d_map *map; 55 GLuint sz; 56}; 57 58struct vbo_exec_eval2_map { 59 struct gl_2d_map *map; 60 GLuint sz; 61}; 62 63 64 65struct vbo_exec_copied_vtx { 66 GLfloat buffer[VBO_ATTRIB_MAX * 4 * VBO_MAX_COPIED_VERTS]; 67 GLuint nr; 68}; 69 70 71typedef void (*vbo_attrfv_func)( const GLfloat * ); 72 73 74struct vbo_exec_context 75{ 76 GLcontext *ctx; 77 GLvertexformat vtxfmt; 78 79 struct { 80 struct gl_buffer_object *bufferobj; 81 GLubyte *buffer_map; 82 83 GLuint vertex_size; 84 85 struct _mesa_prim prim[VBO_MAX_PRIM]; 86 GLuint prim_count; 87 88 GLfloat *vbptr; /* cursor, points into buffer */ 89 GLfloat vertex[VBO_ATTRIB_MAX*4]; /* current vertex */ 90 91 GLuint vert_count; 92 GLuint max_vert; 93 struct vbo_exec_copied_vtx copied; 94 95 GLubyte attrsz[VBO_ATTRIB_MAX]; 96 GLubyte active_sz[VBO_ATTRIB_MAX]; 97 98 GLfloat *attrptr[VBO_ATTRIB_MAX]; 99 struct gl_client_array arrays[VBO_ATTRIB_MAX]; 100 101 /* According to program mode, the values above plus current 102 * values are squashed down to the 32 attributes passed to the 103 * vertex program below: 104 */ 105 GLuint program_mode; 106 GLuint enabled_flags; 107 const struct gl_client_array *inputs[VERT_ATTRIB_MAX]; 108 } vtx; 109 110 111 struct { 112 GLboolean recalculate_maps; 113 struct vbo_exec_eval1_map map1[VERT_ATTRIB_MAX]; 114 struct vbo_exec_eval2_map map2[VERT_ATTRIB_MAX]; 115 } eval; 116 117 struct { 118 GLuint program_mode; 119 GLuint enabled_flags; 120 GLuint array_obj; 121 122 /* These just mirror the current arrayobj (todo: make arrayobj 123 * look like this and remove the mirror): 124 */ 125 const struct gl_client_array *legacy_array[16]; 126 const struct gl_client_array *generic_array[16]; 127 128 /* Arrays and current values manipulated according to program 129 * mode, etc. These are the attributes as seen by vertex 130 * programs: 131 */ 132 const struct gl_client_array *inputs[VERT_ATTRIB_MAX]; 133 } array; 134}; 135 136 137 138/* External API: 139 */ 140void vbo_exec_init( GLcontext *ctx ); 141void vbo_exec_destroy( GLcontext *ctx ); 142void vbo_exec_invalidate_state( GLcontext *ctx, GLuint new_state ); 143void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags ); 144 145 146/* Internal functions: 147 */ 148void vbo_exec_array_init( struct vbo_exec_context *exec ); 149void vbo_exec_array_destroy( struct vbo_exec_context *exec ); 150 151 152void vbo_exec_vtx_init( struct vbo_exec_context *exec ); 153void vbo_exec_vtx_destroy( struct vbo_exec_context *exec ); 154void vbo_exec_vtx_flush( struct vbo_exec_context *exec ); 155void vbo_exec_vtx_wrap( struct vbo_exec_context *exec ); 156 157void vbo_exec_eval_update( struct vbo_exec_context *exec ); 158 159void vbo_exec_do_EvalCoord2f( struct vbo_exec_context *exec, 160 GLfloat u, GLfloat v ); 161 162void vbo_exec_do_EvalCoord1f( struct vbo_exec_context *exec, 163 GLfloat u); 164 165extern GLboolean 166vbo_validate_shaders(GLcontext *ctx); 167 168#endif 169