diff options
author | Marek Olšák <[email protected]> | 2016-11-13 19:54:13 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2016-11-21 21:44:35 +0100 |
commit | c7f3e5c647cce64899ed464755ce69a7d2226eca (patch) | |
tree | 1839ccd75ae52dfce21b0ab55139faab597fc5f5 /src/gallium/drivers/radeonsi | |
parent | ed3190b3f3a776fc8c75b1e6130a88079166d115 (diff) |
radeonsi: make si_shader_io_get_unique_index stricter
Tested-by: Edmondo Tommasina <[email protected]>
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 14 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_state_shaders.c | 11 |
2 files changed, 14 insertions, 11 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index a80d9c375b0..8b564593084 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -123,11 +123,9 @@ unsigned si_shader_io_get_unique_index(unsigned semantic_name, unsigned index) case TGSI_SEMANTIC_GENERIC: if (index <= 63-4) return 4 + index; - else - /* same explanation as in the default statement, - * the only user hitting this is st/nine. - */ - return 0; + + assert(!"invalid generic index"); + return 0; /* patch indices are completely separate and thus start from 0 */ case TGSI_SEMANTIC_TESSOUTER: @@ -138,11 +136,7 @@ unsigned si_shader_io_get_unique_index(unsigned semantic_name, unsigned index) return 2 + index; default: - /* Don't fail here. The result of this function is only used - * for LS, TCS, TES, and GS, where legacy GL semantics can't - * occur, but this function is called for all vertex shaders - * before it's known whether LS will be compiled or not. - */ + assert(!"invalid semantic name"); return 0; } } diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 1d116f6b00b..d10084dfe4e 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -1425,9 +1425,18 @@ static void *si_create_shader_selector(struct pipe_context *ctx, sel->patch_outputs_written |= 1llu << si_shader_io_get_unique_index(name, index); break; - default: + + case TGSI_SEMANTIC_GENERIC: + /* don't process indices the function can't handle */ + if (index >= 60) + break; + /* fall through */ + case TGSI_SEMANTIC_POSITION: + case TGSI_SEMANTIC_PSIZE: + case TGSI_SEMANTIC_CLIPDIST: sel->outputs_written |= 1llu << si_shader_io_get_unique_index(name, index); + break; } } sel->esgs_itemsize = util_last_bit64(sel->outputs_written) * 16; |