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@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11384>
This commit is contained in:
Marek Olšák
2021-06-13 21:12:22 -04:00
committed by Marge Bot
parent 24895f020a
commit 1e4d91355f
4 changed files with 70 additions and 22 deletions
+22 -8
View File
@@ -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@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,
+22 -1
View File
@@ -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,
+6 -1
View File
@@ -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);
+20 -12
View File
@@ -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).