diff options
author | Marek Olšák <[email protected]> | 2017-02-18 03:04:21 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-04-28 21:47:35 +0200 |
commit | 82a0e4f65888e7b4332af8a121ded22712304784 (patch) | |
tree | 814686427a723c7504b955c9153f0722d0012d0e | |
parent | 0c253557b29c3d8c8f72a4d03be5d2703a91034d (diff) |
radeonsi/gfx9: merged shaders have scratch offset at the beginning
also, screen wasn't initialized for compute shaders
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r-- | src/gallium/drivers/radeonsi/si_compute.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 13 |
2 files changed, 13 insertions, 1 deletions
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. */ |