[Mesa-dev] [PATCH v3 10/12] nvc0/ir: do not lower shared+atomics on GM107+
Ilia Mirkin
imirkin at alum.mit.edu
Fri Apr 1 17:26:22 UTC 2016
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
On Fri, Apr 1, 2016 at 12:56 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> For Maxwell, the ATOMS instruction can be used to perform atomic
> operations on shared memory instead of this load/store lowering pass.
>
> Changes from v2:
> - remove one branch
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> .../drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> index 26fc27f..1a542d3 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
> @@ -1294,11 +1294,12 @@ NVC0LoweringPass::handleATOM(Instruction *atom)
> sv = SV_LBASE;
> break;
> case FILE_MEMORY_SHARED:
> - if (targ->getChipset() >= NVISA_GK104_CHIPSET) {
> - handleSharedATOMNVE4(atom);
> - } else {
> + // For Fermi/Kepler, we have to use ld lock/st unlock to perform atomic
> + // operations on shared memory. For Maxwell, ATOMS is enough.
> + if (targ->getChipset() < NVISA_GK104_CHIPSET)
> handleSharedATOM(atom);
> - }
> + else if (targ->getChipset() < NVISA_GM107_CHIPSET)
> + handleSharedATOMNVE4(atom);
> return true;
> default:
> assert(atom->src(0).getFile() == FILE_MEMORY_GLOBAL);
> @@ -1326,9 +1327,11 @@ NVC0LoweringPass::handleATOM(Instruction *atom)
> bool
> NVC0LoweringPass::handleCasExch(Instruction *cas, bool needCctl)
> {
> - if (cas->src(0).getFile() == FILE_MEMORY_SHARED) {
> - // ATOM_CAS and ATOM_EXCH are handled in handleSharedATOM().
> - return false;
> + if (targ->getChipset() < NVISA_GM107_CHIPSET) {
> + if (cas->src(0).getFile() == FILE_MEMORY_SHARED) {
> + // ATOM_CAS and ATOM_EXCH are handled in handleSharedATOM().
> + return false;
> + }
> }
>
> if (cas->subOp != NV50_IR_SUBOP_ATOM_CAS &&
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list