On 04/01/2016 07:44 AM, Ilia Mirkin wrote:
On Mar 31, 2016 12:09 PM, "Samuel Pitoiset" <samuel.pitoi...@gmail.com <mailto:samuel.pitoi...@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. > > Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com <mailto:samuel.pitoi...@gmail.com>> > --- > .../nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 20 +++++++++++++------- > 1 file changed, 13 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 7e6c87a..83e753e 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp > @@ -1294,10 +1294,14 @@ NVC0LoweringPass::handleATOM(Instruction *atom) > sv = SV_LBASE; > break; > case FILE_MEMORY_SHARED: > - if (targ->getChipset() >= NVISA_GK104_CHIPSET) { > - handleSharedATOMNVE4(atom); > - } else { > - handleSharedATOM(atom); > + if (targ->getChipset() < NVISA_GM107_CHIPSET) { > + // 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) { > + handleSharedATOMNVE4(atom); > + } else { > + handleSharedATOM(atom); > + } > } Or, with fewer branches... If (<nve4) do nvc0 thing Else if (<gm107) do nve4 thing Which will drop the outer if, making it more comprehensible.
Looks better, thanks!
> return true; > default: > @@ -1326,9 +1330,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@lists.freedesktop.org <mailto:mesa-dev@lists.freedesktop.org> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-- -Samuel _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev