-/**************************************************************************\r
- * \r
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.\r
- * All Rights Reserved.\r
- * \r
- * Permission is hereby granted, free of charge, to any person obtaining a\r
- * copy of this software and associated documentation files (the\r
- * "Software"), to deal in the Software without restriction, including\r
- * without limitation the rights to use, copy, modify, merge, publish,\r
- * distribute, sub license, and/or sell copies of the Software, and to\r
- * permit persons to whom the Software is furnished to do so, subject to\r
- * the following conditions:\r
- * \r
- * The above copyright notice and this permission notice (including the\r
- * next paragraph) shall be included in all copies or substantial portions\r
- * of the Software.\r
- * \r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\r
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR\r
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
- * \r
- **************************************************************************/\r
-\r
- /*\r
- * Authors:\r
- * Keith Whitwell <keith@tungstengraphics.com>\r
- */\r
-\r
-#ifndef DRAW_PT_H\r
-#define DRAW_PT_H\r
-\r
-#include "pipe/p_compiler.h"\r
-\r
-typedef unsigned (*pt_elt_func)( const void *elts, unsigned idx );\r
-\r
-\r
-/* The "front end" - prepare sets of fetch, draw elements for the\r
- * middle end.\r
- *\r
- * Currenly one version of this:\r
- * - vcache - catchall implementation, decomposes to TRI/LINE/POINT prims\r
- * Later:\r
- * - varray, varray_split\r
- * - velement, velement_split\r
- *\r
- * Currenly only using the vcache version.\r
- */\r
-struct draw_pt_front_end {\r
- void (*prepare)( struct draw_pt_front_end *,\r
- struct draw_pt_middle_end * );\r
-\r
- void (*run)( struct draw_pt_front_end *,\r
- unsigned prim,\r
- pt_elt_func elt_func,\r
- const void *elt_ptr,\r
- unsigned count );\r
-\r
- void (*finish)( struct draw_pt_front_end * );\r
- void (*destroy)( struct draw_pt_front_end * );\r
-};\r
-\r
-\r
-/* The "middle end" - prepares actual hardware vertices for the\r
- * hardware backend.\r
- *\r
- * Currently two versions of this:\r
- * - fetch, vertex shade, cliptest, prim-pipeline\r
- * - fetch, emit (ie passthrough)\r
- * Later:\r
- * - fetch, vertex shade, cliptest, maybe-pipeline, maybe-emit\r
- * - fetch, vertex shade, emit\r
- *\r
- * Currenly only using the passthrough version.\r
- */\r
-struct draw_pt_middle_end {\r
- void (*prepare)( struct draw_pt_middle_end * );\r
-\r
- void (*run)( struct draw_pt_middle_end *,\r
- unsigned prim,\r
- const unsigned *fetch_elts,\r
- unsigned fetch_count,\r
- const ushort *draw_elts,\r
- unsigned draw_count );\r
-\r
- void (*finish)( struct draw_pt_middle_end * );\r
- void (*destroy)( struct draw_pt_middle_end * );\r
-};\r
-\r
-\r
-/* The "back end" - supplied by the driver, defined in draw_vbuf.h.\r
- *\r
- * Not sure whether to wrap the prim pipeline up as an alternate\r
- * backend. Would be a win for everything except pure passthrough\r
- * mode... \r
- */\r
-struct vbuf_render;\r
-\r
-\r
-/* Helper functions.\r
- */\r
-pt_elt_func draw_pt_elt_func( struct draw_context *draw );\r
-const void *draw_pt_elt_ptr( struct draw_context *draw,\r
- unsigned start );\r
-\r
-/* Implementations:\r
- */\r
-struct draw_pt_front_end *draw_pt_vcache( void );\r
-struct draw_pt_middle_end *draw_pt_fetch_emit( struct draw_context *draw );\r
-\r
-\r
-\r
-#endif\r
+/**************************************************************************
+ *
+ * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ *
+ **************************************************************************/
+
+ /*
+ * Authors:
+ * Keith Whitwell <keith@tungstengraphics.com>
+ */
+
+#ifndef DRAW_PT_H
+#define DRAW_PT_H
+
+#include "pipe/p_compiler.h"
+
+typedef unsigned (*pt_elt_func)( const void *elts, unsigned idx );
+
+
+/* The "front end" - prepare sets of fetch, draw elements for the
+ * middle end.
+ *
+ * Currenly one version of this:
+ * - vcache - catchall implementation, decomposes to TRI/LINE/POINT prims
+ * Later:
+ * - varray, varray_split
+ * - velement, velement_split
+ *
+ * Currenly only using the vcache version.
+ */
+struct draw_pt_front_end {
+ void (*prepare)( struct draw_pt_front_end *,
+ struct draw_pt_middle_end * );
+
+ void (*run)( struct draw_pt_front_end *,
+ unsigned prim,
+ pt_elt_func elt_func,
+ const void *elt_ptr,
+ unsigned count );
+
+ void (*finish)( struct draw_pt_front_end * );
+ void (*destroy)( struct draw_pt_front_end * );
+};
+
+
+/* The "middle end" - prepares actual hardware vertices for the
+ * hardware backend.
+ *
+ * Currently two versions of this:
+ * - fetch, vertex shade, cliptest, prim-pipeline
+ * - fetch, emit (ie passthrough)
+ * Later:
+ * - fetch, vertex shade, cliptest, maybe-pipeline, maybe-emit
+ * - fetch, vertex shade, emit
+ *
+ * Currenly only using the passthrough version.
+ */
+struct draw_pt_middle_end {
+ void (*prepare)( struct draw_pt_middle_end * );
+
+ void (*run)( struct draw_pt_middle_end *,
+ unsigned prim,
+ const unsigned *fetch_elts,
+ unsigned fetch_count,
+ const ushort *draw_elts,
+ unsigned draw_count );
+
+ void (*finish)( struct draw_pt_middle_end * );
+ void (*destroy)( struct draw_pt_middle_end * );
+};
+
+
+/* The "back end" - supplied by the driver, defined in draw_vbuf.h.
+ *
+ * Not sure whether to wrap the prim pipeline up as an alternate
+ * backend. Would be a win for everything except pure passthrough
+ * mode...
+ */
+struct vbuf_render;
+
+
+/* Helper functions.
+ */
+pt_elt_func draw_pt_elt_func( struct draw_context *draw );
+const void *draw_pt_elt_ptr( struct draw_context *draw,
+ unsigned start );
+
+/* Implementations:
+ */
+struct draw_pt_front_end *draw_pt_vcache( void );
+struct draw_pt_middle_end *draw_pt_fetch_emit( struct draw_context *draw );
+
+
+
+#endif
-/**************************************************************************\r
- * \r
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.\r
- * All Rights Reserved.\r
- * \r
- * Permission is hereby granted, free of charge, to any person obtaining a\r
- * copy of this software and associated documentation files (the\r
- * "Software"), to deal in the Software without restriction, including\r
- * without limitation the rights to use, copy, modify, merge, publish,\r
- * distribute, sub license, and/or sell copies of the Software, and to\r
- * permit persons to whom the Software is furnished to do so, subject to\r
- * the following conditions:\r
- * \r
- * The above copyright notice and this permission notice (including the\r
- * next paragraph) shall be included in all copies or substantial portions\r
- * of the Software.\r
- * \r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\r
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR\r
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
- * \r
- **************************************************************************/\r
-\r
- /*\r
- * Authors:\r
- * Keith Whitwell <keith@tungstengraphics.com>\r
- */\r
-\r
-#include "draw/draw_pt.h"\r
-#include "draw/draw_private.h"\r
-\r
-/* Neat get_elt func that also works for varrays drawing by encoding\r
- * the start value into a pointer. \r
- */\r
-\r
-static unsigned elt_uint( const void *elts, unsigned idx )\r
-{\r
- return *(((const uint *)elts) + idx);\r
-}\r
-\r
-static unsigned elt_ushort( const void *elts, unsigned idx )\r
-{\r
- return *(((const ushort *)elts) + idx);\r
-}\r
-\r
-static unsigned elt_ubyte( const void *elts, unsigned idx )\r
-{\r
- return *(((const ubyte *)elts) + idx);\r
-}\r
-\r
-static unsigned elt_vert( const void *elts, unsigned idx )\r
-{\r
- return (const ubyte *)elts - (const ubyte *)NULL + idx;\r
-}\r
-\r
-pt_elt_func draw_pt_elt_func( struct draw_context *draw )\r
-{\r
- switch (draw->user.eltSize) {\r
- case 0: return elt_vert;\r
- case 1: return elt_ubyte;\r
- case 2: return elt_ushort; \r
- case 4: return elt_uint;\r
- default: return NULL;\r
- }\r
-} \r
-\r
-const void *draw_pt_elt_ptr( struct draw_context *draw,\r
- unsigned start )\r
-{\r
- const char *elts = draw->user.elts;\r
-\r
- switch (draw->user.eltSize) {\r
- case 0: \r
- return (const void *)(((const ubyte *)NULL) + start);\r
- case 1: \r
- return (const void *)(((const ubyte *)elts) + start);\r
- case 2: \r
- return (const void *)(((const ushort *)elts) + start);\r
- case 4: \r
- return (const void *)(((const uint *)elts) + start);\r
- default:\r
- return NULL;\r
- }\r
-}\r
+/**************************************************************************
+ *
+ * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ *
+ **************************************************************************/
+
+ /*
+ * Authors:
+ * Keith Whitwell <keith@tungstengraphics.com>
+ */
+
+#include "draw/draw_pt.h"
+#include "draw/draw_private.h"
+
+/* Neat get_elt func that also works for varrays drawing by encoding
+ * the start value into a pointer.
+ */
+
+static unsigned elt_uint( const void *elts, unsigned idx )
+{
+ return *(((const uint *)elts) + idx);
+}
+
+static unsigned elt_ushort( const void *elts, unsigned idx )
+{
+ return *(((const ushort *)elts) + idx);
+}
+
+static unsigned elt_ubyte( const void *elts, unsigned idx )
+{
+ return *(((const ubyte *)elts) + idx);
+}
+
+static unsigned elt_vert( const void *elts, unsigned idx )
+{
+ return (const ubyte *)elts - (const ubyte *)NULL + idx;
+}
+
+pt_elt_func draw_pt_elt_func( struct draw_context *draw )
+{
+ switch (draw->user.eltSize) {
+ case 0: return elt_vert;
+ case 1: return elt_ubyte;
+ case 2: return elt_ushort;
+ case 4: return elt_uint;
+ default: return NULL;
+ }
+}
+
+const void *draw_pt_elt_ptr( struct draw_context *draw,
+ unsigned start )
+{
+ const char *elts = draw->user.elts;
+
+ switch (draw->user.eltSize) {
+ case 0:
+ return (const void *)(((const ubyte *)NULL) + start);
+ case 1:
+ return (const void *)(((const ubyte *)elts) + start);
+ case 2:
+ return (const void *)(((const ushort *)elts) + start);
+ case 4:
+ return (const void *)(((const uint *)elts) + start);
+ default:
+ return NULL;
+ }
+}