interesting, do you have some numbers on that? Wondering if we could switch more sysvals over to it and what about older gens?
On Tue, Jul 17, 2018 at 12:46 PM, Rhys Perry <pendingchao...@gmail.com> wrote: > This instruction seems to be faster than S2R and requires no barrier, > though the range of special registers it can read from is limited. > > Signed-off-by: Rhys Perry <pendingchao...@gmail.com> > --- > src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 14 > +++++++++++++- > .../drivers/nouveau/codegen/nv50_ir_target_gm107.cpp | 4 +++- > 2 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > index 694d1b10a3..c306a4680b 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > @@ -124,6 +124,7 @@ private: > > void emitMOV(); > void emitS2R(); > + void emitCS2R(); > void emitF2F(); > void emitF2I(); > void emitI2F(); > @@ -749,6 +750,14 @@ CodeEmitterGM107::emitS2R() > emitGPR (0x00, insn->def(0)); > } > > +void > +CodeEmitterGM107::emitCS2R() > +{ > + emitInsn(0x50c80000); > + emitSYS (0x14, insn->src(0)); > + emitGPR (0x00, insn->def(0)); > +} > + > void > CodeEmitterGM107::emitF2F() > { > @@ -3192,7 +3201,10 @@ CodeEmitterGM107::emitInstruction(Instruction *i) > emitMOV(); > break; > case OP_RDSV: > - emitS2R(); > + if (insn->getSrc(0)->reg.data.id == SV_CLOCK) > + emitCS2R(); > + else > + emitS2R(); > break; > case OP_ABS: > case OP_NEG: > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_gm107.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_gm107.cpp > index 04cbd402a1..009470fb93 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_gm107.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_gm107.cpp > @@ -153,9 +153,10 @@ TargetGM107::isBarrierRequired(const Instruction *insn) > const > case OP_AFETCH: > case OP_PFETCH: > case OP_PIXLD: > - case OP_RDSV: > case OP_SHFL: > return true; > + case OP_RDSV: > + return insn->getSrc(0)->reg.data.id != SV_CLOCK; > default: > break; > } > @@ -229,6 +230,7 @@ TargetGM107::getLatency(const Instruction *insn) const > case OP_SUB: > case OP_VOTE: > case OP_XOR: > + case OP_RDSV: > if (insn->dType != TYPE_F64) > return 6; > break; > -- > 2.14.4 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev