i965: Clean up code for VS pull constant surface creation.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 7 Nov 2011 06:41:26 +0000 (22:41 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 11 Nov 2011 06:51:19 +0000 (22:51 -0800)
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 <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_state.h
src/mesa/drivers/dri/i965/brw_state_upload.c
src/mesa/drivers/dri/i965/brw_vs_surface_state.c

index c27399678b2fd99f39c7073da49f46a02df2a84f..44f5fe1626d1c41b1611c08214aa21bfd2d54957 100644 (file)
@@ -41,7 +41,7 @@ extern const struct brw_tracked_state brw_cc_unit;
 extern const struct brw_tracked_state brw_check_fallback;
 extern const struct brw_tracked_state brw_clip_prog;
 extern const struct brw_tracked_state brw_clip_unit;
-extern const struct brw_tracked_state brw_vs_constants;
+extern const struct brw_tracked_state brw_vs_pull_constants;
 extern const struct brw_tracked_state brw_wm_pull_constants;
 extern const struct brw_tracked_state brw_constant_buffer;
 extern const struct brw_tracked_state brw_curbe_offsets;
@@ -63,7 +63,6 @@ extern const struct brw_tracked_state brw_sf_vp;
 extern const struct brw_tracked_state brw_state_base_address;
 extern const struct brw_tracked_state brw_urb_fence;
 extern const struct brw_tracked_state brw_vertex_state;
-extern const struct brw_tracked_state brw_vs_surfaces;
 extern const struct brw_tracked_state brw_vs_prog;
 extern const struct brw_tracked_state brw_vs_unit;
 extern const struct brw_tracked_state brw_wm_input_sizes;
index c94b0ebbd72025c92fe75814a86c4467d3e0c0fe..fe4aed0db093afd05cb37192777f57a75c9f2d12 100644 (file)
@@ -63,10 +63,10 @@ static const struct brw_tracked_state *gen4_atoms[] =
    &brw_cc_vp,
    &brw_cc_unit,
 
-   &brw_vs_constants, /* Before vs_surfaces and constant_buffer */
-   &brw_wm_pull_constants, /* Before brw_wm_binding_table */
+   /* Must be before brw_binding_table */
+   &brw_vs_pull_constants,
+   &brw_wm_pull_constants,
 
-   &brw_vs_surfaces,           /* must do before unit */
    &brw_renderbuffer_surfaces,  /* must do before unit */
    &brw_texture_surfaces,       /* must do before unit */
    &brw_binding_table,
@@ -133,12 +133,13 @@ static const struct brw_tracked_state *gen6_atoms[] =
    &gen6_depth_stencil_state,  /* must do before cc unit */
    &gen6_cc_state_pointers,
 
-   &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,
@@ -198,12 +199,13 @@ const struct brw_tracked_state *gen7_atoms[] =
    &gen7_cc_state_pointer,
    &gen7_depth_stencil_state_pointer,
 
-   &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_surfaces and constant_buffer */
 
-   &brw_vs_surfaces,           /* must do before unit */
    &brw_renderbuffer_surfaces,  /* must do before unit */
    &brw_texture_surfaces,       /* must do before unit */
    &brw_binding_table,
index 66d5545b7a9997297dbf745da463dc91b8e7acaa..2f7b211d5eccfc72ae2da1d3654793b7b7be9692 100644 (file)
@@ -65,6 +65,7 @@ brw_upload_vs_pull_constants(struct brw_context *brw)
       if (brw->vs.const_bo) {
         drm_intel_bo_unreference(brw->vs.const_bo);
         brw->vs.const_bo = NULL;
+        brw->bind.surf_offset[SURF_INDEX_VERT_CONST_BUFFER] = 0;
         brw->state.dirty.brw |= BRW_NEW_VS_CONSTBUF;
       }
       return;
@@ -92,66 +93,20 @@ brw_upload_vs_pull_constants(struct brw_context *brw)
    }
 
    drm_intel_gem_bo_unmap_gtt(brw->vs.const_bo);
-   brw->state.dirty.brw |= BRW_NEW_VS_CONSTBUF;
-}
-
-const struct brw_tracked_state brw_vs_constants = {
-   .dirty = {
-      .mesa = (_NEW_PROGRAM_CONSTANTS),
-      .brw = (BRW_NEW_VERTEX_PROGRAM),
-      .cache = CACHE_NEW_VS_PROG,
-   },
-   .emit = brw_upload_vs_pull_constants,
-};
-
-/**
- * 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]);
-}
-
-/**
- * Vertex shader surfaces (constant buffer).
- */
-static void
-brw_upload_vs_surfaces(struct brw_context *brw)
-{
-   struct gl_context *ctx = &brw->intel.ctx;
 
-   /* BRW_NEW_VS_CONSTBUF */
-   if (brw->vs.const_bo) {
-      brw_update_vs_constant_surface(ctx, SURF_INDEX_VERT_CONST_BUFFER);
-   }
+   brw->state.dirty.brw |= BRW_NEW_VS_CONSTBUF;
 }
 
-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_BATCH | BRW_NEW_VERTEX_PROGRAM),
+      .cache = CACHE_NEW_VS_PROG,
    },
-   .emit = brw_upload_vs_surfaces,
+   .emit = brw_upload_vs_pull_constants,
 };