More meaningful warning.
[mesa.git] / src / mesa / tnl / t_vertex.h
index 26f2619c52b029c1e2b8973cb35756450d1f9bf9..fda8f151d3eb497b9b9092cadce243ec05f8442c 100644 (file)
 #ifndef _TNL_VERTEX_H
 #define _TNL_VERTEX_H
 
+#include "mtypes.h"
+#include "t_context.h"
+
 /* New mechanism to specify hardware vertices so that tnl can build
  * and manipulate them directly.  
  */
 
+
+/* It will probably be necessary to allow drivers to specify new
+ * emit-styles to cover all the wierd and wacky things out there.
+ */
 enum tnl_attr_format {
-   EMIT_1F = 1,
-   EMIT_2F = 2,
-   EMIT_3F = 3,
-   EMIT_4F = 4,
+   EMIT_1F,
+   EMIT_2F,
+   EMIT_3F,
+   EMIT_4F,
    EMIT_2F_VIEWPORT,           /* do viewport transform and emit */
    EMIT_3F_VIEWPORT,           /* do viewport transform and emit */
    EMIT_4F_VIEWPORT,           /* do viewport transform and emit */
    EMIT_3F_XYW,                        /* for projective texture */
    EMIT_1UB_1F,                        /* for fog coordinate */
-   EMIT_3UB_3F_BGR,            /* for specular color */
    EMIT_3UB_3F_RGB,            /* for specular color */
-   EMIT_4UB_4F_BGRA,           /* for color */
+   EMIT_3UB_3F_BGR,            /* for specular color */
    EMIT_4UB_4F_RGBA,           /* for color */
-   EMIT_NOP_1F,
-   EMIT_NOP_1UB,
+   EMIT_4UB_4F_BGRA,           /* for color */
+   EMIT_4UB_4F_ARGB,           /* for color */
+   EMIT_4UB_4F_ABGR,           /* for color */
+   EMIT_4CHAN_4F_RGBA,         /* for swrast color */
+   EMIT_PAD,                   /* leave a hole of 'offset' bytes */
+   EMIT_MAX
 };
 
 struct tnl_attr_map {
-   GLuint attr;                        /* VERT_ATTRIB_ enum */
+   GLuint attrib;                      /* _TNL_ATTRIB_ enum */
    enum tnl_attr_format format;
+   GLuint offset;
 };
-   
 
-/* Emit hardware vertices to a given buffer:
- */
-extern void _tnl_emit( GLcontext *ctx,
-                      GLuint start, GLuint end,
-                      void *dest,
-                      GLuint stride );
+struct tnl_format_info {
+   const char *name;
+   tnl_extract_func extract;
+   tnl_insert_func insert[4];
+   const GLuint attrsize;
+};
+
+extern const struct tnl_format_info _tnl_format_info[EMIT_MAX];
+
 
 /* Interpolate between two vertices to produce a third:
  */
@@ -72,21 +85,85 @@ extern void _tnl_interp( GLcontext *ctx,
 
 /* Copy colors from one vertex to another:
  */
-extern void _tnl_copy_colors(  GLcontext *ctx, GLuint edst, GLuint esrc );
+extern void _tnl_copy_pv(  GLcontext *ctx, GLuint edst, GLuint esrc );
 
 
 /* Extract a named attribute from a hardware vertex.  Will have to
  * reverse any viewport transformation, swizzling or other conversions
  * which may have been applied:
  */
-extern void _tnl_get_attr( GLcontext *ctx, void *vertex, GLenum attrib,
+extern void _tnl_get_attr( GLcontext *ctx, const void *vertex, GLenum attrib,
                           GLfloat *dest );
 
-/* Populate a swrast SWvertex from an attrib-style vertex.
+/* Complementary to the above.
  */
-extern void _tnl_translate( GLcontext *ctx, const void *vertex, 
-                           SWvertex *dest );
+extern void _tnl_set_attr( GLcontext *ctx, void *vout, GLenum attrib, 
+                          const GLfloat *src );
+
+
+extern void *_tnl_get_vertex( GLcontext *ctx, GLuint nr );
+
+extern GLuint _tnl_install_attrs( GLcontext *ctx,
+                                 const struct tnl_attr_map *map,
+                                 GLuint nr, const GLfloat *vp,
+                                 GLuint unpacked_size );
+
+extern void _tnl_free_vertices( GLcontext *ctx );
+
+extern void _tnl_init_vertices( GLcontext *ctx, 
+                               GLuint vb_size,
+                               GLuint max_vertex_size );
+
+extern void *_tnl_emit_vertices_to_buffer( GLcontext *ctx,
+                                          GLuint start,
+                                          GLuint end,
+                                          void *dest );
 
+extern void _tnl_build_vertices( GLcontext *ctx,
+                                GLuint start,
+                                GLuint end,
+                                GLuint newinputs );
 
+extern void _tnl_invalidate_vertices( GLcontext *ctx, GLuint newinputs );
+
+extern void _tnl_invalidate_vertex_state( GLcontext *ctx, GLuint new_state );
+
+extern void _tnl_notify_pipeline_output_change( GLcontext *ctx );
+
+
+#define GET_VERTEX_STATE(ctx)  &(TNL_CONTEXT(ctx)->clipspace)
+
+/* Internal function:
+ */
+void _tnl_register_fastpath( struct tnl_clipspace *vtx,
+                            GLboolean match_strides );
+
+
+/* t_vertex_generic.c -- Internal functions for t_vertex.c
+ */
+void _tnl_generic_copy_pv_extras( GLcontext *ctx, 
+                                 GLuint dst, GLuint src );
+
+void _tnl_generic_interp_extras( GLcontext *ctx,
+                                GLfloat t,
+                                GLuint dst, GLuint out, GLuint in,
+                                GLboolean force_boundary );
+
+void _tnl_generic_copy_pv( GLcontext *ctx, GLuint edst, GLuint esrc );
+
+void _tnl_generic_interp( GLcontext *ctx,
+                         GLfloat t,
+                         GLuint edst, GLuint eout, GLuint ein,
+                         GLboolean force_boundary );
+
+void _tnl_generic_emit( GLcontext *ctx,
+                       GLuint count,
+                       GLubyte *v );
+
+void _tnl_generate_hardwired_emit( GLcontext *ctx );
+
+/* t_vertex_sse.c -- Internal functions for t_vertex.c
+ */
+void _tnl_generate_sse_emit( GLcontext *ctx );
 
 #endif