Pre-load all the LDS values who's range is accessed more than once.

Signed-off-by: Gert Wollny <gw.foss...@gmail.com>
---
 src/gallium/drivers/r600/r600_shader.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 163ae75eb5..7c999fbb0b 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -2047,6 +2047,34 @@ static void count_tess_inputs(struct r600_shader_ctx 
*ctx)
        }
 }
 
+static void preload_tes_lds(struct r600_shader_ctx *ctx)
+{
+       int i;
+       ctx->max_driver_temp_used = 0;
+       r600_get_temp(ctx);
+
+       for (i = 0; i < ctx->tess_input_cache.fill; ++i) {
+               struct r600_tess_input_cache_entry *ce = 
&ctx->tess_input_cache.data[i];
+               fetch_tes_input(ctx, &ce->key, ce->reg, ce->mask);
+               ce->initialized = 1;
+       }
+}
+
+static void preload_tcs_lds(struct r600_shader_ctx *ctx)
+{
+       int i;
+       ctx->max_driver_temp_used = 0;
+       r600_get_temp(ctx);
+       for (i = 0; i < ctx->tess_input_cache.fill; ++i) {
+               struct r600_tess_input_cache_entry *ce = 
&ctx->tess_input_cache.data[i];
+               if (ce->key.Register.File == TGSI_FILE_INPUT)
+                       fetch_tcs_input(ctx, &ce->key, ce->reg, ce->mask);
+               else
+                       fetch_tcs_output(ctx, &ce->key, ce->reg, ce->mask);
+               ce->initialized = 1;
+       }
+}
+
 static int tgsi_split_lds_inputs(struct r600_shader_ctx *ctx)
 {
        struct tgsi_full_instruction *inst = 
&ctx->parse.FullToken.FullInstruction;
@@ -3624,6 +3652,11 @@ static int r600_shader_from_tgsi(struct r600_context 
*rctx,
                        return r;
        }
 
+       if (ctx.type == PIPE_SHADER_TESS_EVAL)
+               preload_tes_lds(&ctx);
+       else if (ctx.type == PIPE_SHADER_TESS_CTRL)
+               preload_tcs_lds(&ctx);
+
        tgsi_parse_init(&ctx.parse, tokens);
        while (!tgsi_parse_end_of_tokens(&ctx.parse)) {
                tgsi_parse_token(&ctx.parse);
-- 
2.13.6

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

Reply via email to