OK.

Comment added.

Thanks,
Thomas

________________________________________
From: Keith Whitwell [[email protected]]
Sent: Tuesday, January 20, 2009 11:16
To: Thomas Hellstrom
Cc: [email protected]
Subject: Re: [Mesa3d-dev] [PATCH] tnl: Add a utility function to emit indexed 
vertices to dma buffers.

This looks ok, but it's clearly a quick & dirty approach to what's being
done.

I think I'd probably just add a comment saying that this functionality
has been implemented more comprehensively in
gallium/auxiliary/translate, such that the whole function is
code-generated including the indexed lookup.

If someone found this code being a hotspot for them, then the gallium
translate module (which is an evolution of t_vertex.[ch]) is a good
place to start looking for a solution.

Keith

On Mon, 2009-01-19 at 12:52 -0800, [email protected] wrote:
> From: Thomas Hellstrom <thellstrom-at-vmware-dot-com>
>
> ---
>  src/mesa/tnl/t_vertex.c |   45 ++++++++++++++++++++++++++++++++++++++++++++-
>  src/mesa/tnl/t_vertex.h |    6 ++++++
>  2 files changed, 50 insertions(+), 1 deletions(-)
>
> diff --git a/src/mesa/tnl/t_vertex.c b/src/mesa/tnl/t_vertex.c
> index b661524..165b001 100644
> --- a/src/mesa/tnl/t_vertex.c
> +++ b/src/mesa/tnl/t_vertex.c
> @@ -376,6 +376,22 @@ void _tnl_notify_pipeline_output_change( GLcontext *ctx )
>     invalidate_funcs(vtx);
>  }
>
> +
> +static void adjust_input_ptrs( GLcontext *ctx, GLint diff)
> +{
> +   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
> +   struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
> +   struct tnl_clipspace_attr *a = vtx->attr;
> +   const GLuint count = vtx->attr_count;
> +   int j;
> +
> +   diff -= 1;
> +   for (j=0; j<count; ++j) {
> +           register GLvector4f *vptr = VB->AttribPtr[a->attrib];
> +        (a++)->inputptr += diff*vptr->stride;
> +   }
> +}
> +
>  static void update_input_ptrs( GLcontext *ctx, GLuint start )
>  {
>     struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
> @@ -431,13 +447,40 @@ void *_tnl_emit_vertices_to_buffer( GLcontext *ctx,
>     struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
>
>     update_input_ptrs(ctx, start);
> -
>     /* Note: dest should not be adjusted for non-zero 'start' values:
>      */
>     vtx->emit( ctx, end - start, (GLubyte*) dest );
>     return (void *)((GLubyte *)dest + vtx->vertex_size * (end - start));
>  }
>
> +/* Emit indexed VB vertices start..end to dest.  Note that VB vertex at
> + * postion start will be emitted to dest at position zero.
> + */
> +
> +void *_tnl_emit_indexed_vertices_to_buffer( GLcontext *ctx,
> +                                         GLuint *elts,
> +                                         GLuint start,
> +                                         GLuint end,
> +                                         void *dest )
> +{
> +   struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx);
> +   GLuint oldIndex;
> +   GLubyte *cdest = dest;
> +
> +   update_input_ptrs(ctx, oldIndex = elts[start++]);
> +   vtx->emit( ctx, 1, cdest );
> +   cdest += vtx->vertex_size;
> +
> +   for (; start < end; ++start) {
> +      adjust_input_ptrs(ctx, elts[start] - oldIndex);
> +      oldIndex = elts[start];
> +      vtx->emit( ctx, 1, cdest);
> +      cdest += vtx->vertex_size;
> +   }
> +
> +   return (void *) cdest;
> +}
> +
>
>  void _tnl_init_vertices( GLcontext *ctx,
>                       GLuint vb_size,
> diff --git a/src/mesa/tnl/t_vertex.h b/src/mesa/tnl/t_vertex.h
> index 712311a..271efdf 100644
> --- a/src/mesa/tnl/t_vertex.h
> +++ b/src/mesa/tnl/t_vertex.h
> @@ -118,6 +118,12 @@ extern void *_tnl_emit_vertices_to_buffer( GLcontext 
> *ctx,
>                                          GLuint start,
>                                          GLuint end,
>                                          void *dest );
> +extern void *_tnl_emit_indexed_vertices_to_buffer( GLcontext *ctx,
> +                                                GLuint *elts,
> +                                                GLuint start,
> +                                                GLuint end,
> +                                                void *dest );
> +
>
>  extern void _tnl_build_vertices( GLcontext *ctx,
>                                GLuint start,


------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to