Re: [Beignet] [PATCH V2] add sends support for oword/media block write

2016-12-27 Thread Pan, Xiuli
LGTM!
Thanks

-Original Message-
From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Guo, 
Yejun
Sent: Wednesday, December 28, 2016 3:18 PM
To: beignet@lists.freedesktop.org
Cc: Guo, Yejun 
Subject: [Beignet] [PATCH V2] add sends support for oword/media block write

v2: should also change the virtual function prototype for gen7
Signed-off-by: Guo, Yejun 
---
 backend/src/backend/gen7_encoder.cpp   |  2 +-
 backend/src/backend/gen7_encoder.hpp   |  2 +-
 backend/src/backend/gen9_encoder.cpp   | 57 ++
 backend/src/backend/gen9_encoder.hpp   |  2 ++
 backend/src/backend/gen_context.cpp|  6 ++--
 backend/src/backend/gen_encoder.cpp|  4 +--
 backend/src/backend/gen_encoder.hpp|  4 +--
 backend/src/backend/gen_insn_selection.cpp | 54 +---
 8 files changed, 111 insertions(+), 20 deletions(-)

diff --git a/backend/src/backend/gen7_encoder.cpp 
b/backend/src/backend/gen7_encoder.cpp
index 4f35491..4b2cd9a 100644
--- a/backend/src/backend/gen7_encoder.cpp
+++ b/backend/src/backend/gen7_encoder.cpp
@@ -280,7 +280,7 @@ namespace gbe
 response_length);
   }
 
-  void Gen7Encoder::MBWRITE(GenRegister header, uint32_t bti, uint32_t size) {
+  void Gen7Encoder::MBWRITE(GenRegister header, GenRegister data, 
+ uint32_t bti, uint32_t size, bool useSends) {
 GenNativeInstruction *insn = this->next(GEN_OPCODE_SEND);
 const uint32_t msg_length = 1 + size;
 const uint32_t response_length = 0; // Size of registers diff --git 
a/backend/src/backend/gen7_encoder.hpp b/backend/src/backend/gen7_encoder.hpp
index edb711d..7585b34 100644
--- a/backend/src/backend/gen7_encoder.hpp
+++ b/backend/src/backend/gen7_encoder.hpp
@@ -45,7 +45,7 @@ namespace gbe
 /*! MBlock read */
 virtual void MBREAD(GenRegister dst, GenRegister header, uint32_t bti, 
uint32_t elemSize);
 /*! MBlock write */
-virtual void MBWRITE(GenRegister header, uint32_t bti, uint32_t elemSize);
+virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t 
+ bti, uint32_t elemSize, bool useSends);
   };
 }
 #endif /* __GBE_GEN7_ENCODER_HPP__ */
diff --git a/backend/src/backend/gen9_encoder.cpp 
b/backend/src/backend/gen9_encoder.cpp
index 940809b..b37fd98 100644
--- a/backend/src/backend/gen9_encoder.cpp
+++ b/backend/src/backend/gen9_encoder.cpp
@@ -244,4 +244,61 @@ namespace gbe
 gen9_insn->bits2.sends.sel_reg32_desc = 1;
 }
   }
+
+  void Gen9Encoder::OBWRITE(GenRegister header, GenRegister data, 
+ uint32_t bti, uint32_t ow_size, bool useSends)  {
+if (!useSends)
+  Gen8Encoder::OBWRITE(header, data, bti, ow_size, false);
+else {
+  GBE_ASSERT(data.reg() != header.reg());
+  GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS);
+  Gen9NativeInstruction *gen9_insn = >gen9_insn;
+
+  this->setHeader(insn);
+  insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA;
+
+  setSendsOperands(gen9_insn, GenRegister::null(), header, data);
+
+  uint32_t dataRegs = ow_size / 2;
+  // half reg should also have size 1
+  if (dataRegs == 0)
+dataRegs = 1;
+  gen9_insn->bits2.sends.src1_length = dataRegs;
+
+  const uint32_t block_size = getOBlockSize(ow_size);
+  const uint32_t msg_length = 1;
+  const uint32_t response_length = 0;
+  setOBlockRW(insn,
+bti,
+block_size,
+GEN7_OBLOCK_WRITE,
+msg_length,
+response_length);
+}
+  }
+
+  void Gen9Encoder::MBWRITE(GenRegister header, GenRegister data, 
+ uint32_t bti, uint32_t data_size, bool useSends)  {
+if (!useSends)
+  Gen8Encoder::MBWRITE(header, data, bti, data_size, false);
+else {
+  GBE_ASSERT(data.reg() != header.reg());
+  GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS);
+  Gen9NativeInstruction *gen9_insn = >gen9_insn;
+
+  this->setHeader(insn);
+  insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA;
+
+  setSendsOperands(gen9_insn, GenRegister::null(), header, data);
+  gen9_insn->bits2.sends.src1_length = data_size;
+
+  const uint32_t msg_length = 1;
+  const uint32_t response_length = 0;
+  setMBlockRW(insn,
+bti,
+GEN75_P1_MEDIA_TYPED_BWRITE,
+msg_length,
+response_length);
+}
+  }
 } /* End of the name space. */
diff --git a/backend/src/backend/gen9_encoder.hpp 
b/backend/src/backend/gen9_encoder.hpp
index d754d59..2eaa538 100644
--- a/backend/src/backend/gen9_encoder.hpp
+++ b/backend/src/backend/gen9_encoder.hpp
@@ -54,6 +54,8 @@ namespace gbe
 virtual void BYTE_SCATTER(GenRegister addr, GenRegister data, GenRegister 
bti, uint32_t elemSize, bool useSends);
 virtual unsigned setByteScatterSendsMessageDesc(GenNativeInstruction 
*insn, unsigned bti, unsigned elemSize);
 virtual 

[Beignet] [PATCH V2] add sends support for oword/media block write

2016-12-27 Thread Guo, Yejun
v2: should also change the virtual function prototype for gen7
Signed-off-by: Guo, Yejun 
---
 backend/src/backend/gen7_encoder.cpp   |  2 +-
 backend/src/backend/gen7_encoder.hpp   |  2 +-
 backend/src/backend/gen9_encoder.cpp   | 57 ++
 backend/src/backend/gen9_encoder.hpp   |  2 ++
 backend/src/backend/gen_context.cpp|  6 ++--
 backend/src/backend/gen_encoder.cpp|  4 +--
 backend/src/backend/gen_encoder.hpp|  4 +--
 backend/src/backend/gen_insn_selection.cpp | 54 +---
 8 files changed, 111 insertions(+), 20 deletions(-)

diff --git a/backend/src/backend/gen7_encoder.cpp 
b/backend/src/backend/gen7_encoder.cpp
index 4f35491..4b2cd9a 100644
--- a/backend/src/backend/gen7_encoder.cpp
+++ b/backend/src/backend/gen7_encoder.cpp
@@ -280,7 +280,7 @@ namespace gbe
 response_length);
   }
 
-  void Gen7Encoder::MBWRITE(GenRegister header, uint32_t bti, uint32_t size) {
+  void Gen7Encoder::MBWRITE(GenRegister header, GenRegister data, uint32_t 
bti, uint32_t size, bool useSends) {
 GenNativeInstruction *insn = this->next(GEN_OPCODE_SEND);
 const uint32_t msg_length = 1 + size;
 const uint32_t response_length = 0; // Size of registers
diff --git a/backend/src/backend/gen7_encoder.hpp 
b/backend/src/backend/gen7_encoder.hpp
index edb711d..7585b34 100644
--- a/backend/src/backend/gen7_encoder.hpp
+++ b/backend/src/backend/gen7_encoder.hpp
@@ -45,7 +45,7 @@ namespace gbe
 /*! MBlock read */
 virtual void MBREAD(GenRegister dst, GenRegister header, uint32_t bti, 
uint32_t elemSize);
 /*! MBlock write */
-virtual void MBWRITE(GenRegister header, uint32_t bti, uint32_t elemSize);
+virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t bti, 
uint32_t elemSize, bool useSends);
   };
 }
 #endif /* __GBE_GEN7_ENCODER_HPP__ */
diff --git a/backend/src/backend/gen9_encoder.cpp 
b/backend/src/backend/gen9_encoder.cpp
index 940809b..b37fd98 100644
--- a/backend/src/backend/gen9_encoder.cpp
+++ b/backend/src/backend/gen9_encoder.cpp
@@ -244,4 +244,61 @@ namespace gbe
 gen9_insn->bits2.sends.sel_reg32_desc = 1;
 }
   }
+
+  void Gen9Encoder::OBWRITE(GenRegister header, GenRegister data, uint32_t 
bti, uint32_t ow_size, bool useSends)
+  {
+if (!useSends)
+  Gen8Encoder::OBWRITE(header, data, bti, ow_size, false);
+else {
+  GBE_ASSERT(data.reg() != header.reg());
+  GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS);
+  Gen9NativeInstruction *gen9_insn = >gen9_insn;
+
+  this->setHeader(insn);
+  insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA;
+
+  setSendsOperands(gen9_insn, GenRegister::null(), header, data);
+
+  uint32_t dataRegs = ow_size / 2;
+  // half reg should also have size 1
+  if (dataRegs == 0)
+dataRegs = 1;
+  gen9_insn->bits2.sends.src1_length = dataRegs;
+
+  const uint32_t block_size = getOBlockSize(ow_size);
+  const uint32_t msg_length = 1;
+  const uint32_t response_length = 0;
+  setOBlockRW(insn,
+bti,
+block_size,
+GEN7_OBLOCK_WRITE,
+msg_length,
+response_length);
+}
+  }
+
+  void Gen9Encoder::MBWRITE(GenRegister header, GenRegister data, uint32_t 
bti, uint32_t data_size, bool useSends)
+  {
+if (!useSends)
+  Gen8Encoder::MBWRITE(header, data, bti, data_size, false);
+else {
+  GBE_ASSERT(data.reg() != header.reg());
+  GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS);
+  Gen9NativeInstruction *gen9_insn = >gen9_insn;
+
+  this->setHeader(insn);
+  insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA;
+
+  setSendsOperands(gen9_insn, GenRegister::null(), header, data);
+  gen9_insn->bits2.sends.src1_length = data_size;
+
+  const uint32_t msg_length = 1;
+  const uint32_t response_length = 0;
+  setMBlockRW(insn,
+bti,
+GEN75_P1_MEDIA_TYPED_BWRITE,
+msg_length,
+response_length);
+}
+  }
 } /* End of the name space. */
diff --git a/backend/src/backend/gen9_encoder.hpp 
b/backend/src/backend/gen9_encoder.hpp
index d754d59..2eaa538 100644
--- a/backend/src/backend/gen9_encoder.hpp
+++ b/backend/src/backend/gen9_encoder.hpp
@@ -54,6 +54,8 @@ namespace gbe
 virtual void BYTE_SCATTER(GenRegister addr, GenRegister data, GenRegister 
bti, uint32_t elemSize, bool useSends);
 virtual unsigned setByteScatterSendsMessageDesc(GenNativeInstruction 
*insn, unsigned bti, unsigned elemSize);
 virtual void ATOMIC(GenRegister dst, uint32_t function, GenRegister addr, 
GenRegister data, GenRegister bti, uint32_t srcNum, bool useSends);
+virtual void OBWRITE(GenRegister header, GenRegister data, uint32_t bti, 
uint32_t ow_size, bool useSends);
+virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t 

Re: [Beignet] [PATCH V2] output more detail of GEN IR for workgroup op

2016-12-27 Thread Pan, Xiuli
LGTM!  

-Original Message-
From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Guo, 
Yejun
Sent: Wednesday, December 21, 2016 6:33 PM
To: beignet@lists.freedesktop.org
Cc: Guo, Yejun 
Subject: [Beignet] [PATCH V2] output more detail of GEN IR for workgroup op

v2: the src number changes for different ops
Signed-off-by: Guo, Yejun 
---
 backend/src/ir/instruction.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/backend/src/ir/instruction.cpp b/backend/src/ir/instruction.cpp 
index 0687dbf..f0c3957 100644
--- a/backend/src/ir/instruction.cpp
+++ b/backend/src/ir/instruction.cpp
@@ -1917,7 +1917,8 @@ namespace ir {
   }
 
   out << " %" << this->getDst(fn, 0);
-  out << " %" << this->getSrc(fn, 0);
+  for (uint32_t i = 0; i < this->getSrcNum(); ++i)
+out << " %" << this->getSrc(fn, i);
 
   if (this->workGroupOp == WORKGROUP_OP_BROADCAST) {
 do {
@@ -1942,7 +1943,7 @@ namespace ir {
 } while(0);
   }
 
-  out << "TheadID Map at SLM: " << this->slmAddr;
+  out << " (TheadID Map at SLM: " << this->slmAddr << ")";
 }
 
 INLINE void SubGroupInstruction::out(std::ostream , const Function 
) const {
--
1.9.1

___
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet
___
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet


Re: [Beignet] [PATCH] add sends support for oword/media block write

2016-12-27 Thread Guo, Yejun
nice catch, will send v2, thanks.

-Original Message-
From: Pan, Xiuli 
Sent: Wednesday, December 28, 2016 2:04 PM
To: Guo, Yejun; beignet@lists.freedesktop.org
Cc: Guo, Yejun
Subject: RE: [Beignet] [PATCH] add sends support for oword/media block write

It seems you missed the gen7_encoder part for the media block write, gen7 has a 
different data port and the virtual function for MBWRITE should also be changed 
for Gen7Encoder.

Others LGTM.


-Original Message-
From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Guo, 
Yejun
Sent: Monday, December 19, 2016 6:13 PM
To: beignet@lists.freedesktop.org
Cc: Guo, Yejun 
Subject: [Beignet] [PATCH] add sends support for oword/media block write

Signed-off-by: Guo, Yejun 
---
 backend/src/backend/gen9_encoder.cpp   | 57 ++
 backend/src/backend/gen9_encoder.hpp   |  2 ++
 backend/src/backend/gen_context.cpp|  6 ++--
 backend/src/backend/gen_encoder.cpp|  4 +--
 backend/src/backend/gen_encoder.hpp|  4 +--
 backend/src/backend/gen_insn_selection.cpp | 54 +---
 6 files changed, 109 insertions(+), 18 deletions(-)

diff --git a/backend/src/backend/gen9_encoder.cpp 
b/backend/src/backend/gen9_encoder.cpp
index 940809b..b37fd98 100644
--- a/backend/src/backend/gen9_encoder.cpp
+++ b/backend/src/backend/gen9_encoder.cpp
@@ -244,4 +244,61 @@ namespace gbe
 gen9_insn->bits2.sends.sel_reg32_desc = 1;
 }
   }
+
+  void Gen9Encoder::OBWRITE(GenRegister header, GenRegister data, 
+ uint32_t bti, uint32_t ow_size, bool useSends)  {
+if (!useSends)
+  Gen8Encoder::OBWRITE(header, data, bti, ow_size, false);
+else {
+  GBE_ASSERT(data.reg() != header.reg());
+  GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS);
+  Gen9NativeInstruction *gen9_insn = >gen9_insn;
+
+  this->setHeader(insn);
+  insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA;
+
+  setSendsOperands(gen9_insn, GenRegister::null(), header, data);
+
+  uint32_t dataRegs = ow_size / 2;
+  // half reg should also have size 1
+  if (dataRegs == 0)
+dataRegs = 1;
+  gen9_insn->bits2.sends.src1_length = dataRegs;
+
+  const uint32_t block_size = getOBlockSize(ow_size);
+  const uint32_t msg_length = 1;
+  const uint32_t response_length = 0;
+  setOBlockRW(insn,
+bti,
+block_size,
+GEN7_OBLOCK_WRITE,
+msg_length,
+response_length);
+}
+  }
+
+  void Gen9Encoder::MBWRITE(GenRegister header, GenRegister data, 
+ uint32_t bti, uint32_t data_size, bool useSends)  {
+if (!useSends)
+  Gen8Encoder::MBWRITE(header, data, bti, data_size, false);
+else {
+  GBE_ASSERT(data.reg() != header.reg());
+  GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS);
+  Gen9NativeInstruction *gen9_insn = >gen9_insn;
+
+  this->setHeader(insn);
+  insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA;
+
+  setSendsOperands(gen9_insn, GenRegister::null(), header, data);
+  gen9_insn->bits2.sends.src1_length = data_size;
+
+  const uint32_t msg_length = 1;
+  const uint32_t response_length = 0;
+  setMBlockRW(insn,
+bti,
+GEN75_P1_MEDIA_TYPED_BWRITE,
+msg_length,
+response_length);
+}
+  }
 } /* End of the name space. */
diff --git a/backend/src/backend/gen9_encoder.hpp 
b/backend/src/backend/gen9_encoder.hpp
index d754d59..2eaa538 100644
--- a/backend/src/backend/gen9_encoder.hpp
+++ b/backend/src/backend/gen9_encoder.hpp
@@ -54,6 +54,8 @@ namespace gbe
 virtual void BYTE_SCATTER(GenRegister addr, GenRegister data, GenRegister 
bti, uint32_t elemSize, bool useSends);
 virtual unsigned setByteScatterSendsMessageDesc(GenNativeInstruction 
*insn, unsigned bti, unsigned elemSize);
 virtual void ATOMIC(GenRegister dst, uint32_t function, GenRegister addr, 
GenRegister data, GenRegister bti, uint32_t srcNum, bool useSends);
+virtual void OBWRITE(GenRegister header, GenRegister data, uint32_t bti, 
uint32_t ow_size, bool useSends);
+virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t 
+ bti, uint32_t data_size, bool useSends);
   };
 }
 #endif /* __GBE_GEN9_ENCODER_HPP__ */
diff --git a/backend/src/backend/gen_context.cpp 
b/backend/src/backend/gen_context.cpp
index 10e2c9e..5f60ff3 100644
--- a/backend/src/backend/gen_context.cpp
+++ b/backend/src/backend/gen_context.cpp
@@ -3569,13 +3569,14 @@ namespace gbe
 
   void GenContext::emitOBWriteInstruction(const SelectionInstruction ) {
 const GenRegister header = ra->genReg(insn.src(0));
+const GenRegister data = ra->genReg(insn.src(1));
 const uint32_t bti = insn.getbti();
 const uint32_t ow_size = insn.extra.elem;
 bool isA64 = bti == 255;
 if (isA64)
p->OBWRITEA64(header, 

Re: [Beignet] [PATCH] add sends support for oword/media block write

2016-12-27 Thread Pan, Xiuli
It seems you missed the gen7_encoder part for the media block write, gen7 has a 
different data port and the virtual function for MBWRITE should also be changed 
for Gen7Encoder.

Others LGTM.


-Original Message-
From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Guo, 
Yejun
Sent: Monday, December 19, 2016 6:13 PM
To: beignet@lists.freedesktop.org
Cc: Guo, Yejun 
Subject: [Beignet] [PATCH] add sends support for oword/media block write

Signed-off-by: Guo, Yejun 
---
 backend/src/backend/gen9_encoder.cpp   | 57 ++
 backend/src/backend/gen9_encoder.hpp   |  2 ++
 backend/src/backend/gen_context.cpp|  6 ++--
 backend/src/backend/gen_encoder.cpp|  4 +--
 backend/src/backend/gen_encoder.hpp|  4 +--
 backend/src/backend/gen_insn_selection.cpp | 54 +---
 6 files changed, 109 insertions(+), 18 deletions(-)

diff --git a/backend/src/backend/gen9_encoder.cpp 
b/backend/src/backend/gen9_encoder.cpp
index 940809b..b37fd98 100644
--- a/backend/src/backend/gen9_encoder.cpp
+++ b/backend/src/backend/gen9_encoder.cpp
@@ -244,4 +244,61 @@ namespace gbe
 gen9_insn->bits2.sends.sel_reg32_desc = 1;
 }
   }
+
+  void Gen9Encoder::OBWRITE(GenRegister header, GenRegister data, 
+ uint32_t bti, uint32_t ow_size, bool useSends)  {
+if (!useSends)
+  Gen8Encoder::OBWRITE(header, data, bti, ow_size, false);
+else {
+  GBE_ASSERT(data.reg() != header.reg());
+  GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS);
+  Gen9NativeInstruction *gen9_insn = >gen9_insn;
+
+  this->setHeader(insn);
+  insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA;
+
+  setSendsOperands(gen9_insn, GenRegister::null(), header, data);
+
+  uint32_t dataRegs = ow_size / 2;
+  // half reg should also have size 1
+  if (dataRegs == 0)
+dataRegs = 1;
+  gen9_insn->bits2.sends.src1_length = dataRegs;
+
+  const uint32_t block_size = getOBlockSize(ow_size);
+  const uint32_t msg_length = 1;
+  const uint32_t response_length = 0;
+  setOBlockRW(insn,
+bti,
+block_size,
+GEN7_OBLOCK_WRITE,
+msg_length,
+response_length);
+}
+  }
+
+  void Gen9Encoder::MBWRITE(GenRegister header, GenRegister data, 
+ uint32_t bti, uint32_t data_size, bool useSends)  {
+if (!useSends)
+  Gen8Encoder::MBWRITE(header, data, bti, data_size, false);
+else {
+  GBE_ASSERT(data.reg() != header.reg());
+  GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS);
+  Gen9NativeInstruction *gen9_insn = >gen9_insn;
+
+  this->setHeader(insn);
+  insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA;
+
+  setSendsOperands(gen9_insn, GenRegister::null(), header, data);
+  gen9_insn->bits2.sends.src1_length = data_size;
+
+  const uint32_t msg_length = 1;
+  const uint32_t response_length = 0;
+  setMBlockRW(insn,
+bti,
+GEN75_P1_MEDIA_TYPED_BWRITE,
+msg_length,
+response_length);
+}
+  }
 } /* End of the name space. */
diff --git a/backend/src/backend/gen9_encoder.hpp 
b/backend/src/backend/gen9_encoder.hpp
index d754d59..2eaa538 100644
--- a/backend/src/backend/gen9_encoder.hpp
+++ b/backend/src/backend/gen9_encoder.hpp
@@ -54,6 +54,8 @@ namespace gbe
 virtual void BYTE_SCATTER(GenRegister addr, GenRegister data, GenRegister 
bti, uint32_t elemSize, bool useSends);
 virtual unsigned setByteScatterSendsMessageDesc(GenNativeInstruction 
*insn, unsigned bti, unsigned elemSize);
 virtual void ATOMIC(GenRegister dst, uint32_t function, GenRegister addr, 
GenRegister data, GenRegister bti, uint32_t srcNum, bool useSends);
+virtual void OBWRITE(GenRegister header, GenRegister data, uint32_t bti, 
uint32_t ow_size, bool useSends);
+virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t 
+ bti, uint32_t data_size, bool useSends);
   };
 }
 #endif /* __GBE_GEN9_ENCODER_HPP__ */
diff --git a/backend/src/backend/gen_context.cpp 
b/backend/src/backend/gen_context.cpp
index 10e2c9e..5f60ff3 100644
--- a/backend/src/backend/gen_context.cpp
+++ b/backend/src/backend/gen_context.cpp
@@ -3569,13 +3569,14 @@ namespace gbe
 
   void GenContext::emitOBWriteInstruction(const SelectionInstruction ) {
 const GenRegister header = ra->genReg(insn.src(0));
+const GenRegister data = ra->genReg(insn.src(1));
 const uint32_t bti = insn.getbti();
 const uint32_t ow_size = insn.extra.elem;
 bool isA64 = bti == 255;
 if (isA64)
p->OBWRITEA64(header, bti, ow_size);
 else
-   p->OBWRITE(header, bti, ow_size);
+   p->OBWRITE(header, data, bti, ow_size, insn.extra.splitSend);
   }
 
   void GenContext::emitMBReadInstruction(const SelectionInstruction ) { 
@@ -3587,8 +3588,9 @@ namespace gbe
 
   

[Beignet] [PATCH] Improve event execute function.

2016-12-27 Thread junyan . he
From: Junyan He 

Modify the event exec function, make it as the uniformal entry
for all event command execution. This will help the timestamp
record and profiling feature a lot.

V2:
1. Set event init state to bigger than CL_QUEUED.
Event state should be set to CL_QUEUED exactly when it is to be queued.
Profiling feature make this requirement clearer. We need to record the
timestamp exactly when it it to be queued. So we need to add a additional
state beyond CL_QUEUED.

2. Fix cl_event_update_timestamp_gen bugi, the CL_SUMITTED time may be less.
GPU may record the timestamp of CL_RUNNING before CPU record timestamp of
CL_SUMITTED. It is a async process and it is hard for us to control.
According to SPEC, we need to record timestamp after some state is done.
We can just now set CL_SUMITTED to CL_RUNNING timestamp if the CL_SUBMITTED
timestamp is the bigger one.

Signed-off-by: Junyan He 
---
 src/cl_api_kernel.c|  26 ++
 src/cl_api_mem.c   | 190 -
 src/cl_command_queue_enqueue.c |  14 ++-
 src/cl_event.c |  94 +++-
 src/cl_event.h |   6 +-
 5 files changed, 144 insertions(+), 186 deletions(-)

diff --git a/src/cl_api_kernel.c b/src/cl_api_kernel.c
index 723152f..c7d7331 100644
--- a/src/cl_api_kernel.c
+++ b/src/cl_api_kernel.c
@@ -226,13 +226,11 @@ clEnqueueNDRangeKernel(cl_command_queue command_queue,
 if (event_status < CL_COMPLETE) { // Error happend, cancel.
   err = CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST;
   break;
-} else if (event_status == CL_COMPLETE) {
-  err = cl_enqueue_handle(>exec_data, CL_SUBMITTED);
-  if (err != CL_SUCCESS) {
-break;
-  }
+}
 
-  e->status = CL_SUBMITTED;
+err = cl_event_exec(e, (event_status == CL_COMPLETE ? CL_SUBMITTED : 
CL_QUEUED), CL_FALSE);
+if (err != CL_SUCCESS) {
+  break;
 }
 
 cl_command_queue_enqueue_event(command_queue, e);
@@ -349,19 +347,13 @@ clEnqueueNativeKernel(cl_command_queue command_queue,
 new_mem_list = NULL;
 new_args_mem_loc = NULL; // Event delete will free them.
 
-if (e_status == CL_COMPLETE) {
-  // Sync mode, no need to queue event.
-  err = cl_enqueue_handle(data, CL_COMPLETE);
-  if (err != CL_SUCCESS) {
-assert(err < 0);
-e->status = err;
-break;
-  }
+err = cl_event_exec(e, (e_status == CL_COMPLETE ? CL_COMPLETE : 
CL_QUEUED), CL_FALSE);
+if (err != CL_SUCCESS) {
+  break;
+}
 
-  e->status = CL_COMPLETE; // Just set the status, no notify. No one 
depend on us now.
-} else {
+if (e_status != CL_COMPLETE)
   cl_command_queue_enqueue_event(command_queue, e);
-}
   } while (0);
 
   if (err != CL_SUCCESS) {
diff --git a/src/cl_api_mem.c b/src/cl_api_mem.c
index de18684..09f9a14 100644
--- a/src/cl_api_mem.c
+++ b/src/cl_api_mem.c
@@ -107,7 +107,7 @@ clGetMemObjectInfo(cl_mem memobj,
 } else if (memobj->type == CL_MEM_IMAGE_TYPE) {
   parent = memobj;
 } else if (memobj->type == CL_MEM_BUFFER1D_IMAGE_TYPE) {
-  struct _cl_mem_buffer1d_image* image_buffer = (struct 
_cl_mem_buffer1d_image*)memobj;
+  struct _cl_mem_buffer1d_image *image_buffer = (struct 
_cl_mem_buffer1d_image *)memobj;
   parent = image_buffer->descbuffer;
 } else
   parent = NULL;
@@ -309,31 +309,21 @@ clEnqueueMapBuffer(cl_command_queue command_queue,
 
 if (e_status == CL_COMPLETE) {
   // Sync mode, no need to queue event.
-  err = cl_enqueue_handle(data, CL_COMPLETE);
+  err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
   if (err != CL_SUCCESS) {
-assert(err < 0);
-e->status = err;
 break;
   }
-
-  ptr = data->ptr;
-  e->status = CL_COMPLETE; // Just set the status, no notify. No one 
depend on us now.
-  cl_event_update_timestamp(e, CL_QUEUED, CL_COMPLETE);
 } else {
-  err = cl_enqueue_handle(data, CL_SUBMITTED); // Submit to get the 
address.
+  err = cl_event_exec(e, CL_SUBMITTED, CL_TRUE); // Submit to get the 
address.
   if (err != CL_SUCCESS) {
-assert(err < 0);
-e->status = err;
 break;
   }
 
-  e->status = CL_SUBMITTED;
-  ptr = data->ptr;
-  assert(ptr);
-
   cl_command_queue_enqueue_event(command_queue, e);
 }
 
+ptr = data->ptr;
+assert(ptr);
 err = cl_mem_record_map_mem(buffer, ptr, _ptr, offset, size, NULL, 
NULL);
 assert(err == CL_SUCCESS);
   } while (0);
@@ -403,16 +393,15 @@ clEnqueueUnmapMemObject(cl_command_queue command_queue,
 data->ptr = mapped_ptr;
 
 if (e_status == CL_COMPLETE) { // No need to wait
-  err = cl_enqueue_handle(data, CL_COMPLETE);
+  err = cl_event_exec(e, CL_COMPLETE, CL_FALSE);
   if (err != CL_SUCCESS) {
-assert(err < 0);
-e->status = err;
 break;
   }
-
-  e->status = CL_COMPLETE;
-  

Re: [Beignet] Proposed patch: add CMake option for toggling OCL ICD Loader compatibility

2016-12-27 Thread Yang, Rong R
You can use `git send-email --to beignet@lists.freedesktop.org [patch file]`  
to send the patch directly.

> -Original Message-
> From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of
> Pan, Xiuli
> Sent: Tuesday, December 27, 2016 16:30
> To: Marek Szuba ;
> beignet@lists.freedesktop.org
> Subject: Re: [Beignet] Proposed patch: add CMake option for toggling OCL
> ICD Loader compatibility
> 
> It seems the mail list could not see this mail's attachment, could you try 
> with
> git send-email to send the patch directly?
> 
> Thanks
> Xiuli
> 
> -Original Message-
> From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of
> Marek Szuba
> Sent: Thursday, December 1, 2016 8:24 PM
> To: beignet@lists.freedesktop.org
> Subject: [Beignet] Proposed patch: add CMake option for toggling OCL ICD
> Loader compatibility
> 
> Hello,
> 
> As suggested in https://bugs.freedesktop.org/show_bug.cgi?id=98885 , here
> is a Git-friendly patch which makes CMake looking for OCL ICD header files
> depend on a new configuration option, so that the loader compatibility mode
> can be explicitly disabled.
> 
> All the best,
> --
> MS
> ___
> Beignet mailing list
> Beignet@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/beignet
___
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet


Re: [Beignet] Proposed patch: add CMake option for toggling OCL ICD Loader compatibility

2016-12-27 Thread Pan, Xiuli
It seems the mail list could not see this mail's attachment, could you try with 
 git send-email to send the patch directly?

Thanks
Xiuli

-Original Message-
From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Marek 
Szuba
Sent: Thursday, December 1, 2016 8:24 PM
To: beignet@lists.freedesktop.org
Subject: [Beignet] Proposed patch: add CMake option for toggling OCL ICD Loader 
compatibility

Hello,

As suggested in https://bugs.freedesktop.org/show_bug.cgi?id=98885 , here is a 
Git-friendly patch which makes CMake looking for OCL ICD header files depend on 
a new configuration option, so that the loader compatibility mode can be 
explicitly disabled.

All the best,
--
MS
___
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet


[Beignet] Fwd: Proposed patch: add CMake option for toggling OCL ICD Loader compatibility

2016-12-27 Thread Marek Szuba
Trying again, according to Comment #4 in the bug the patch has not been
delivered.


 Forwarded Message 
Subject: Proposed patch: add CMake option for toggling OCL ICD Loader
compatibility
Date: Thu, 1 Dec 2016 13:24:09 +0100
From: Marek Szuba 
To: beignet@lists.freedesktop.org

Hello,

As suggested in https://bugs.freedesktop.org/show_bug.cgi?id=98885 ,
here is a Git-friendly patch which makes CMake looking for OCL ICD
header files depend on a new configuration option, so that the loader
compatibility mode can be explicitly disabled.

All the best,
-- 
MS

From 011609930c09995b13d89bb3f9249f1197fe28c7 Mon Sep 17 00:00:00 2001
From: Marek Szuba 
Date: Thu, 1 Dec 2016 13:15:11 +0100
Subject: [PATCH] Add a CMake option for toggling OCL ICD Loader compatibility

The new option allows anyone wishing to do so to explicitly disable
OCL ICD Loader support in Beignet, regardless of the presence or absence
of OCL ICD header files. This is particularly useful for people building
Beignet packages for distributions, as it avoids creating an implicit
dependency on the state of the build host. The new option defaults to ON
so the default behaviour of CMake configuration remains unchanged.

See also: https://bugs.freedesktop.org/show_bug.cgi?id=98885
---
 CMakeLists.txt | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 713cfa9..09b5734 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -221,6 +221,8 @@ IF(ENABLE_GL_SHARING)
   ENDIF(EGL_FOUND)
 ENDIF(ENABLE_GL_SHARING)
 
+OPTION(OCLICD_COMPAT "OCL ICD compatibility mode" ON)
+IF(OCLICD_COMPAT)
 Find_Package(OCLIcd)
 IF(OCLIcd_FOUND)
   MESSAGE(STATUS "Looking for OCL ICD header file - found")
@@ -232,6 +234,7 @@ IF(OCLIcd_FOUND)
 ELSE(OCLIcd_FOUND)
   MESSAGE(STATUS "Looking for OCL ICD header file - not found")
 ENDIF(OCLIcd_FOUND)
+ENDIF(OCLICD_COMPAT)
 
 Find_Package(PythonInterp)
 
-- 
2.7.3


___
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet


[Beignet] Proposed patch: add CMake option for toggling OCL ICD Loader compatibility

2016-12-27 Thread Marek Szuba
Hello,

As suggested in https://bugs.freedesktop.org/show_bug.cgi?id=98885 ,
here is a Git-friendly patch which makes CMake looking for OCL ICD
header files depend on a new configuration option, so that the loader
compatibility mode can be explicitly disabled.

All the best,
-- 
MS
From 011609930c09995b13d89bb3f9249f1197fe28c7 Mon Sep 17 00:00:00 2001
From: Marek Szuba 
Date: Thu, 1 Dec 2016 13:15:11 +0100
Subject: [PATCH] Add a CMake option for toggling OCL ICD Loader compatibility

The new option allows anyone wishing to do so to explicitly disable
OCL ICD Loader support in Beignet, regardless of the presence or absence
of OCL ICD header files. This is particularly useful for people building
Beignet packages for distributions, as it avoids creating an implicit
dependency on the state of the build host. The new option defaults to ON
so the default behaviour of CMake configuration remains unchanged.

See also: https://bugs.freedesktop.org/show_bug.cgi?id=98885
---
 CMakeLists.txt | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 713cfa9..09b5734 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -221,6 +221,8 @@ IF(ENABLE_GL_SHARING)
   ENDIF(EGL_FOUND)
 ENDIF(ENABLE_GL_SHARING)
 
+OPTION(OCLICD_COMPAT "OCL ICD compatibility mode" ON)
+IF(OCLICD_COMPAT)
 Find_Package(OCLIcd)
 IF(OCLIcd_FOUND)
   MESSAGE(STATUS "Looking for OCL ICD header file - found")
@@ -232,6 +234,7 @@ IF(OCLIcd_FOUND)
 ELSE(OCLIcd_FOUND)
   MESSAGE(STATUS "Looking for OCL ICD header file - not found")
 ENDIF(OCLIcd_FOUND)
+ENDIF(OCLICD_COMPAT)
 
 Find_Package(PythonInterp)
 
-- 
2.7.3



signature.asc
Description: OpenPGP digital signature
___
Beignet mailing list
Beignet@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/beignet