aco: handle ps outputs from radeonsi

radeonsi will keep outputs <FRAG_RESULT_DATA0.

Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24973>
This commit is contained in:
Qiang Yu
2023-08-11 09:57:42 +08:00
committed by Marge Bot
parent 49250f9fc5
commit 90c901a987

View File

@@ -5219,7 +5219,20 @@ store_output_to_temps(isel_context* ctx, nir_intrinsic_instr* instr)
* TCS epilog to index tess factor temps using semantic location directly.
*/
nir_io_semantics sem = nir_intrinsic_io_semantics(instr);
unsigned base = sem.location + sem.dual_source_blend_index;
unsigned base = sem.location;
if (ctx->stage == fragment_fs) {
/* color result is a legacy slot which won't appear with data result
* at the same time. Here we just use the data slot for it to simplify
* code handling for both of them.
*/
if (base == FRAG_RESULT_COLOR)
base = FRAG_RESULT_DATA0;
/* Sencond output of dual source blend just use data1 slot for simplicity,
* because dual source blend does not support multi render target.
*/
base += sem.dual_source_blend_index;
}
unsigned idx = base * 4u + component;
for (unsigned i = 0; i < 8; ++i) {
@@ -5230,7 +5243,7 @@ store_output_to_temps(isel_context* ctx, nir_intrinsic_instr* instr)
idx++;
}
if (ctx->stage == fragment_fs && ctx->program->info.has_epilog) {
if (ctx->stage == fragment_fs && ctx->program->info.has_epilog && base >= FRAG_RESULT_DATA0) {
unsigned index = base - FRAG_RESULT_DATA0;
if (nir_intrinsic_src_type(instr) == nir_type_float16) {