diff --git a/.pick_status.json b/.pick_status.json index 341e2f29f99..03bfbbd09de 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -6223,7 +6223,7 @@ "description": "iris: initialize shared screen->vtbl only once", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/iris/iris_genx_protos.h b/src/gallium/drivers/iris/iris_genx_protos.h index 407d77684b3..d6dddb17111 100644 --- a/src/gallium/drivers/iris/iris_genx_protos.h +++ b/src/gallium/drivers/iris/iris_genx_protos.h @@ -29,6 +29,7 @@ /* iris_state.c */ void genX(init_state)(struct iris_context *ice); +void genX(init_screen_state)(struct iris_screen *screen); void genX(emit_hashing_mode)(struct iris_context *ice, struct iris_batch *batch, unsigned width, unsigned height, diff --git a/src/gallium/drivers/iris/iris_screen.c b/src/gallium/drivers/iris/iris_screen.c index ca75a1308dd..00821c723bf 100644 --- a/src/gallium/drivers/iris/iris_screen.c +++ b/src/gallium/drivers/iris/iris_screen.c @@ -56,6 +56,24 @@ #include "intel/common/gen_l3_config.h" #include "iris_monitor.h" +#define genX_call(devinfo, func, ...) \ + switch (devinfo.gen) { \ + case 12: \ + gen12_##func(__VA_ARGS__); \ + break; \ + case 11: \ + gen11_##func(__VA_ARGS__); \ + break; \ + case 9: \ + gen9_##func(__VA_ARGS__); \ + break; \ + case 8: \ + gen8_##func(__VA_ARGS__); \ + break; \ + default: \ + unreachable("Unknown hardware generation"); \ + } + static void iris_flush_frontbuffer(struct pipe_screen *_screen, struct pipe_resource *resource, @@ -779,5 +797,7 @@ iris_screen_create(int fd, const struct pipe_screen_config *config) pscreen->get_driver_query_group_info = iris_get_monitor_group_info; pscreen->get_driver_query_info = iris_get_monitor_info; + genX_call(screen->devinfo, init_screen_state, screen); + return pscreen; } diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 1397e06226c..cab20e55285 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -7685,6 +7685,41 @@ iris_set_frontend_noop(struct pipe_context *ctx, bool enable) } } +void +genX(init_screen_state)(struct iris_screen *screen) +{ + screen->vtbl.destroy_state = iris_destroy_state; + screen->vtbl.init_render_context = iris_init_render_context; + screen->vtbl.init_compute_context = iris_init_compute_context; + screen->vtbl.upload_render_state = iris_upload_render_state; + screen->vtbl.update_surface_base_address = iris_update_surface_base_address; + screen->vtbl.upload_compute_state = iris_upload_compute_state; + screen->vtbl.emit_raw_pipe_control = iris_emit_raw_pipe_control; + screen->vtbl.emit_mi_report_perf_count = iris_emit_mi_report_perf_count; + screen->vtbl.rebind_buffer = iris_rebind_buffer; + screen->vtbl.load_register_reg32 = iris_load_register_reg32; + screen->vtbl.load_register_reg64 = iris_load_register_reg64; + screen->vtbl.load_register_imm32 = iris_load_register_imm32; + screen->vtbl.load_register_imm64 = iris_load_register_imm64; + screen->vtbl.load_register_mem32 = iris_load_register_mem32; + screen->vtbl.load_register_mem64 = iris_load_register_mem64; + screen->vtbl.store_register_mem32 = iris_store_register_mem32; + screen->vtbl.store_register_mem64 = iris_store_register_mem64; + screen->vtbl.store_data_imm32 = iris_store_data_imm32; + screen->vtbl.store_data_imm64 = iris_store_data_imm64; + screen->vtbl.copy_mem_mem = iris_copy_mem_mem; + screen->vtbl.derived_program_state_size = iris_derived_program_state_size; + screen->vtbl.store_derived_program_state = iris_store_derived_program_state; + screen->vtbl.create_so_decl_list = iris_create_so_decl_list; + screen->vtbl.populate_vs_key = iris_populate_vs_key; + screen->vtbl.populate_tcs_key = iris_populate_tcs_key; + screen->vtbl.populate_tes_key = iris_populate_tes_key; + screen->vtbl.populate_gs_key = iris_populate_gs_key; + screen->vtbl.populate_fs_key = iris_populate_fs_key; + screen->vtbl.populate_cs_key = iris_populate_cs_key; + screen->vtbl.lost_genx_state = iris_lost_genx_state; +} + void genX(init_state)(struct iris_context *ice) { @@ -7731,37 +7766,6 @@ genX(init_state)(struct iris_context *ice) ctx->set_stream_output_targets = iris_set_stream_output_targets; ctx->set_frontend_noop = iris_set_frontend_noop; - screen->vtbl.destroy_state = iris_destroy_state; - screen->vtbl.init_render_context = iris_init_render_context; - screen->vtbl.init_compute_context = iris_init_compute_context; - screen->vtbl.upload_render_state = iris_upload_render_state; - screen->vtbl.update_surface_base_address = iris_update_surface_base_address; - screen->vtbl.upload_compute_state = iris_upload_compute_state; - screen->vtbl.emit_raw_pipe_control = iris_emit_raw_pipe_control; - screen->vtbl.emit_mi_report_perf_count = iris_emit_mi_report_perf_count; - screen->vtbl.rebind_buffer = iris_rebind_buffer; - screen->vtbl.load_register_reg32 = iris_load_register_reg32; - screen->vtbl.load_register_reg64 = iris_load_register_reg64; - screen->vtbl.load_register_imm32 = iris_load_register_imm32; - screen->vtbl.load_register_imm64 = iris_load_register_imm64; - screen->vtbl.load_register_mem32 = iris_load_register_mem32; - screen->vtbl.load_register_mem64 = iris_load_register_mem64; - screen->vtbl.store_register_mem32 = iris_store_register_mem32; - screen->vtbl.store_register_mem64 = iris_store_register_mem64; - screen->vtbl.store_data_imm32 = iris_store_data_imm32; - screen->vtbl.store_data_imm64 = iris_store_data_imm64; - screen->vtbl.copy_mem_mem = iris_copy_mem_mem; - screen->vtbl.derived_program_state_size = iris_derived_program_state_size; - screen->vtbl.store_derived_program_state = iris_store_derived_program_state; - screen->vtbl.create_so_decl_list = iris_create_so_decl_list; - screen->vtbl.populate_vs_key = iris_populate_vs_key; - screen->vtbl.populate_tcs_key = iris_populate_tcs_key; - screen->vtbl.populate_tes_key = iris_populate_tes_key; - screen->vtbl.populate_gs_key = iris_populate_gs_key; - screen->vtbl.populate_fs_key = iris_populate_fs_key; - screen->vtbl.populate_cs_key = iris_populate_cs_key; - screen->vtbl.lost_genx_state = iris_lost_genx_state; - ice->state.dirty = ~0ull; ice->state.stage_dirty = ~0ull;