On Tue,  8 Nov 2011 14:32:09 -0800, Kenneth Graunke <kenn...@whitecape.org> 
wrote:
> Like for the WM pull constants, we can merge the former prepare/emit
> stages into one tracked state atom.  Furthermore, the code that used to
> handle the binding table was removed in the last commit, leaving some
> rather silly looking short functions that can easily be folded in.
> 
> Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>

> -   &brw_vs_constants, /* Before vs_surfaces and constant_buffer */
> -   &brw_wm_pull_constants,  /* Before brw_wm_binding_table */
> +   /* Pull constants must be before brw_binding_table */
> +   &brw_vs_pull_constants,
> +   &brw_wm_pull_constants,
> +
>     &gen6_vs_push_constants, /* Before vs_state */
>     &gen6_wm_push_constants, /* Before wm_state */
>  
> -   &brw_vs_surfaces,         /* must do before unit */
>     &brw_renderbuffer_surfaces,  /* must do before unit */
>     &brw_texture_surfaces,       /* must do before unit */
>     &brw_binding_table,

I think the pull constants atoms should live down with the rest of the
surfaces.

> -/**
> - * Update the surface state for a VS constant buffer.
> - *
> - * Sets brw->vs.surf_bo[surf] and brw->vp->const_buffer.
> - */
> -static void
> -brw_update_vs_constant_surface( struct gl_context *ctx,
> -                                GLuint surf)
> -{
> -   struct brw_context *brw = brw_context(ctx);
> -   struct intel_context *intel = &brw->intel;
> -   struct brw_vertex_program *vp =
> -      (struct brw_vertex_program *) brw->vertex_program;
> -   const struct gl_program_parameter_list *params = 
> vp->program.Base.Parameters;
> -
> -   /* If there's no constant buffer, then no surface BO is needed to point at
> -    * it.
> -    */
> -   if (brw->vs.const_bo == NULL) {
> -      brw->bind.surf_offset[surf] = 0;
> -      return;
> -   }
>  
> +   const int surf = SURF_INDEX_VERT_CONST_BUFFER;
>     intel->vtbl.create_constant_surface(brw, brw->vs.const_bo,
>                                      params->NumParameters,
>                                      &brw->bind.surf_offset[surf]);

> -const struct brw_tracked_state brw_vs_surfaces = {
> +const struct brw_tracked_state brw_vs_pull_constants = {
>     .dirty = {
> -      .mesa = 0,
> -      .brw = (BRW_NEW_VS_CONSTBUF |
> -           BRW_NEW_BATCH),
> -      .cache = 0
> +      .mesa = (_NEW_PROGRAM_CONSTANTS),
> +      .brw = (BRW_NEW_VERTEX_PROGRAM),
> +      .cache = CACHE_NEW_VS_PROG,
>     },
> -   .emit = brw_upload_vs_surfaces,
> +   .emit = brw_upload_vs_pull_constants,
>  };

Looks like BRW_NEW_BATCH got misplaced, which is required since you're
uploading state batch data (create_constant_surface()).

Hmm.  You know, I ought to add some debug code that checks that
!bo_references(intel->batch.bo, old_batch_bo).

Attachment: pgpm732kX1QIo.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to