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:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user