i965: Get real per-gen atom lists
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 13 Mar 2017 22:36:43 +0000 (15:36 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 4 May 2017 01:57:51 +0000 (18:57 -0700)
Make atoms initalization compile conditionally based on the target
platform.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com>
src/mesa/drivers/dri/i965/brw_state.h
src/mesa/drivers/dri/i965/brw_state_upload.c
src/mesa/drivers/dri/i965/genX_state_upload.c

index ec79a4e041a97d89fc5f1a36ef00047e27c38c08..64035702e4736eaf496fb7141e574385adb1d2fe 100644 (file)
@@ -441,6 +441,19 @@ void brw_calculate_guardband_size(const struct gen_device_info *devinfo,
                                   float *xmin, float *xmax,
                                   float *ymin, float *ymax);
 
+void brw_copy_pipeline_atoms(struct brw_context *brw,
+                             enum brw_pipeline pipeline,
+                             const struct brw_tracked_state **atoms,
+                             int num_atoms);
+void gen4_init_atoms(struct brw_context *brw);
+void gen45_init_atoms(struct brw_context *brw);
+void gen5_init_atoms(struct brw_context *brw);
+void gen6_init_atoms(struct brw_context *brw);
+void gen7_init_atoms(struct brw_context *brw);
+void gen75_init_atoms(struct brw_context *brw);
+void gen8_init_atoms(struct brw_context *brw);
+void gen9_init_atoms(struct brw_context *brw);
+
 #ifdef __cplusplus
 }
 #endif
index 9c0b82cb3a7c184ebae6a6823d9505314b83059e..6c9c748b3411052a26457d18bb75a09e4fc38570 100644 (file)
 #include "brw_cs.h"
 #include "main/framebuffer.h"
 
-static const struct brw_tracked_state *gen4_atoms[] =
-{
-   /* Once all the programs are done, we know how large urb entry
-    * sizes need to be and can decide if we need to change the urb
-    * layout.
-    */
-   &brw_curbe_offsets,
-   &brw_recalculate_urb_fence,
-
-   &brw_cc_vp,
-   &brw_cc_unit,
-
-   /* Surface state setup.  Must come before the VS/WM unit.  The binding
-    * table upload must be last.
-    */
-   &brw_vs_pull_constants,
-   &brw_wm_pull_constants,
-   &brw_renderbuffer_surfaces,
-   &brw_renderbuffer_read_surfaces,
-   &brw_texture_surfaces,
-   &brw_vs_binding_table,
-   &brw_wm_binding_table,
-
-   &brw_fs_samplers,
-   &brw_vs_samplers,
-
-   /* These set up state for brw_psp_urb_cbs */
-   &brw_wm_unit,
-   &brw_sf_vp,
-   &brw_sf_unit,
-   &brw_vs_unit,               /* always required, enabled or not */
-   &brw_clip_unit,
-   &brw_gs_unit,
-
-   /* Command packets:
-    */
-   &brw_invariant_state,
-
-   &brw_binding_table_pointers,
-   &brw_blend_constant_color,
-
-   &brw_depthbuffer,
-
-   &brw_polygon_stipple,
-   &brw_polygon_stipple_offset,
-
-   &brw_line_stipple,
-
-   &brw_psp_urb_cbs,
-
-   &brw_drawing_rect,
-   &brw_indices, /* must come before brw_vertices */
-   &brw_index_buffer,
-   &brw_vertices,
-
-   &brw_constant_buffer
-};
-
-static const struct brw_tracked_state *gen6_atoms[] =
-{
-   &gen6_sf_and_clip_viewports,
-
-   /* Command packets: */
-
-   &brw_cc_vp,
-   &gen6_viewport_state,       /* must do after *_vp stages */
-
-   &gen6_urb,
-   &gen6_blend_state,          /* must do before cc unit */
-   &gen6_color_calc_state,     /* must do before cc unit */
-   &gen6_depth_stencil_state,  /* must do before cc unit */
-
-   &gen6_vs_push_constants, /* Before vs_state */
-   &gen6_gs_push_constants, /* Before gs_state */
-   &gen6_wm_push_constants, /* Before wm_state */
-
-   /* Surface state setup.  Must come before the VS/WM unit.  The binding
-    * table upload must be last.
-    */
-   &brw_vs_pull_constants,
-   &brw_vs_ubo_surfaces,
-   &brw_gs_pull_constants,
-   &brw_gs_ubo_surfaces,
-   &brw_wm_pull_constants,
-   &brw_wm_ubo_surfaces,
-   &gen6_renderbuffer_surfaces,
-   &brw_renderbuffer_read_surfaces,
-   &brw_texture_surfaces,
-   &gen6_sol_surface,
-   &brw_vs_binding_table,
-   &gen6_gs_binding_table,
-   &brw_wm_binding_table,
-
-   &brw_fs_samplers,
-   &brw_vs_samplers,
-   &brw_gs_samplers,
-   &gen6_sampler_state,
-   &gen6_multisample_state,
-
-   &gen6_vs_state,
-   &gen6_gs_state,
-   &gen6_clip_state,
-   &gen6_sf_state,
-   &gen6_wm_state,
-
-   &gen6_scissor_state,
-
-   &gen6_binding_table_pointers,
-
-   &brw_depthbuffer,
-
-   &brw_polygon_stipple,
-   &brw_polygon_stipple_offset,
-
-   &brw_line_stipple,
-
-   &brw_drawing_rect,
-
-   &brw_indices, /* must come before brw_vertices */
-   &brw_index_buffer,
-   &brw_vertices,
-};
-
-static const struct brw_tracked_state *gen7_render_atoms[] =
-{
-   /* Command packets: */
-
-   &brw_cc_vp,
-   &gen7_sf_clip_viewport,
-
-   &gen7_l3_state,
-   &gen7_push_constant_space,
-   &gen7_urb,
-   &gen6_blend_state,          /* must do before cc unit */
-   &gen6_color_calc_state,     /* must do before cc unit */
-   &gen6_depth_stencil_state,  /* must do before cc unit */
-
-   &brw_vs_image_surfaces, /* Before vs push/pull constants and binding table */
-   &brw_tcs_image_surfaces, /* Before tcs push/pull constants and binding table */
-   &brw_tes_image_surfaces, /* Before tes push/pull constants and binding table */
-   &brw_gs_image_surfaces, /* Before gs push/pull constants and binding table */
-   &brw_wm_image_surfaces, /* Before wm push/pull constants and binding table */
-
-   &gen6_vs_push_constants, /* Before vs_state */
-   &gen7_tcs_push_constants,
-   &gen7_tes_push_constants,
-   &gen6_gs_push_constants, /* Before gs_state */
-   &gen6_wm_push_constants, /* Before wm_surfaces and constant_buffer */
-
-   /* Surface state setup.  Must come before the VS/WM unit.  The binding
-    * table upload must be last.
-    */
-   &brw_vs_pull_constants,
-   &brw_vs_ubo_surfaces,
-   &brw_vs_abo_surfaces,
-   &brw_tcs_pull_constants,
-   &brw_tcs_ubo_surfaces,
-   &brw_tcs_abo_surfaces,
-   &brw_tes_pull_constants,
-   &brw_tes_ubo_surfaces,
-   &brw_tes_abo_surfaces,
-   &brw_gs_pull_constants,
-   &brw_gs_ubo_surfaces,
-   &brw_gs_abo_surfaces,
-   &brw_wm_pull_constants,
-   &brw_wm_ubo_surfaces,
-   &brw_wm_abo_surfaces,
-   &gen6_renderbuffer_surfaces,
-   &brw_renderbuffer_read_surfaces,
-   &brw_texture_surfaces,
-   &brw_vs_binding_table,
-   &brw_tcs_binding_table,
-   &brw_tes_binding_table,
-   &brw_gs_binding_table,
-   &brw_wm_binding_table,
-
-   &brw_fs_samplers,
-   &brw_vs_samplers,
-   &brw_tcs_samplers,
-   &brw_tes_samplers,
-   &brw_gs_samplers,
-   &gen6_multisample_state,
-
-   &gen7_vs_state,
-   &gen7_hs_state,
-   &gen7_te_state,
-   &gen7_ds_state,
-   &gen7_gs_state,
-   &gen7_sol_state,
-   &gen6_clip_state,
-   &gen7_sbe_state,
-   &gen7_sf_state,
-   &gen7_wm_state,
-   &gen7_ps_state,
-
-   &gen6_scissor_state,
-
-   &gen7_depthbuffer,
-
-   &brw_polygon_stipple,
-   &brw_polygon_stipple_offset,
-
-   &brw_line_stipple,
-
-   &brw_drawing_rect,
-
-   &brw_indices, /* must come before brw_vertices */
-   &brw_index_buffer,
-   &brw_vertices,
-
-   &haswell_cut_index,
-};
-
-static const struct brw_tracked_state *gen7_compute_atoms[] =
-{
-   &gen7_l3_state,
-   &brw_cs_image_surfaces,
-   &gen7_cs_push_constants,
-   &brw_cs_pull_constants,
-   &brw_cs_ubo_surfaces,
-   &brw_cs_abo_surfaces,
-   &brw_cs_texture_surfaces,
-   &brw_cs_work_groups_surface,
-   &brw_cs_samplers,
-   &brw_cs_state,
-};
-
-static const struct brw_tracked_state *gen8_render_atoms[] =
-{
-   &brw_cc_vp,
-   &gen8_sf_clip_viewport,
-
-   &gen7_l3_state,
-   &gen7_push_constant_space,
-   &gen7_urb,
-   &gen8_blend_state,
-   &gen6_color_calc_state,
-
-   &brw_vs_image_surfaces, /* Before vs push/pull constants and binding table */
-   &brw_tcs_image_surfaces, /* Before tcs push/pull constants and binding table */
-   &brw_tes_image_surfaces, /* Before tes push/pull constants and binding table */
-   &brw_gs_image_surfaces, /* Before gs push/pull constants and binding table */
-   &brw_wm_image_surfaces, /* Before wm push/pull constants and binding table */
-
-   &gen6_vs_push_constants, /* Before vs_state */
-   &gen7_tcs_push_constants,
-   &gen7_tes_push_constants,
-   &gen6_gs_push_constants, /* Before gs_state */
-   &gen6_wm_push_constants, /* Before wm_surfaces and constant_buffer */
-
-   /* Surface state setup.  Must come before the VS/WM unit.  The binding
-    * table upload must be last.
-    */
-   &brw_vs_pull_constants,
-   &brw_vs_ubo_surfaces,
-   &brw_vs_abo_surfaces,
-   &brw_tcs_pull_constants,
-   &brw_tcs_ubo_surfaces,
-   &brw_tcs_abo_surfaces,
-   &brw_tes_pull_constants,
-   &brw_tes_ubo_surfaces,
-   &brw_tes_abo_surfaces,
-   &brw_gs_pull_constants,
-   &brw_gs_ubo_surfaces,
-   &brw_gs_abo_surfaces,
-   &brw_wm_pull_constants,
-   &brw_wm_ubo_surfaces,
-   &brw_wm_abo_surfaces,
-   &gen6_renderbuffer_surfaces,
-   &brw_renderbuffer_read_surfaces,
-   &brw_texture_surfaces,
-   &brw_vs_binding_table,
-   &brw_tcs_binding_table,
-   &brw_tes_binding_table,
-   &brw_gs_binding_table,
-   &brw_wm_binding_table,
-
-   &brw_fs_samplers,
-   &brw_vs_samplers,
-   &brw_tcs_samplers,
-   &brw_tes_samplers,
-   &brw_gs_samplers,
-   &gen8_multisample_state,
-
-   &gen8_vs_state,
-   &gen8_hs_state,
-   &gen7_te_state,
-   &gen8_ds_state,
-   &gen8_gs_state,
-   &gen7_sol_state,
-   &gen6_clip_state,
-   &gen8_raster_state,
-   &gen8_sbe_state,
-   &gen8_sf_state,
-   &gen8_ps_blend,
-   &gen8_ps_extra,
-   &gen8_ps_state,
-   &gen8_wm_depth_stencil,
-   &gen8_wm_state,
-
-   &gen6_scissor_state,
-
-   &gen7_depthbuffer,
-
-   &brw_polygon_stipple,
-   &brw_polygon_stipple_offset,
-
-   &brw_line_stipple,
-
-   &brw_drawing_rect,
-
-   &gen8_vf_topology,
-
-   &brw_indices,
-   &gen8_index_buffer,
-   &gen8_vertices,
-
-   &haswell_cut_index,
-   &gen8_pma_fix,
-};
-
-static const struct brw_tracked_state *gen8_compute_atoms[] =
-{
-   &gen7_l3_state,
-   &brw_cs_image_surfaces,
-   &gen7_cs_push_constants,
-   &brw_cs_pull_constants,
-   &brw_cs_ubo_surfaces,
-   &brw_cs_abo_surfaces,
-   &brw_cs_texture_surfaces,
-   &brw_cs_work_groups_surface,
-   &brw_cs_samplers,
-   &brw_cs_state,
-};
-
 static void
 brw_upload_initial_gpu_state(struct brw_context *brw)
 {
@@ -439,7 +104,7 @@ brw_get_pipeline_atoms(struct brw_context *brw,
    }
 }
 
-static void
+void
 brw_copy_pipeline_atoms(struct brw_context *brw,
                         enum brw_pipeline pipeline,
                         const struct brw_tracked_state **atoms,
@@ -467,40 +132,24 @@ void brw_init_state( struct brw_context *brw )
    /* Force the first brw_select_pipeline to emit pipeline select */
    brw->last_pipeline = BRW_NUM_PIPELINES;
 
-   STATIC_ASSERT(ARRAY_SIZE(gen4_atoms) <= ARRAY_SIZE(brw->render_atoms));
-   STATIC_ASSERT(ARRAY_SIZE(gen6_atoms) <= ARRAY_SIZE(brw->render_atoms));
-   STATIC_ASSERT(ARRAY_SIZE(gen7_render_atoms) <=
-                 ARRAY_SIZE(brw->render_atoms));
-   STATIC_ASSERT(ARRAY_SIZE(gen8_render_atoms) <=
-                 ARRAY_SIZE(brw->render_atoms));
-   STATIC_ASSERT(ARRAY_SIZE(gen7_compute_atoms) <=
-                 ARRAY_SIZE(brw->compute_atoms));
-   STATIC_ASSERT(ARRAY_SIZE(gen8_compute_atoms) <=
-                 ARRAY_SIZE(brw->compute_atoms));
-
    brw_init_caches(brw);
 
-   if (brw->gen >= 8) {
-      brw_copy_pipeline_atoms(brw, BRW_RENDER_PIPELINE,
-                              gen8_render_atoms,
-                              ARRAY_SIZE(gen8_render_atoms));
-      brw_copy_pipeline_atoms(brw, BRW_COMPUTE_PIPELINE,
-                              gen8_compute_atoms,
-                              ARRAY_SIZE(gen8_compute_atoms));
-   } else if (brw->gen == 7) {
-      brw_copy_pipeline_atoms(brw, BRW_RENDER_PIPELINE,
-                              gen7_render_atoms,
-                              ARRAY_SIZE(gen7_render_atoms));
-      brw_copy_pipeline_atoms(brw, BRW_COMPUTE_PIPELINE,
-                              gen7_compute_atoms,
-                              ARRAY_SIZE(gen7_compute_atoms));
-   } else if (brw->gen == 6) {
-      brw_copy_pipeline_atoms(brw, BRW_RENDER_PIPELINE,
-                              gen6_atoms, ARRAY_SIZE(gen6_atoms));
-   } else {
-      brw_copy_pipeline_atoms(brw, BRW_RENDER_PIPELINE,
-                              gen4_atoms, ARRAY_SIZE(gen4_atoms));
-   }
+   if (brw->gen >= 9)
+      gen9_init_atoms(brw);
+   else if (brw->gen >= 8)
+      gen8_init_atoms(brw);
+   else if (brw->is_haswell)
+      gen75_init_atoms(brw);
+   else if (brw->gen >= 7)
+      gen7_init_atoms(brw);
+   else if (brw->gen >= 6)
+      gen6_init_atoms(brw);
+   else if (brw->gen >= 5)
+      gen5_init_atoms(brw);
+   else if (brw->is_g4x)
+      gen45_init_atoms(brw);
+   else
+      gen4_init_atoms(brw);
 
    brw_upload_initial_gpu_state(brw);
 
index ec571d5b3cc270aae90ddd5582f71bad76d1b836..b0487f9ccaf2305901f6ff4f187d516d570fa503 100644 (file)
@@ -107,3 +107,343 @@ __gen_combine_address(struct brw_context *brw, void *location,
         _dst = NULL)
 
 /* ---------------------------------------------------------------------- */
+
+
+/* ---------------------------------------------------------------------- */
+
+void
+genX(init_atoms)(struct brw_context *brw)
+{
+#if GEN_GEN < 6
+   static const struct brw_tracked_state *render_atoms[] =
+   {
+      /* Once all the programs are done, we know how large urb entry
+       * sizes need to be and can decide if we need to change the urb
+       * layout.
+       */
+      &brw_curbe_offsets,
+      &brw_recalculate_urb_fence,
+
+      &brw_cc_vp,
+      &brw_cc_unit,
+
+      /* Surface state setup.  Must come before the VS/WM unit.  The binding
+       * table upload must be last.
+       */
+      &brw_vs_pull_constants,
+      &brw_wm_pull_constants,
+      &brw_renderbuffer_surfaces,
+      &brw_renderbuffer_read_surfaces,
+      &brw_texture_surfaces,
+      &brw_vs_binding_table,
+      &brw_wm_binding_table,
+
+      &brw_fs_samplers,
+      &brw_vs_samplers,
+
+      /* These set up state for brw_psp_urb_cbs */
+      &brw_wm_unit,
+      &brw_sf_vp,
+      &brw_sf_unit,
+      &brw_vs_unit,            /* always required, enabled or not */
+      &brw_clip_unit,
+      &brw_gs_unit,
+
+      /* Command packets:
+       */
+      &brw_invariant_state,
+
+      &brw_binding_table_pointers,
+      &brw_blend_constant_color,
+
+      &brw_depthbuffer,
+
+      &brw_polygon_stipple,
+      &brw_polygon_stipple_offset,
+
+      &brw_line_stipple,
+
+      &brw_psp_urb_cbs,
+
+      &brw_drawing_rect,
+      &brw_indices, /* must come before brw_vertices */
+      &brw_index_buffer,
+      &brw_vertices,
+
+      &brw_constant_buffer
+   };
+#elif GEN_GEN == 6
+   static const struct brw_tracked_state *render_atoms[] =
+   {
+      &gen6_sf_and_clip_viewports,
+
+      /* Command packets: */
+
+      &brw_cc_vp,
+      &gen6_viewport_state,    /* must do after *_vp stages */
+
+      &gen6_urb,
+      &gen6_blend_state,               /* must do before cc unit */
+      &gen6_color_calc_state,  /* must do before cc unit */
+      &gen6_depth_stencil_state,       /* must do before cc unit */
+
+      &gen6_vs_push_constants, /* Before vs_state */
+      &gen6_gs_push_constants, /* Before gs_state */
+      &gen6_wm_push_constants, /* Before wm_state */
+
+      /* Surface state setup.  Must come before the VS/WM unit.  The binding
+       * table upload must be last.
+       */
+      &brw_vs_pull_constants,
+      &brw_vs_ubo_surfaces,
+      &brw_gs_pull_constants,
+      &brw_gs_ubo_surfaces,
+      &brw_wm_pull_constants,
+      &brw_wm_ubo_surfaces,
+      &gen6_renderbuffer_surfaces,
+      &brw_renderbuffer_read_surfaces,
+      &brw_texture_surfaces,
+      &gen6_sol_surface,
+      &brw_vs_binding_table,
+      &gen6_gs_binding_table,
+      &brw_wm_binding_table,
+
+      &brw_fs_samplers,
+      &brw_vs_samplers,
+      &brw_gs_samplers,
+      &gen6_sampler_state,
+      &gen6_multisample_state,
+
+      &gen6_vs_state,
+      &gen6_gs_state,
+      &gen6_clip_state,
+      &gen6_sf_state,
+      &gen6_wm_state,
+
+      &gen6_scissor_state,
+
+      &gen6_binding_table_pointers,
+
+      &brw_depthbuffer,
+
+      &brw_polygon_stipple,
+      &brw_polygon_stipple_offset,
+
+      &brw_line_stipple,
+
+      &brw_drawing_rect,
+
+      &brw_indices, /* must come before brw_vertices */
+      &brw_index_buffer,
+      &brw_vertices,
+   };
+#elif GEN_GEN == 7
+   static const struct brw_tracked_state *render_atoms[] =
+   {
+      /* Command packets: */
+
+      &brw_cc_vp,
+      &gen7_sf_clip_viewport,
+
+      &gen7_l3_state,
+      &gen7_push_constant_space,
+      &gen7_urb,
+      &gen6_blend_state,               /* must do before cc unit */
+      &gen6_color_calc_state,  /* must do before cc unit */
+      &gen6_depth_stencil_state,       /* must do before cc unit */
+
+      &brw_vs_image_surfaces, /* Before vs push/pull constants and binding table */
+      &brw_tcs_image_surfaces, /* Before tcs push/pull constants and binding table */
+      &brw_tes_image_surfaces, /* Before tes push/pull constants and binding table */
+      &brw_gs_image_surfaces, /* Before gs push/pull constants and binding table */
+      &brw_wm_image_surfaces, /* Before wm push/pull constants and binding table */
+
+      &gen6_vs_push_constants, /* Before vs_state */
+      &gen7_tcs_push_constants,
+      &gen7_tes_push_constants,
+      &gen6_gs_push_constants, /* Before gs_state */
+      &gen6_wm_push_constants, /* Before wm_surfaces and constant_buffer */
+
+      /* Surface state setup.  Must come before the VS/WM unit.  The binding
+       * table upload must be last.
+       */
+      &brw_vs_pull_constants,
+      &brw_vs_ubo_surfaces,
+      &brw_vs_abo_surfaces,
+      &brw_tcs_pull_constants,
+      &brw_tcs_ubo_surfaces,
+      &brw_tcs_abo_surfaces,
+      &brw_tes_pull_constants,
+      &brw_tes_ubo_surfaces,
+      &brw_tes_abo_surfaces,
+      &brw_gs_pull_constants,
+      &brw_gs_ubo_surfaces,
+      &brw_gs_abo_surfaces,
+      &brw_wm_pull_constants,
+      &brw_wm_ubo_surfaces,
+      &brw_wm_abo_surfaces,
+      &gen6_renderbuffer_surfaces,
+      &brw_renderbuffer_read_surfaces,
+      &brw_texture_surfaces,
+      &brw_vs_binding_table,
+      &brw_tcs_binding_table,
+      &brw_tes_binding_table,
+      &brw_gs_binding_table,
+      &brw_wm_binding_table,
+
+      &brw_fs_samplers,
+      &brw_vs_samplers,
+      &brw_tcs_samplers,
+      &brw_tes_samplers,
+      &brw_gs_samplers,
+      &gen6_multisample_state,
+
+      &gen7_vs_state,
+      &gen7_hs_state,
+      &gen7_te_state,
+      &gen7_ds_state,
+      &gen7_gs_state,
+      &gen7_sol_state,
+      &gen6_clip_state,
+      &gen7_sbe_state,
+      &gen7_sf_state,
+      &gen7_wm_state,
+      &gen7_ps_state,
+
+      &gen6_scissor_state,
+
+      &gen7_depthbuffer,
+
+      &brw_polygon_stipple,
+      &brw_polygon_stipple_offset,
+
+      &brw_line_stipple,
+
+      &brw_drawing_rect,
+
+      &brw_indices, /* must come before brw_vertices */
+      &brw_index_buffer,
+      &brw_vertices,
+
+      &haswell_cut_index,
+   };
+#elif GEN_GEN >= 8
+   static const struct brw_tracked_state *render_atoms[] =
+   {
+      &brw_cc_vp,
+      &gen8_sf_clip_viewport,
+
+      &gen7_l3_state,
+      &gen7_push_constant_space,
+      &gen7_urb,
+      &gen8_blend_state,
+      &gen6_color_calc_state,
+
+      &brw_vs_image_surfaces, /* Before vs push/pull constants and binding table */
+      &brw_tcs_image_surfaces, /* Before tcs push/pull constants and binding table */
+      &brw_tes_image_surfaces, /* Before tes push/pull constants and binding table */
+      &brw_gs_image_surfaces, /* Before gs push/pull constants and binding table */
+      &brw_wm_image_surfaces, /* Before wm push/pull constants and binding table */
+
+      &gen6_vs_push_constants, /* Before vs_state */
+      &gen7_tcs_push_constants,
+      &gen7_tes_push_constants,
+      &gen6_gs_push_constants, /* Before gs_state */
+      &gen6_wm_push_constants, /* Before wm_surfaces and constant_buffer */
+
+      /* Surface state setup.  Must come before the VS/WM unit.  The binding
+       * table upload must be last.
+       */
+      &brw_vs_pull_constants,
+      &brw_vs_ubo_surfaces,
+      &brw_vs_abo_surfaces,
+      &brw_tcs_pull_constants,
+      &brw_tcs_ubo_surfaces,
+      &brw_tcs_abo_surfaces,
+      &brw_tes_pull_constants,
+      &brw_tes_ubo_surfaces,
+      &brw_tes_abo_surfaces,
+      &brw_gs_pull_constants,
+      &brw_gs_ubo_surfaces,
+      &brw_gs_abo_surfaces,
+      &brw_wm_pull_constants,
+      &brw_wm_ubo_surfaces,
+      &brw_wm_abo_surfaces,
+      &gen6_renderbuffer_surfaces,
+      &brw_renderbuffer_read_surfaces,
+      &brw_texture_surfaces,
+      &brw_vs_binding_table,
+      &brw_tcs_binding_table,
+      &brw_tes_binding_table,
+      &brw_gs_binding_table,
+      &brw_wm_binding_table,
+
+      &brw_fs_samplers,
+      &brw_vs_samplers,
+      &brw_tcs_samplers,
+      &brw_tes_samplers,
+      &brw_gs_samplers,
+      &gen8_multisample_state,
+
+      &gen8_vs_state,
+      &gen8_hs_state,
+      &gen7_te_state,
+      &gen8_ds_state,
+      &gen8_gs_state,
+      &gen7_sol_state,
+      &gen6_clip_state,
+      &gen8_raster_state,
+      &gen8_sbe_state,
+      &gen8_sf_state,
+      &gen8_ps_blend,
+      &gen8_ps_extra,
+      &gen8_ps_state,
+      &gen8_wm_depth_stencil,
+      &gen8_wm_state,
+
+      &gen6_scissor_state,
+
+      &gen7_depthbuffer,
+
+      &brw_polygon_stipple,
+      &brw_polygon_stipple_offset,
+
+      &brw_line_stipple,
+
+      &brw_drawing_rect,
+
+      &gen8_vf_topology,
+
+      &brw_indices,
+      &gen8_index_buffer,
+      &gen8_vertices,
+
+      &haswell_cut_index,
+      &gen8_pma_fix,
+   };
+#endif
+
+   STATIC_ASSERT(ARRAY_SIZE(render_atoms) <= ARRAY_SIZE(brw->render_atoms));
+   brw_copy_pipeline_atoms(brw, BRW_RENDER_PIPELINE,
+                           render_atoms, ARRAY_SIZE(render_atoms));
+
+#if GEN_GEN >= 7
+   static const struct brw_tracked_state *compute_atoms[] =
+   {
+      &gen7_l3_state,
+      &brw_cs_image_surfaces,
+      &gen7_cs_push_constants,
+      &brw_cs_pull_constants,
+      &brw_cs_ubo_surfaces,
+      &brw_cs_abo_surfaces,
+      &brw_cs_texture_surfaces,
+      &brw_cs_work_groups_surface,
+      &brw_cs_samplers,
+      &brw_cs_state,
+   };
+
+   STATIC_ASSERT(ARRAY_SIZE(compute_atoms) <= ARRAY_SIZE(brw->compute_atoms));
+   brw_copy_pipeline_atoms(brw, BRW_COMPUTE_PIPELINE,
+                           compute_atoms, ARRAY_SIZE(compute_atoms));
+#endif
+}