From 79b34d083219473340d605b857274d1f8ba4fc37 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 15 Dec 2017 15:37:19 +0100 Subject: amd/common: add ac_vgt_gs_mode() helper Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- src/amd/common/ac_shader_util.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/amd/common/ac_shader_util.c') diff --git a/src/amd/common/ac_shader_util.c b/src/amd/common/ac_shader_util.c index ab8d3ed49bc..12f86dc677c 100644 --- a/src/amd/common/ac_shader_util.c +++ b/src/amd/common/ac_shader_util.c @@ -78,3 +78,30 @@ ac_get_cb_shader_mask(unsigned spi_shader_col_format) } return cb_shader_mask; } + +/** + * Calculate the appropriate setting of VGT_GS_MODE when \p shader is a + * geometry shader. + */ +uint32_t +ac_vgt_gs_mode(unsigned gs_max_vert_out, enum chip_class chip_class) +{ + unsigned cut_mode; + + if (gs_max_vert_out <= 128) { + cut_mode = V_028A40_GS_CUT_128; + } else if (gs_max_vert_out <= 256) { + cut_mode = V_028A40_GS_CUT_256; + } else if (gs_max_vert_out <= 512) { + cut_mode = V_028A40_GS_CUT_512; + } else { + assert(gs_max_vert_out <= 1024); + cut_mode = V_028A40_GS_CUT_1024; + } + + return S_028A40_MODE(V_028A40_GS_SCENARIO_G) | + S_028A40_CUT_MODE(cut_mode)| + S_028A40_ES_WRITE_OPTIMIZE(chip_class <= VI) | + S_028A40_GS_WRITE_OPTIMIZE(1) | + S_028A40_ONCHIP(chip_class >= GFX9 ? 1 : 0); +} -- cgit v1.2.3