From 82a0e4f65888e7b4332af8a121ded22712304784 Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Sat, 18 Feb 2017 03:04:21 +0100 Subject: radeonsi/gfx9: merged shaders have scratch offset at the beginning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit also, screen wasn't initialized for compute shaders Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeonsi/si_compute.c | 1 + src/gallium/drivers/radeonsi/si_shader.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'src/gallium/drivers/radeonsi') diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c index 33ebe2e7d97..2b2efaeadcb 100644 --- a/src/gallium/drivers/radeonsi/si_compute.c +++ b/src/gallium/drivers/radeonsi/si_compute.c @@ -113,6 +113,7 @@ static void si_create_compute_state_async(void *job, int thread_index) memset(&sel, 0, sizeof(sel)); + sel.screen = program->screen; tgsi_scan_shader(program->tokens, &sel.info); sel.tokens = program->tokens; sel.type = PIPE_SHADER_COMPUTE; diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 593383e3da1..574244b484c 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -100,6 +100,17 @@ enum { LOCAL_ADDR_SPACE = 3, }; +static bool is_merged_shader(struct si_shader *shader) +{ + if (shader->selector->screen->b.chip_class <= VI) + return false; + + return shader->key.as_ls || + shader->key.as_es || + shader->selector->type == PIPE_SHADER_TESS_CTRL || + shader->selector->type == PIPE_SHADER_GEOMETRY; +} + /** * Returns a unique index for a semantic name and index. The index must be * less than 64, so that a 64-bit bitmask of used inputs or outputs can be @@ -7689,7 +7700,7 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, } /* Add the scratch offset to input SGPRs. */ - if (shader->config.scratch_bytes_per_wave) + if (shader->config.scratch_bytes_per_wave && !is_merged_shader(shader)) shader->info.num_input_sgprs += 1; /* scratch byte offset */ /* Calculate the number of fragment input VGPRs. */ -- cgit v1.2.3