r600: port over the get_lds_unique_index from radeonsi
On r600 this needs to subtract 9 due to texcoord interactions. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -568,6 +568,44 @@ static int r600_spi_sid(struct r600_shader_io * io)
|
||||
return index;
|
||||
};
|
||||
|
||||
/* we need this to get a common lds index for vs/tcs/tes input/outputs */
|
||||
int r600_get_lds_unique_index(unsigned semantic_name, unsigned index)
|
||||
{
|
||||
switch (semantic_name) {
|
||||
case TGSI_SEMANTIC_POSITION:
|
||||
return 0;
|
||||
case TGSI_SEMANTIC_PSIZE:
|
||||
return 1;
|
||||
case TGSI_SEMANTIC_CLIPDIST:
|
||||
assert(index <= 1);
|
||||
return 2 + index;
|
||||
case TGSI_SEMANTIC_GENERIC:
|
||||
if (index <= 63-4)
|
||||
return 4 + index - 9;
|
||||
else
|
||||
/* same explanation as in the default statement,
|
||||
* the only user hitting this is st/nine.
|
||||
*/
|
||||
return 0;
|
||||
|
||||
/* patch indices are completely separate and thus start from 0 */
|
||||
case TGSI_SEMANTIC_TESSOUTER:
|
||||
return 0;
|
||||
case TGSI_SEMANTIC_TESSINNER:
|
||||
return 1;
|
||||
case TGSI_SEMANTIC_PATCH:
|
||||
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.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* turn input into interpolate on EG */
|
||||
static int evergreen_interp_input(struct r600_shader_ctx *ctx, int index)
|
||||
{
|
||||
|
||||
@@ -154,6 +154,7 @@ struct r600_pipe_shader {
|
||||
TGSI_INTERPOLATE_LOC_CENTER/SAMPLE/COUNT. Other input values return -1. */
|
||||
int eg_get_interpolator_index(unsigned interpolate, unsigned location);
|
||||
|
||||
int r600_get_lds_unique_index(unsigned semantic_name, unsigned index);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
||||
Reference in New Issue
Block a user