Re: [Mesa-dev] [PATCH RFC 5/8] gm107/ir: add emission for SUSTx and SULDx

2016-07-19 Thread Samuel Pitoiset



On 07/19/2016 07:14 PM, Józef Kucia wrote:

On Mon, Jul 18, 2016 at 10:55 PM, Samuel Pitoiset
 wrote:

+   } else if (insn->tex.target == TEX_TARGET_2D_ARRAY ||
+  insn->tex.target == TEX_TARGET_CUBE ||
+  insn->tex.target == TEX_TARGET_CUBE_ARRAY) {
+  target = 8;
+   } else if (insn->tex.target == TEX_TARGET_3D ||
+  insn->tex.target == TEX_TARGET_CUBE_ARRAY) {
+  target = 10;


TEX_TARGET_CUBE_ARRAY is listed twice. Apart from that a switch
statement might be more readable.


Good catch, thanks!




___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH RFC 5/8] gm107/ir: add emission for SUSTx and SULDx

2016-07-19 Thread Józef Kucia
On Mon, Jul 18, 2016 at 10:55 PM, Samuel Pitoiset
 wrote:
> +   } else if (insn->tex.target == TEX_TARGET_2D_ARRAY ||
> +  insn->tex.target == TEX_TARGET_CUBE ||
> +  insn->tex.target == TEX_TARGET_CUBE_ARRAY) {
> +  target = 8;
> +   } else if (insn->tex.target == TEX_TARGET_3D ||
> +  insn->tex.target == TEX_TARGET_CUBE_ARRAY) {
> +  target = 10;

TEX_TARGET_CUBE_ARRAY is listed twice. Apart from that a switch
statement might be more readable.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH RFC 5/8] gm107/ir: add emission for SUSTx and SULDx

2016-07-18 Thread Samuel Pitoiset
Signed-off-by: Samuel Pitoiset 
---
 .../drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 105 +
 1 file changed, 105 insertions(+)

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 f1ba27a..871ffd2 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
@@ -200,6 +200,11 @@ private:
void emitMEMBAR();
 
void emitVOTE();
+
+   void emitSUTarget();
+   void emitSUHandle(const int s);
+   void emitSUSTx();
+   void emitSULDx();
 };
 
 
/***
@@ -2816,6 +2821,98 @@ CodeEmitterGM107::emitVOTE()
emitPRED (0x27, insn->src(0));
 }
 
+void
+CodeEmitterGM107::emitSUTarget()
+{
+   const TexInstruction *insn = this->insn->asTex();
+   int target = 0;
+
+   assert(insn->op >= OP_SULDB && insn->op <= OP_SUREDP);
+
+   if (insn->tex.target == TEX_TARGET_BUFFER) {
+  target = 2;
+   } else if (insn->tex.target == TEX_TARGET_1D_ARRAY) {
+  target = 4;
+   } else if (insn->tex.target == TEX_TARGET_2D ||
+  insn->tex.target == TEX_TARGET_RECT) {
+  target = 6;
+   } else if (insn->tex.target == TEX_TARGET_2D_ARRAY ||
+  insn->tex.target == TEX_TARGET_CUBE ||
+  insn->tex.target == TEX_TARGET_CUBE_ARRAY) {
+  target = 8;
+   } else if (insn->tex.target == TEX_TARGET_3D ||
+  insn->tex.target == TEX_TARGET_CUBE_ARRAY) {
+  target = 10;
+   } else {
+  assert(insn->tex.target == TEX_TARGET_1D);
+   }
+   emitField(0x20, 4, target);
+}
+
+void
+CodeEmitterGM107::emitSUHandle(const int s)
+{
+   const TexInstruction *insn = this->insn->asTex();
+
+   assert(insn->op >= OP_SULDB && insn->op <= OP_SUREDP);
+
+   if (insn->src(s).getFile() == FILE_GPR) {
+  emitGPR(0x27, insn->src(s));
+   } else {
+  ImmediateValue *imm = insn->getSrc(s)->asImm();
+  assert(imm);
+  emitField(0x33, 1, 1);
+  emitField(0x24, 13, imm->reg.data.u32);
+   }
+}
+
+void
+CodeEmitterGM107::emitSUSTx()
+{
+   const TexInstruction *insn = this->insn->asTex();
+
+   emitInsn(0xeb20);
+   if (insn->op == OP_SUSTB)
+  emitField(0x34, 1, 1);
+   emitSUTarget();
+
+   emitLDSTc(0x18);
+   emitField(0x14, 4, 0xf); // rgba
+   emitGPR  (0x08, insn->src(0));
+   emitGPR  (0x00, insn->src(1));
+
+   emitSUHandle(2);
+}
+
+void
+CodeEmitterGM107::emitSULDx()
+{
+   const TexInstruction *insn = this->insn->asTex();
+   int type = 0;
+
+   emitInsn(0xeb00);
+   if (insn->op == OP_SULDB)
+  emitField(0x34, 1, 1);
+   emitSUTarget();
+
+   switch (insn->dType) {
+   case TYPE_S8:   type = 1; break;
+   case TYPE_U16:  type = 2; break;
+   case TYPE_S16:  type = 3; break;
+   case TYPE_U32:  type = 4; break;
+   case TYPE_U64:  type = 5; break;
+   case TYPE_B128: type = 6; break;
+   default:
+  assert(insn->dType == TYPE_U8);
+  break;
+   }
+   emitLDSTc(0x18);
+   emitField(0x14, 3, type);
+   emitGPR  (0x00, insn->def(0));
+   emitGPR  (0x08, insn->src(0));
+
+   emitSUHandle(1);
+}
 
/***
  * assembler front-end
  
**/
@@ -3130,6 +3227,14 @@ CodeEmitterGM107::emitInstruction(Instruction *i)
case OP_VOTE:
   emitVOTE();
   break;
+   case OP_SUSTB:
+   case OP_SUSTP:
+  emitSUSTx();
+  break;
+   case OP_SULDB:
+   case OP_SULDP:
+  emitSULDx();
+  break;
default:
   assert(!"invalid opcode");
   emitNOP();
-- 
2.9.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev