radv/gfx10: add support for NGG passthrough mode
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
471738e97b
commit
1db276ba23
|
@ -2974,15 +2974,19 @@ handle_ngg_outputs_post_2(struct radv_shader_context *ctx)
|
||||||
{
|
{
|
||||||
struct ac_ngg_prim prim = {};
|
struct ac_ngg_prim prim = {};
|
||||||
|
|
||||||
prim.num_vertices = num_vertices;
|
if (ctx->args->options->key.vs_common_out.as_ngg_passthrough) {
|
||||||
prim.isnull = ctx->ac.i1false;
|
prim.passthrough = ac_get_arg(&ctx->ac, ctx->args->gs_vtx_offset[0]);
|
||||||
memcpy(prim.index, vtxindex, sizeof(vtxindex[0]) * 3);
|
} else {
|
||||||
|
prim.num_vertices = num_vertices;
|
||||||
|
prim.isnull = ctx->ac.i1false;
|
||||||
|
memcpy(prim.index, vtxindex, sizeof(vtxindex[0]) * 3);
|
||||||
|
|
||||||
for (unsigned i = 0; i < num_vertices; ++i) {
|
for (unsigned i = 0; i < num_vertices; ++i) {
|
||||||
tmp = LLVMBuildLShr(builder,
|
tmp = LLVMBuildLShr(builder,
|
||||||
ac_get_arg(&ctx->ac, ctx->args->ac.gs_invocation_id),
|
ac_get_arg(&ctx->ac, ctx->args->ac.gs_invocation_id),
|
||||||
LLVMConstInt(ctx->ac.i32, 8 + i, false), "");
|
LLVMConstInt(ctx->ac.i32, 8 + i, false), "");
|
||||||
prim.edgeflag[i] = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
|
prim.edgeflag[i] = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ac_build_export_prim(&ctx->ac, &prim);
|
ac_build_export_prim(&ctx->ac, &prim);
|
||||||
|
|
|
@ -4475,6 +4475,8 @@ radv_compute_vgt_shader_stages_en(const struct radv_pipeline *pipeline)
|
||||||
stages |= S_028B54_PRIMGEN_EN(1);
|
stages |= S_028B54_PRIMGEN_EN(1);
|
||||||
if (pipeline->streamout_shader)
|
if (pipeline->streamout_shader)
|
||||||
stages |= S_028B54_NGG_WAVE_ID_EN(1);
|
stages |= S_028B54_NGG_WAVE_ID_EN(1);
|
||||||
|
if (radv_pipeline_has_ngg_passthrough(pipeline))
|
||||||
|
stages |= S_028B54_PRIMGEN_PASSTHRU_EN(1);
|
||||||
} else if (radv_pipeline_has_gs(pipeline)) {
|
} else if (radv_pipeline_has_gs(pipeline)) {
|
||||||
stages |= S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER);
|
stages |= S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue