From: Kenneth Graunke Date: Mon, 13 Mar 2017 22:36:43 +0000 (-0700) Subject: i965: Get real per-gen atom lists X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5a19d0bcecd62a55cfe7f0e7107cd33c957a1b04;p=mesa.git i965: Get real per-gen atom lists Make atoms initalization compile conditionally based on the target platform. Signed-off-by: Kenneth Graunke Signed-off-by: Rafael Antognolli --- diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index ec79a4e041a..64035702e47 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -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 diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index 9c0b82cb3a7..6c9c748b341 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@ -45,341 +45,6 @@ #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); diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c index ec571d5b3cc..b0487f9ccaf 100644 --- a/src/mesa/drivers/dri/i965/genX_state_upload.c +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c @@ -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 +}