From: Marek Olšák Date: Sun, 13 Nov 2016 18:54:13 +0000 (+0100) Subject: radeonsi: make si_shader_io_get_unique_index stricter X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c7f3e5c647cce64899ed464755ce69a7d2226eca;p=mesa.git radeonsi: make si_shader_io_get_unique_index stricter Tested-by: Edmondo Tommasina Reviewed-by: Nicolai Hähnle --- 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;