From: Marek Olšák <marek.ol...@amd.com>

ported from Vulkan
---
 src/gallium/drivers/radeonsi/si_pipe.c          | 4 ++++
 src/gallium/drivers/radeonsi/si_pipe.h          | 1 +
 src/gallium/drivers/radeonsi/si_state_draw.c    | 2 +-
 src/gallium/drivers/radeonsi/si_state_shaders.c | 2 +-
 4 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_pipe.c 
b/src/gallium/drivers/radeonsi/si_pipe.c
index f38ecc1..633d4bb 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -712,6 +712,10 @@ struct pipe_screen *radeonsi_screen_create(struct 
radeon_winsys *ws)
        sscreen->tess_offchip_block_dw_size =
                sscreen->b.family == CHIP_HAWAII ? 4096 : 8192;
 
+       sscreen->has_distributed_tess =
+               sscreen->b.chip_class >= VI &&
+               sscreen->b.info.max_se >= 2;
+
        sscreen->b.has_cp_dma = true;
        sscreen->b.has_streamout = true;
        pipe_mutex_init(sscreen->shader_parts_mutex);
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h 
b/src/gallium/drivers/radeonsi/si_pipe.h
index ee64ecc..3aff0ac 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -83,6 +83,7 @@ struct si_screen {
        struct r600_common_screen       b;
        unsigned                        gs_table_depth;
        unsigned                        tess_offchip_block_dw_size;
+       bool                            has_distributed_tess;
 
        /* Whether shaders are monolithic (1-part) or separate (3-part). */
        bool                            use_monolithic_shaders;
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c 
b/src/gallium/drivers/radeonsi/si_state_draw.c
index 3558510..ce8def4 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -274,7 +274,7 @@ static unsigned si_get_ia_multi_vgt_param(struct si_context 
*sctx,
                        partial_vs_wave = true;
 
                /* Needed for 028B6C_DISTRIBUTION_MODE != 0 */
-               if (sctx->b.chip_class >= VI) {
+               if (sctx->screen->has_distributed_tess) {
                        if (sctx->gs_shader.cso)
                                partial_es_wave = true;
                        else
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 9aa4a7c..4bcdeb6 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -300,7 +300,7 @@ static void si_set_tesseval_regs(struct si_screen *sscreen,
        else
                topology = V_028B6C_OUTPUT_TRIANGLE_CW;
 
-       if (sscreen->b.chip_class >= VI) {
+       if (sscreen->has_distributed_tess) {
                if (sscreen->b.family == CHIP_FIJI ||
                    sscreen->b.family >= CHIP_POLARIS10)
                        distribution_mode = 
V_028B6C_DISTRIBUTION_MODE_TRAPEZOIDS;
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to