radeonsi: only export from GS copy shader for vertex stream 0

When running the copy shader for vertex streams != 0, the SX does not need
any data from us (there is no rasterization for the higher vertex streams,
only streamout).

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle 2016-11-29 15:55:00 +01:00
parent 21f2bb22a3
commit dfb69cac33

View file

@ -6421,26 +6421,33 @@ si_generate_gs_copy_shader(struct si_screen *sscreen,
}
}
if (gs_selector->so.num_outputs) {
for (int stream = 0; stream < 4; stream++) {
struct lp_build_if_state if_ctx_stream;
for (int stream = 0; stream < 4; stream++) {
struct lp_build_if_state if_ctx_stream;
if (!gsinfo->num_stream_output_components[stream])
continue;
if (!gsinfo->num_stream_output_components[stream])
continue;
LLVMValueRef is_stream =
LLVMBuildICmp(builder, LLVMIntEQ,
stream_id,
lp_build_const_int32(gallivm, stream), "");
if (stream > 0 && !gs_selector->so.num_outputs)
continue;
lp_build_if(&if_ctx_stream, gallivm, is_stream);
LLVMValueRef is_stream =
LLVMBuildICmp(builder, LLVMIntEQ,
stream_id,
lp_build_const_int32(gallivm, stream), "");
lp_build_if(&if_ctx_stream, gallivm, is_stream);
if (gs_selector->so.num_outputs) {
si_llvm_emit_streamout(&ctx, outputs,
gsinfo->num_outputs,
stream);
lp_build_endif(&if_ctx_stream);
}
if (stream == 0)
si_llvm_export_vs(bld_base, outputs, gsinfo->num_outputs);
lp_build_endif(&if_ctx_stream);
}
si_llvm_export_vs(bld_base, outputs, gsinfo->num_outputs);
LLVMBuildRetVoid(gallivm->builder);