radeonsi: make si_shader_io_get_unique_index stricter

Tested-by: Edmondo Tommasina <edmondo.tommasina@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák
2016-11-13 19:54:13 +01:00
parent ed3190b3f3
commit c7f3e5c647
2 changed files with 14 additions and 11 deletions
+4 -10
View File
@@ -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;
}
}
@@ -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;