Module: Mesa Branch: master Commit: b42bc90b6add0d0f81d915d49712761d32329afa URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b42bc90b6add0d0f81d915d49712761d32329afa
Author: Nicolai Hähnle <nicolai.haeh...@amd.com> Date: Wed Jun 1 13:24:19 2016 +0200 radeonsi: enable WQM in PS prolog when needed WQM is needed when the PS prolog computes a VGPR that is consumed by a shader with (implicit or explicit) derivatives. Depends on http://reviews.llvm.org/D20839 / LLVM r272063 for this to be effective (otherwise it's just a no-op). Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95130 Cc: 12.0 <mesa-...@lists.freedesktop.org> Reviewed-by: Marek Olšák <marek.ol...@amd.com> --- src/gallium/drivers/radeonsi/si_shader.c | 9 +++++++++ src/gallium/drivers/radeonsi/si_shader.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 5e5bf68..6e8eefb 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -7197,6 +7197,12 @@ static bool si_compile_ps_prolog(struct si_screen *sscreen, linear_sample[i], base + 10 + i, ""); } + /* Tell LLVM to insert WQM instruction sequence when needed. */ + if (key->ps_prolog.wqm) { + LLVMAddTargetDependentFunctionAttr(func, + "amdgpu-ps-wqm-outputs", ""); + } + /* Compile. */ LLVMBuildRet(gallivm->builder, ret); radeon_llvm_finalize_module(&ctx.radeon_bld); @@ -7347,6 +7353,9 @@ static bool si_shader_select_ps_parts(struct si_screen *sscreen, prolog_key.ps_prolog.colors_read = info->colors_read; prolog_key.ps_prolog.num_input_sgprs = shader->info.num_input_sgprs; prolog_key.ps_prolog.num_input_vgprs = shader->info.num_input_vgprs; + prolog_key.ps_prolog.wqm = info->uses_derivatives && + (prolog_key.ps_prolog.colors_read || + prolog_key.ps_prolog.states.force_persample_interp); if (info->colors_read) { unsigned *color = shader->selector->color_attr_index; diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index 9425b1e..e16bc9c 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -355,6 +355,7 @@ union si_shader_part_key { unsigned colors_read:8; /* color input components read */ unsigned num_interp_inputs:5; /* BCOLOR is at this location */ unsigned face_vgpr_index:5; + unsigned wqm:1; char color_attr_index[2]; char color_interp_vgpr_index[2]; /* -1 == constant */ } ps_prolog; _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit