diff options
| author | marha <marha@users.sourceforge.net> | 2011-01-16 16:08:57 +0000 | 
|---|---|---|
| committer | marha <marha@users.sourceforge.net> | 2011-01-16 16:08:57 +0000 | 
| commit | 367c91bebcdc1f5ba4278b68eb8715218d9640ad (patch) | |
| tree | 7ddef803c402f1b84e293793c5fd3d0e95d3de0a /mesalib/src/mesa/tnl | |
| parent | 6feea7e6cdde235d7e3727c4155ca9f8d90df3ca (diff) | |
| download | vcxsrv-367c91bebcdc1f5ba4278b68eb8715218d9640ad.tar.gz vcxsrv-367c91bebcdc1f5ba4278b68eb8715218d9640ad.tar.bz2 vcxsrv-367c91bebcdc1f5ba4278b68eb8715218d9640ad.zip | |
mesalib git update 16/1/2011
Diffstat (limited to 'mesalib/src/mesa/tnl')
| -rw-r--r-- | mesalib/src/mesa/tnl/t_context.h | 2 | ||||
| -rw-r--r-- | mesalib/src/mesa/tnl/t_draw.c | 19 | ||||
| -rw-r--r-- | mesalib/src/mesa/tnl/t_vb_program.c | 7 | 
3 files changed, 19 insertions, 9 deletions
| diff --git a/mesalib/src/mesa/tnl/t_context.h b/mesalib/src/mesa/tnl/t_context.h index ecc4e2aa4..9fd5c99bb 100644 --- a/mesalib/src/mesa/tnl/t_context.h +++ b/mesalib/src/mesa/tnl/t_context.h @@ -527,6 +527,8 @@ typedef struct     GLubyte *block[VERT_ATTRIB_MAX];
     GLuint nr_blocks;
 +   GLuint CurInstance;
 +
  } TNLcontext;
 diff --git a/mesalib/src/mesa/tnl/t_draw.c b/mesalib/src/mesa/tnl/t_draw.c index 6f152ad53..2a11091c8 100644 --- a/mesalib/src/mesa/tnl/t_draw.c +++ b/mesalib/src/mesa/tnl/t_draw.c @@ -453,6 +453,7 @@ void _tnl_draw_prims( struct gl_context *ctx,         */
        struct gl_buffer_object *bo[VERT_ATTRIB_MAX + 1];
        GLuint nr_bo = 0;
 +      GLuint inst;
        for (i = 0; i < nr_prims;) {
  	 GLuint this_nr_prims;
 @@ -470,15 +471,19 @@ void _tnl_draw_prims( struct gl_context *ctx,  	 /* Binding inputs may imply mapping some vertex buffer objects.
  	  * They will need to be unmapped below.
  	  */
 -	 bind_prims(ctx, &prim[i], this_nr_prims);
 -	 bind_inputs(ctx, arrays, max_index + prim[i].basevertex + 1,
 -		     bo, &nr_bo);
 -	 bind_indices(ctx, ib, bo, &nr_bo);
 +         for (inst = 0; inst < prim[i].num_instances; inst++) {
 -	 TNL_CONTEXT(ctx)->Driver.RunPipeline(ctx);
 +            bind_prims(ctx, &prim[i], this_nr_prims);
 +            bind_inputs(ctx, arrays, max_index + prim[i].basevertex + 1,
 +                        bo, &nr_bo);
 +            bind_indices(ctx, ib, bo, &nr_bo);
 -	 unmap_vbos(ctx, bo, nr_bo);
 -	 free_space(ctx);
 +            tnl->CurInstance = inst;
 +            TNL_CONTEXT(ctx)->Driver.RunPipeline(ctx);
 +
 +            unmap_vbos(ctx, bo, nr_bo);
 +            free_space(ctx);
 +         }
  	 i += this_nr_prims;
        }
 diff --git a/mesalib/src/mesa/tnl/t_vb_program.c b/mesalib/src/mesa/tnl/t_vb_program.c index ea5717a7a..4b1a212fd 100644 --- a/mesalib/src/mesa/tnl/t_vb_program.c +++ b/mesalib/src/mesa/tnl/t_vb_program.c @@ -220,7 +220,8 @@ _tnl_program_string(struct gl_context *ctx, GLenum target, struct gl_program *pr   * Initialize virtual machine state prior to executing vertex program.
   */
  static void
 -init_machine(struct gl_context *ctx, struct gl_program_machine *machine)
 +init_machine(struct gl_context *ctx, struct gl_program_machine *machine,
 +             GLuint instID)
  {
     /* Input registers get initialized from the current vertex attribs */
     memcpy(machine->VertAttribs, ctx->Current.Attrib,
 @@ -256,6 +257,8 @@ init_machine(struct gl_context *ctx, struct gl_program_machine *machine)     machine->FetchTexelDeriv = NULL; /* not used by vertex programs */
     machine->Samplers = ctx->VertexProgram._Current->Base.SamplerUnits;
 +
 +   machine->SystemValues[SYSTEM_VALUE_INSTANCE_ID][0] = (GLfloat) instID;
  }
 @@ -341,7 +344,7 @@ run_vp( struct gl_context *ctx, struct tnl_pipeline_stage *stage )     for (i = 0; i < VB->Count; i++) {
        GLuint attr;
 -      init_machine(ctx, machine);
 +      init_machine(ctx, machine, tnl->CurInstance);
  #if 0
        printf("Input  %d: %f, %f, %f, %f\n", i,
 | 
