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

---
 src/gallium/drivers/radeonsi/si_shader.h        |  3 ++-
 src/gallium/drivers/radeonsi/si_state_shaders.c | 11 ++++++-----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.h 
b/src/gallium/drivers/radeonsi/si_shader.h
index b72cb1a..6d41aff 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -204,7 +204,8 @@ struct si_shader_selector {
        unsigned        gs_output_prim;
        unsigned        gs_max_out_vertices;
        unsigned        gs_num_invocations;
-       unsigned        gsvs_itemsize;
+       unsigned        gsvs_vertex_size;
+       unsigned        max_gsvs_emit_size;
 
        /* masks of "get_unique_index" bits */
        uint64_t        outputs_written;
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 996004a..9282297 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -228,9 +228,9 @@ static unsigned si_gs_get_max_stream(struct si_shader 
*shader)
 
 static void si_shader_gs(struct si_shader *shader)
 {
-       unsigned gs_vert_itemsize = shader->selector->info.num_outputs * 16;
+       unsigned gs_vert_itemsize = shader->selector->gsvs_vertex_size;
        unsigned gs_max_vert_out = shader->selector->gs_max_out_vertices;
-       unsigned gsvs_itemsize = (gs_vert_itemsize * gs_max_vert_out) >> 2;
+       unsigned gsvs_itemsize = shader->selector->max_gsvs_emit_size >> 2;
        unsigned gs_num_invocations = shader->selector->gs_num_invocations;
        unsigned cut_mode;
        struct si_pm4_state *pm4;
@@ -710,8 +710,9 @@ static void *si_create_shader_selector(struct pipe_context 
*ctx,
                        
sel->info.properties[TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES];
                sel->gs_num_invocations =
                        sel->info.properties[TGSI_PROPERTY_GS_INVOCATIONS];
-               sel->gsvs_itemsize = sel->info.num_outputs * 16 *
-                                    sel->gs_max_out_vertices;
+               sel->gsvs_vertex_size = sel->info.num_outputs * 16;
+               sel->max_gsvs_emit_size = sel->gsvs_vertex_size *
+                                         sel->gs_max_out_vertices;
                break;
 
        case PIPE_SHADER_VERTEX:
@@ -1129,7 +1130,7 @@ static void si_init_gs_rings(struct si_context *sctx)
 
 static void si_update_gs_rings(struct si_context *sctx)
 {
-       unsigned gsvs_itemsize = sctx->gs_shader.cso->gsvs_itemsize;
+       unsigned gsvs_itemsize = sctx->gs_shader.cso->max_gsvs_emit_size;
        uint64_t offset;
 
        if (gsvs_itemsize == sctx->last_gsvs_itemsize)
-- 
2.1.4

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

Reply via email to