radeonsi/nir: accurately set reads_*_outputs for TCS

This commit is contained in:
Marek Olšák
2019-07-23 18:03:39 -04:00
parent 6697e42c3c
commit 37527f8a11
+10 -14
View File
@@ -95,6 +95,16 @@ static void gather_intrinsic_load_deref_output_info(const nir_shader *nir,
assert(var && var->data.mode == nir_var_shader_out);
switch (nir->info.stage) {
case MESA_SHADER_TESS_CTRL:
if (var->data.location == VARYING_SLOT_TESS_LEVEL_INNER ||
var->data.location == VARYING_SLOT_TESS_LEVEL_OUTER)
info->reads_tessfactor_outputs = true;
else if (var->data.patch)
info->reads_perpatch_outputs = true;
else
info->reads_pervertex_outputs = true;
break;
case MESA_SHADER_FRAGMENT:
if (var->data.fb_fetch_output)
info->uses_fbfetch = true;
@@ -663,20 +673,6 @@ void si_nir_scan_shader(const struct nir_shader *nir,
info->writes_position = true;
break;
}
if (nir->info.stage == MESA_SHADER_TESS_CTRL) {
switch (semantic_name) {
case TGSI_SEMANTIC_PATCH:
info->reads_perpatch_outputs = true;
break;
case TGSI_SEMANTIC_TESSINNER:
case TGSI_SEMANTIC_TESSOUTER:
info->reads_tessfactor_outputs = true;
break;
default:
info->reads_pervertex_outputs = true;
}
}
}
unsigned loc = variable->data.location;