Mesa (main): radeonsi: compile si_state_draw.cpp for each gfx generation separately
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 16 21:44:44 UTC 2021
Module: Mesa
Branch: main
Commit: 1e4d91355fa9716de2432fe1f3ff93ce1de0cfd2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e4d91355fa9716de2432fe1f3ff93ce1de0cfd2
Author: Marek Olšák <marek.olsak at amd.com>
Date: Sun Jun 13 21:12:22 2021 -0400
radeonsi: compile si_state_draw.cpp for each gfx generation separately
It makes compilating faster.
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11384>
---
src/gallium/drivers/radeonsi/meson.build | 30 +++++++++++++++++-------
src/gallium/drivers/radeonsi/si_pipe.c | 23 +++++++++++++++++-
src/gallium/drivers/radeonsi/si_state.h | 7 +++++-
src/gallium/drivers/radeonsi/si_state_draw.cpp | 32 ++++++++++++++++----------
4 files changed, 70 insertions(+), 22 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/meson.build b/src/gallium/drivers/radeonsi/meson.build
index e8e30faa0dd..49b97f41ec5 100644
--- a/src/gallium/drivers/radeonsi/meson.build
+++ b/src/gallium/drivers/radeonsi/meson.build
@@ -63,7 +63,6 @@ files_libradeonsi = files(
'si_state.c',
'si_state.h',
'si_state_binning.c',
- 'si_state_draw.cpp',
'si_state_msaa.c',
'si_state_shaders.c',
'si_state_streamout.c',
@@ -96,21 +95,36 @@ files_libradeonsi = files(
'../radeon/radeon_winsys.h',
)
+radeonsi_include_dirs = [inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_amd_common,
+ inc_amd_common_llvm, inc_gallium_drivers]
+radeonsi_c_args = ['-Wstrict-overflow=0']
+radeonsi_deps = [dep_llvm, dep_clock, dep_libdrm_radeon, idep_nir_headers, idep_amdgfxregs_h, idep_mesautil]
+
+radeonsi_gfx_libs = []
+foreach ver : ['6', '7', '8', '9', '10', '103']
+ radeonsi_gfx_libs += static_library(
+ 'radeonsi_gfx at 0@'.format(ver),
+ ['si_state_draw.cpp'],
+ include_directories : radeonsi_include_dirs,
+ c_args : radeonsi_c_args,
+ cpp_args : ['-DGFX_VER=@0@'.format(ver)],
+ gnu_symbol_visibility : 'hidden',
+ dependencies : radeonsi_deps,
+ )
+endforeach
+
libradeonsi = static_library(
'radeonsi',
[files_libradeonsi, sid_tables_h],
- include_directories : [
- inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_amd_common, inc_amd_common_llvm,
- inc_gallium_drivers,
- ],
- c_args : ['-Wstrict-overflow=0'],
+ include_directories : radeonsi_include_dirs,
+ c_args : radeonsi_c_args,
gnu_symbol_visibility : 'hidden',
- dependencies : [dep_llvm, dep_clock, dep_libdrm_radeon, idep_nir_headers, idep_amdgfxregs_h, idep_mesautil],
+ dependencies : radeonsi_deps,
)
driver_radeonsi = declare_dependency(
compile_args : '-DGALLIUM_RADEONSI',
- link_with : [
+ link_with : radeonsi_gfx_libs + [
libradeonsi, libradeonwinsys, libamdgpuwinsys, libamd_common, libamd_common_llvm, libgalliumvl
],
dependencies : idep_nir,
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index 3967ffea7ec..f34e7e741a4 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -592,7 +592,28 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen, unsign
sctx->discard_rasterizer_state = util_blitter_get_discard_rasterizer_state(sctx->blitter);
sctx->queued.named.rasterizer = sctx->discard_rasterizer_state;
- si_init_draw_functions(sctx);
+ switch (sctx->chip_class) {
+ case GFX6:
+ si_init_draw_functions_GFX6(sctx);
+ break;
+ case GFX7:
+ si_init_draw_functions_GFX7(sctx);
+ break;
+ case GFX8:
+ si_init_draw_functions_GFX8(sctx);
+ break;
+ case GFX9:
+ si_init_draw_functions_GFX9(sctx);
+ break;
+ case GFX10:
+ si_init_draw_functions_GFX10(sctx);
+ break;
+ case GFX10_3:
+ si_init_draw_functions_GFX10_3(sctx);
+ break;
+ default:
+ unreachable("unhandled chip class");
+ }
si_initialize_prim_discard_tunables(sscreen, flags & SI_CONTEXT_FLAG_AUX,
&sctx->prim_discard_vertex_count_threshold,
diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h
index 14bffbb02c8..f9d4e6713ea 100644
--- a/src/gallium/drivers/radeonsi/si_state.h
+++ b/src/gallium/drivers/radeonsi/si_state.h
@@ -589,7 +589,12 @@ unsigned si_get_input_prim(const struct si_shader_selector *gs);
bool si_update_ngg(struct si_context *sctx);
/* si_state_draw.c */
-void si_init_draw_functions(struct si_context *sctx);
+void si_init_draw_functions_GFX6(struct si_context *sctx);
+void si_init_draw_functions_GFX7(struct si_context *sctx);
+void si_init_draw_functions_GFX8(struct si_context *sctx);
+void si_init_draw_functions_GFX9(struct si_context *sctx);
+void si_init_draw_functions_GFX10(struct si_context *sctx);
+void si_init_draw_functions_GFX10_3(struct si_context *sctx);
/* si_state_msaa.c */
void si_init_msaa_functions(struct si_context *sctx);
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp
index 83489e726d0..f7a286db54c 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.cpp
+++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp
@@ -28,6 +28,22 @@
#include "util/u_prim.h"
#include "util/u_upload_mgr.h"
+#if (GFX_VER == 6)
+#define GFX(name) name##GFX6
+#elif (GFX_VER == 7)
+#define GFX(name) name##GFX7
+#elif (GFX_VER == 8)
+#define GFX(name) name##GFX8
+#elif (GFX_VER == 9)
+#define GFX(name) name##GFX9
+#elif (GFX_VER == 10)
+#define GFX(name) name##GFX10
+#elif (GFX_VER == 103)
+#define GFX(name) name##GFX10_3
+#else
+#error "Unknown gfx version"
+#endif
+
/* special primitive types */
#define SI_PRIM_RECTANGLE_LIST PIPE_PRIM_MAX
@@ -2327,16 +2343,6 @@ static void si_init_draw_vbo_all_pipeline_options(struct si_context *sctx)
si_init_draw_vbo_all_internal_options<GFX_VERSION, TESS_ON, GS_ON>(sctx);
}
-static void si_init_draw_vbo_all_families(struct si_context *sctx)
-{
- si_init_draw_vbo_all_pipeline_options<GFX6>(sctx);
- si_init_draw_vbo_all_pipeline_options<GFX7>(sctx);
- si_init_draw_vbo_all_pipeline_options<GFX8>(sctx);
- si_init_draw_vbo_all_pipeline_options<GFX9>(sctx);
- si_init_draw_vbo_all_pipeline_options<GFX10>(sctx);
- si_init_draw_vbo_all_pipeline_options<GFX10_3>(sctx);
-}
-
static void si_invalid_draw_vbo(struct pipe_context *pipe,
const struct pipe_draw_info *info,
unsigned drawid_offset,
@@ -2348,9 +2354,11 @@ static void si_invalid_draw_vbo(struct pipe_context *pipe,
}
extern "C"
-void si_init_draw_functions(struct si_context *sctx)
+void GFX(si_init_draw_functions_)(struct si_context *sctx)
{
- si_init_draw_vbo_all_families(sctx);
+ assert(sctx->chip_class == GFX());
+
+ si_init_draw_vbo_all_pipeline_options<GFX()>(sctx);
/* Bind a fake draw_vbo, so that draw_vbo isn't NULL, which would skip
* initialization of callbacks in upper layers (such as u_threaded_context).
More information about the mesa-commit
mailing list