[Beignet] [PATCH] add Broxton support

Yang, Rong R rong.r.yang at intel.com
Sun Dec 13 19:44:26 PST 2015


Pushed, thanks.

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> He Junyan
> Sent: Friday, December 11, 2015 15:38
> To: beignet at lists.freedesktop.org
> Subject: Re: [Beignet] [PATCH] add Broxton support
> 
> Ok, That's good for me.
> Thanks for enabling BTX.
> 
> On Fri, Dec 04, 2015 at 03:22:20AM +0800, Guo Yejun wrote:
> > Date: Fri,  4 Dec 2015 03:22:20 +0800
> > From: Guo Yejun <yejun.guo at intel.com>
> > To: beignet at lists.freedesktop.org
> > Cc: Guo Yejun <yejun.guo at intel.com>
> > Subject: [Beignet] [PATCH] add Broxton support
> > X-Mailer: git-send-email 1.9.1
> >
> > special versions of linux kernel and libdrm are needed.
> > utest and conformance test PASSED.
> >
> > Signed-off-by: Guo Yejun <yejun.guo at intel.com>
> > ---
> >  GetGenID.sh                                |   2 +-
> >  backend/src/backend/gen8_context.cpp       |   2 +-
> >  backend/src/backend/gen8_context.hpp       |   2 +
> >  backend/src/backend/gen9_context.cpp       | 110
> +++++++++++++++++++++++++++++
> >  backend/src/backend/gen9_context.hpp       |  22 ++++++
> >  backend/src/backend/gen_insn_selection.cpp |  11 +++
> >  backend/src/backend/gen_insn_selection.hpp |   7 ++
> >  backend/src/backend/gen_program.cpp        |  17 ++++-
> >  backend/src/gbe_bin_generater.cpp          |   4 ++
> >  src/cl_device_data.h                       |   9 ++-
> >  src/cl_device_id.c                         |  34 +++++++--
> >  src/intel/intel_gpgpu.c                    |   5 +-
> >  12 files changed, 213 insertions(+), 12 deletions(-)
> >
> > diff --git a/GetGenID.sh b/GetGenID.sh index 7acf9bd..30296da 100755
> > --- a/GetGenID.sh
> > +++ b/GetGenID.sh
> > @@ -1,5 +1,5 @@
> >  #!/bin/bash
> > -genpciid=(0152 0162 0156 0166 015a 016a 0f31 0402 0412 0422 040a 041a
> > 042a 0406 0416 0426 0c02 0c12 0c22 0c0a 0c1a 0c2a 0c06 0c16 0c26 0a02
> > 0a12 0a22 0a0a 0a1a 0a2a 0a06 0a16 0a26 0d02 0d12 0d22 0d0a 0d1a 0d2a
> > 0d06 0d16 0d26)
> > +genpciid=(0152 0162 0156 0166 015a 016a 0f31 0402 0412 0422 040a 041a
> > +042a 0406 0416 0426 0c02 0c12 0c22 0c0a 0c1a 0c2a 0c06 0c16 0c26 0a02
> > +0a12 0a22 0a0a 0a1a 0a2a 0a06 0a16 0a26 0d02 0d12 0d22 0d0a 0d1a 0d2a
> > +0d06 0d16 0d26 5a84)
> >  pciid=($(lspci -nn | grep "\[8086:.*\]" -o | awk -F : '{print $2}' |
> > awk -F ] '{print $1}'))  n=${#pciid[*]}
> >  i=0
> > diff --git a/backend/src/backend/gen8_context.cpp
> > b/backend/src/backend/gen8_context.cpp
> > index 71d900f..7455bfc 100644
> > --- a/backend/src/backend/gen8_context.cpp
> > +++ b/backend/src/backend/gen8_context.cpp
> > @@ -417,7 +417,7 @@ namespace gbe
> >      GBE_ASSERT(0);
> >    }
> >
> > -  static GenRegister unpacked_ud(GenRegister reg, uint32_t offset =
> > 0)
> > +  GenRegister Gen8Context::unpacked_ud(GenRegister reg, uint32_t
> > + offset)
> >    {
> >      if(reg.hstride == GEN_HORIZONTAL_STRIDE_0) {
> >        if(offset == 0)
> > diff --git a/backend/src/backend/gen8_context.hpp
> > b/backend/src/backend/gen8_context.hpp
> > index 537aef5..cc415c6 100644
> > --- a/backend/src/backend/gen8_context.hpp
> > +++ b/backend/src/backend/gen8_context.hpp
> > @@ -76,6 +76,8 @@ namespace gbe
> >
> >      virtual void emitF64DIVInstruction(const SelectionInstruction
> > &insn);
> >
> > +    static GenRegister unpacked_ud(GenRegister reg, uint32_t offset =
> > + 0);
> > +
> >    protected:
> >      virtual void setA0Content(uint16_t new_a0[16], uint16_t max_offset = 0,
> int sz = 0);
> >      virtual void subTimestamps(GenRegister& t0, GenRegister& t1,
> > GenRegister& tmp); diff --git a/backend/src/backend/gen9_context.cpp
> > b/backend/src/backend/gen9_context.cpp
> > index c35293a..47b1496 100644
> > --- a/backend/src/backend/gen9_context.cpp
> > +++ b/backend/src/backend/gen9_context.cpp
> > @@ -55,4 +55,114 @@ namespace gbe
> >        p->WAIT();
> >      p->pop();
> >    }
> > +
> > +  void BxtContext::newSelection(void) {
> > +    this->sel = GBE_NEW(SelectionBxt, *this);  }
> > +
> > +  void BxtContext::calculateFullU64MUL(GenRegister src0, GenRegister
> src1, GenRegister dst_h,
> > +                                             GenRegister dst_l,
> > + GenRegister s0l_s1h, GenRegister s0h_s1l)  {
> > +    src0.type = src1.type = GEN_TYPE_UD;
> > +    dst_h.type = dst_l.type = GEN_TYPE_UL;
> > +    s0l_s1h.type = s0h_s1l.type = GEN_TYPE_UL;
> > +
> > +    //GenRegister tmp;
> > +
> > +    GenRegister s0l = unpacked_ud(src0);
> > +    GenRegister s1l = unpacked_ud(src1);
> > +    GenRegister s0h = unpacked_ud(s0l_s1h); //s0h only used before
> s0l_s1h, reuse s0l_s1h
> > +    GenRegister s1h = unpacked_ud(dst_l); //s1h only used before
> > + dst_l, reuse dst_l
> > +
> > +    p->MOV(s0h, GenRegister::offset(s0l, 0, 4));
> > +    p->MOV(s1h, GenRegister::offset(s1l, 0, 4));
> > +
> > +    /* High 32 bits X High 32 bits. */
> > +    p->MUL(dst_h, s0h, s1h);
> > +    /* High 32 bits X low 32 bits. */
> > +    p->MUL(s0h_s1l, s0h, s1l);
> > +    /* Low 32 bits X high 32 bits. */
> > +    p->MUL(s0l_s1h, s0l, s1h);
> > +    /* Low 32 bits X low 32 bits. */
> > +    p->MUL(dst_l, s0l, s1l);
> > +
> > +    /*  Because the max product of s0l*s1h is (2^N - 1) * (2^N - 1) = 2^2N +
> 1 - 2^(N+1), here N = 32
> > +        The max of addding 2 32bits integer to it is
> > +        2^2N + 1 - 2^(N+1) + 2*(2^N - 1) = 2^2N - 1
> > +        which means the product s0h_s1l adds dst_l's high 32 bits and then
> adds s0l_s1h's low 32 bits will not
> > +        overflow and have no carry.
> > +        By this manner, we can avoid using acc register, which has a
> > + lot of restrictions. */
> > +
> > +    GenRegister s0l_s1h_l = unpacked_ud(s0l_s1h);
> > +    p->ADD(s0h_s1l, s0h_s1l, s0l_s1h_l);
> > +
> > +    p->SHR(s0l_s1h, s0l_s1h, GenRegister::immud(32));
> > +    GenRegister s0l_s1h_h = unpacked_ud(s0l_s1h);
> > +    p->ADD(dst_h, dst_h, s0l_s1h_h);
> > +
> > +    GenRegister dst_l_h = unpacked_ud(s0l_s1h);
> > +    p->MOV(dst_l_h, unpacked_ud(dst_l, 1));
> > +    p->ADD(s0h_s1l, s0h_s1l, dst_l_h);
> > +
> > +    // No longer need s0l_s1h
> > +    GenRegister tmp = s0l_s1h;
> > +
> > +    p->SHL(tmp, s0h_s1l, GenRegister::immud(32));
> > +    GenRegister tmp_unpacked = unpacked_ud(tmp, 1);
> > +    p->MOV(unpacked_ud(dst_l, 1), tmp_unpacked);
> > +
> > +    p->SHR(tmp, s0h_s1l, GenRegister::immud(32));
> > +    p->ADD(dst_h, dst_h, tmp);
> > +  }
> > +
> > +  void BxtContext::emitI64MULInstruction(const SelectionInstruction
> > + &insn)  {
> > +    GenRegister src0 = ra->genReg(insn.src(0));
> > +    GenRegister src1 = ra->genReg(insn.src(1));
> > +    GenRegister dst = ra->genReg(insn.dst(0));
> > +    GenRegister res = ra->genReg(insn.dst(1));
> > +
> > +    src0.type = src1.type = GEN_TYPE_UD;
> > +    dst.type = GEN_TYPE_UL;
> > +    res.type = GEN_TYPE_UL;
> > +
> > +    /* Low 32 bits X low 32 bits. */
> > +    GenRegister s0l = unpacked_ud(src0);
> > +    GenRegister s1l = unpacked_ud(src1);
> > +    p->MUL(dst, s0l, s1l);
> > +
> > +    /* Low 32 bits X high 32 bits. */
> > +    GenRegister s1h = unpacked_ud(res);
> > +    p->MOV(s1h, unpacked_ud(src1, 1));
> > +
> > +    p->MUL(res, s0l, s1h);
> > +    p->SHL(res, res, GenRegister::immud(32));
> > +    p->ADD(dst, dst, res);
> > +
> > +    /* High 32 bits X low 32 bits. */
> > +    GenRegister s0h = unpacked_ud(res);
> > +    p->MOV(s0h, unpacked_ud(src0, 1));
> > +
> > +    p->MUL(res, s0h, s1l);
> > +    p->SHL(res, res, GenRegister::immud(32));
> > +    p->ADD(dst, dst, res);
> > +  }
> > +
> > +  void BxtContext::setA0Content(uint16_t new_a0[16], uint16_t
> max_offset, int sz) {
> > +    if (sz == 0)
> > +      sz = 16;
> > +    GBE_ASSERT(sz%4 == 0);
> > +    GBE_ASSERT(new_a0[0] >= 0 && new_a0[0] < 4096);
> > +
> > +    p->push();
> > +    p->curr.execWidth = 1;
> > +    p->curr.predicate = GEN_PREDICATE_NONE;
> > +    p->curr.noMask = 1;
> > +    for (int i = 0; i < sz/2; i++) {
> > +      p->MOV(GenRegister::retype(GenRegister::addr1(i*2),
> GEN_TYPE_UD),
> > +             GenRegister::immud(new_a0[i*2 + 1] << 16 | new_a0[i*2]));
> > +    }
> > +    p->pop();
> > +  }
> > +
> >  }
> > diff --git a/backend/src/backend/gen9_context.hpp
> > b/backend/src/backend/gen9_context.hpp
> > index 8acad8c..a2931cc 100644
> > --- a/backend/src/backend/gen9_context.hpp
> > +++ b/backend/src/backend/gen9_context.hpp
> > @@ -46,5 +46,27 @@ namespace gbe
> >    private:
> >      virtual void newSelection(void);
> >    };
> > +
> > +  //most code of BxtContext are copied from ChvContext, it results in two
> physical copy of the same code.
> > +  //there are two possible ways to resolve it: 1) virtual inheritance
> > + 2) class template  //but either way makes BxtContext and ChvContext
> > + tied closely, it might impact the flexibility of future changes  //so, choose
> the method of two physical copies.
> > +  class BxtContext : public Gen9Context  {
> > +  public:
> > +    virtual ~BxtContext(void) { }
> > +    BxtContext(const ir::Unit &unit, const std::string &name, uint32_t
> deviceID, bool relaxMath = false)
> > +            : Gen9Context(unit, name, deviceID, relaxMath) {
> > +    };
> > +    virtual void emitI64MULInstruction(const SelectionInstruction
> > + &insn);
> > +
> > +  protected:
> > +    virtual void setA0Content(uint16_t new_a0[16], uint16_t
> > + max_offset = 0, int sz = 0);
> > +
> > +  private:
> > +    virtual void newSelection(void);
> > +    virtual void calculateFullU64MUL(GenRegister src0, GenRegister src1,
> GenRegister dst_h,
> > +                                           GenRegister dst_l,
> > + GenRegister s0l_s1h, GenRegister s0h_s1l);  };
> >  }
> >  #endif /* __GBE_GEN9_CONTEXT_HPP__ */ diff --git
> > a/backend/src/backend/gen_insn_selection.cpp
> > b/backend/src/backend/gen_insn_selection.cpp
> > index cd7b2eb..b5da42d 100644
> > --- a/backend/src/backend/gen_insn_selection.cpp
> > +++ b/backend/src/backend/gen_insn_selection.cpp
> > @@ -2267,6 +2267,17 @@ extern bool OCL_DEBUGINFO; // first defined by
> calling BVAR in program.cpp
> >      opt_features = SIOF_LOGICAL_SRCMOD;
> >    }
> >
> > +  SelectionBxt::SelectionBxt(GenContext &ctx) : Selection(ctx) {
> > +    this->opaque->setHas32X32Mul(true);
> > +    this->opaque->setHasLongType(true);
> > +    this->opaque->setLongRegRestrict(true);
> > +    this->opaque->setHasDoubleType(true);
> > +    this->opaque->setLdMsgOrder(LD_MSG_ORDER_SKL);
> > +    this->opaque->setSlowByteGather(true);
> > +    this->opaque->setHasHalfType(true);
> > +    opt_features = SIOF_LOGICAL_SRCMOD |
> > + SIOF_OP_MOV_LONG_REG_RESTRICT;  }
> > +
> >    void Selection::Opaque::TYPED_WRITE(GenRegister *msgs, uint32_t
> msgNum,
> >                                        uint32_t bti, bool is3D) {
> >      uint32_t elemID = 0;
> > diff --git a/backend/src/backend/gen_insn_selection.hpp
> > b/backend/src/backend/gen_insn_selection.hpp
> > index f292566..83d64be 100644
> > --- a/backend/src/backend/gen_insn_selection.hpp
> > +++ b/backend/src/backend/gen_insn_selection.hpp
> > @@ -333,6 +333,13 @@ namespace gbe
> >        Selection9(GenContext &ctx);
> >    };
> >
> > +  class SelectionBxt: public Selection  {
> > +    public:
> > +      /*! Initialize internal structures used for the selection */
> > +      SelectionBxt(GenContext &ctx);
> > +  };
> > +
> >  } /* namespace gbe */
> >
> >  #endif /*  __GEN_INSN_SELECTION_HPP__ */ diff --git
> > a/backend/src/backend/gen_program.cpp
> > b/backend/src/backend/gen_program.cpp
> > index 5149d49..1427c25 100644
> > --- a/backend/src/backend/gen_program.cpp
> > +++ b/backend/src/backend/gen_program.cpp
> > @@ -171,6 +171,8 @@ namespace gbe {
> >        ctx = GBE_NEW(ChvContext, unit, name, deviceID, relaxMath);
> >      } else if (IS_SKYLAKE(deviceID)) {
> >        ctx = GBE_NEW(Gen9Context, unit, name, deviceID, relaxMath);
> > +    } else if (IS_BROXTON(deviceID)) {
> > +      ctx = GBE_NEW(BxtContext, unit, name, deviceID, relaxMath);
> >      }
> >      GBE_ASSERTM(ctx != NULL, "Fail to create the gen context\n");
> >
> > @@ -219,7 +221,8 @@ namespace gbe {
> >      GBHI_HSW = 2,
> >      GBHI_CHV = 3,
> >      GBHI_BDW = 4,
> > -    GBHI_SKL = 5,//remember update GBHI_MAX if add option.
> > +    GBHI_SKL = 5,
> > +    GBHI_BXT = 6,
> >      GBHI_MAX,
> >    };
> >
> > @@ -229,7 +232,9 @@ namespace gbe {
> >                                                {0, 'G','E', 'N', 'C', 'H', 'S', 'W'},
> >                                                {0, 'G','E', 'N', 'C', 'C', 'H', 'V'},
> >                                                {0, 'G','E', 'N', 'C', 'B', 'D', 'W'},
> > -                                              {0, 'G','E', 'N', 'C', 'S', 'K', 'L'}};
> > +                                              {0, 'G','E', 'N', 'C', 'S', 'K', 'L'},
> > +                                              {0, 'G','E', 'N', 'C', 'B', 'X', 'T'}
> > +                                              };
> >
> >  #define FILL_GEN_HEADER(binary, index)  do {int i = 0; do
> > {*(binary+i) = gen_binary_header[index][i]; i++; }while(i <
> > GEN_BINARY_HEADER_LENGTH);}while(0)
> >  #define FILL_BYT_HEADER(binary) FILL_GEN_HEADER(binary, GBHI_BYT)
> @@
> > -238,6 +243,7 @@ namespace gbe {  #define FILL_CHV_HEADER(binary)
> > FILL_GEN_HEADER(binary, GBHI_CHV)  #define FILL_BDW_HEADER(binary)
> > FILL_GEN_HEADER(binary, GBHI_BDW)  #define FILL_SKL_HEADER(binary)
> > FILL_GEN_HEADER(binary, GBHI_SKL)
> > +#define FILL_BXT_HEADER(binary) FILL_GEN_HEADER(binary, GBHI_BXT)
> >
> >    static bool genHeaderCompare(const unsigned char *BufPtr,
> GEN_BINARY_HEADER_INDEX index)
> >    {
> > @@ -255,6 +261,7 @@ namespace gbe {
> >  #define MATCH_CHV_HEADER(binary) genHeaderCompare(binary,
> GBHI_CHV)
> > #define MATCH_BDW_HEADER(binary) genHeaderCompare(binary,
> GBHI_BDW)
> > #define MATCH_SKL_HEADER(binary) genHeaderCompare(binary,
> GBHI_SKL)
> > +#define MATCH_BXT_HEADER(binary) genHeaderCompare(binary,
> GBHI_BXT)
> >
> >  #define MATCH_DEVICE(deviceID, binary) ((IS_IVYBRIDGE(deviceID) &&
> MATCH_IVB_HEADER(binary)) ||  \
> >                                        (IS_IVYBRIDGE(deviceID) &&
> > MATCH_IVB_HEADER(binary)) ||  \ @@ -262,7 +269,9 @@ namespace gbe
> {
> >                                        (IS_HASWELL(deviceID) &&
> MATCH_HSW_HEADER(binary)) ||  \
> >                                        (IS_BROADWELL(deviceID) &&
> MATCH_BDW_HEADER(binary)) ||  \
> >                                        (IS_CHERRYVIEW(deviceID) &&
> MATCH_CHV_HEADER(binary)) ||  \
> > -                                      (IS_SKYLAKE(deviceID) &&
> MATCH_SKL_HEADER(binary)) )
> > +                                      (IS_SKYLAKE(deviceID) &&
> MATCH_SKL_HEADER(binary)) || \
> > +                                      (IS_BROXTON(deviceID) &&
> MATCH_BXT_HEADER(binary)) \
> > +                                      )
> >
> >    static gbe_program genProgramNewFromBinary(uint32_t deviceID, const
> char *binary, size_t size) {
> >      using namespace gbe;
> > @@ -359,6 +368,8 @@ namespace gbe {
> >          FILL_CHV_HEADER(*binary);
> >        }else if(IS_SKYLAKE(prog->deviceID)){
> >          FILL_SKL_HEADER(*binary);
> > +      }else if(IS_BROXTON(prog->deviceID)){
> > +        FILL_BXT_HEADER(*binary);
> >        }else {
> >          free(*binary);
> >          *binary = NULL;
> > diff --git a/backend/src/gbe_bin_generater.cpp
> > b/backend/src/gbe_bin_generater.cpp
> > index 86197e1..8225d4a 100644
> > --- a/backend/src/gbe_bin_generater.cpp
> > +++ b/backend/src/gbe_bin_generater.cpp
> > @@ -186,6 +186,10 @@ void
> program_build_instance::serialize_program(void) throw(int)
> >          src_hw_info[0]='S';
> >          src_hw_info[1]='K';
> >          src_hw_info[2]='L';
> > +    }else if(IS_BROXTON(gen_pci_id)){
> > +        src_hw_info[0]='B';
> > +        src_hw_info[1]='X';
> > +        src_hw_info[2]='T';
> >      }
> >
> >      if (str_fmt_out) {
> > diff --git a/src/cl_device_data.h b/src/cl_device_data.h index
> > 3552a16..63e078f 100644
> > --- a/src/cl_device_data.h
> > +++ b/src/cl_device_data.h
> > @@ -287,7 +287,14 @@
> >     devid == PCI_CHIP_SKYLAKE_SRV_GT4)
> >
> >  #define IS_SKYLAKE(devid) (IS_SKL_GT1(devid) || IS_SKL_GT2(devid) ||
> IS_SKL_GT3(devid) || IS_SKL_GT4(devid))
> > -#define IS_GEN9(devid)      IS_SKYLAKE(devid)
> > +
> > +/* BXT */
> > +#define PCI_CHIP_BROXTON_P	0x5A84   /* Intel(R) BXT-P for mobile
> desktop */
> > +
> > +#define IS_BROXTON(devid)               \
> > +  (devid == PCI_CHIP_BROXTON_P)
> > +
> > +#define IS_GEN9(devid)      (IS_SKYLAKE(devid) || IS_BROXTON(devid))
> >
> >  #endif /* __CL_DEVICE_DATA_H__ */
> >
> > diff --git a/src/cl_device_id.c b/src/cl_device_id.c index
> > 5debf06..a98523f 100644
> > --- a/src/cl_device_id.c
> > +++ b/src/cl_device_id.c
> > @@ -198,6 +198,17 @@ static struct _cl_device_id intel_skl_gt4_device
> > = {  #include "cl_gen9_device.h"
> >  };
> >
> > +static struct _cl_device_id intel_bxt_device = {
> > +  INIT_ICD(dispatch)
> > +  .max_compute_unit = 18,
> > +  .max_thread_per_unit = 6,
> > +  .sub_slice_count = 3,
> > +  .max_work_item_sizes = {512, 512, 512},
> > +  .max_work_group_size = 512,
> > +  .max_clock_frequency = 1000,
> > +#include "cl_gen9_device.h"
> > +};
> > +
> >  LOCAL cl_device_id
> >  cl_get_gt_device(void)
> >  {
> > @@ -529,6 +540,16 @@ skl_gt4_break:
> >        cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
> >        break;
> >
> > +    case PCI_CHIP_BROXTON_P:
> > +      DECL_INFO_STRING(bxt_break, intel_bxt_device, name, "Intel(R)
> > +HD Graphics Broxton-P");
> > +bxt_break:
> > +      intel_bxt_device.device_id = device_id;
> > +      intel_bxt_device.platform = cl_get_platform_default();
> > +      ret = &intel_bxt_device;
> > +      cl_intel_platform_get_default_extension(ret);
> > +      cl_intel_platform_enable_extension(ret, cl_khr_fp16_ext_id);
> > +      break;
> > +
> >      case PCI_CHIP_SANDYBRIDGE_BRIDGE:
> >      case PCI_CHIP_SANDYBRIDGE_GT1:
> >      case PCI_CHIP_SANDYBRIDGE_GT2:
> > @@ -754,7 +775,8 @@ cl_get_device_info(cl_device_id     device,
> >                 device != &intel_skl_gt1_device &&
> >                 device != &intel_skl_gt2_device &&
> >                 device != &intel_skl_gt3_device &&
> > -               device != &intel_skl_gt4_device
> > +               device != &intel_skl_gt4_device &&
> > +               device != &intel_bxt_device
> >                 ))
> >      return CL_INVALID_DEVICE;
> >
> > @@ -868,7 +890,9 @@ cl_device_get_version(cl_device_id device, cl_int
> *ver)
> >                 device != &intel_skl_gt1_device &&
> >                 device != &intel_skl_gt2_device &&
> >                 device != &intel_skl_gt3_device &&
> > -               device != &intel_skl_gt4_device))
> > +               device != &intel_skl_gt4_device &&
> > +               device != &intel_bxt_device
> > +               ))
> >      return CL_INVALID_DEVICE;
> >    if (ver == NULL)
> >      return CL_SUCCESS;
> > @@ -883,7 +907,8 @@ cl_device_get_version(cl_device_id device, cl_int
> *ver)
> >          || device == &intel_brw_gt3_device || device == &intel_chv_device) {
> >      *ver = 8;
> >    } else if (device == &intel_skl_gt1_device || device ==
> &intel_skl_gt2_device
> > -        || device == &intel_skl_gt3_device || device ==
> &intel_skl_gt4_device) {
> > +        || device == &intel_skl_gt3_device || device ==
> &intel_skl_gt4_device
> > +        || device == &intel_bxt_device) {
> >      *ver = 9;
> >    } else
> >      return CL_INVALID_VALUE;
> > @@ -971,7 +996,8 @@ cl_get_kernel_workgroup_info(cl_kernel kernel,
> >                 device != &intel_skl_gt1_device &&
> >                 device != &intel_skl_gt2_device &&
> >                 device != &intel_skl_gt3_device &&
> > -               device != &intel_skl_gt4_device))
> > +               device != &intel_skl_gt4_device &&
> > +               device != &intel_bxt_device))
> >      return CL_INVALID_DEVICE;
> >
> >    CHECK_KERNEL(kernel);
> > diff --git a/src/intel/intel_gpgpu.c b/src/intel/intel_gpgpu.c index
> > 7f212e2..e83b586 100644
> > --- a/src/intel/intel_gpgpu.c
> > +++ b/src/intel/intel_gpgpu.c
> > @@ -1208,7 +1208,8 @@ static uint32_t get_surface_type(intel_gpgpu_t
> *gpgpu, int index, cl_mem_object_
> >          IS_HASWELL(gpgpu->drv->device_id) ||
> >          IS_BROADWELL(gpgpu->drv->device_id) ||
> >          IS_CHERRYVIEW(gpgpu->drv->device_id) ||
> > -        IS_SKYLAKE(gpgpu->drv->device_id))) &&
> > +        IS_SKYLAKE(gpgpu->drv->device_id) ||
> > +        IS_BROXTON(gpgpu->drv->device_id))) &&
> >        index >= BTI_WORKAROUND_IMAGE_OFFSET + BTI_RESERVED_NUM
> &&
> >        type == CL_MEM_OBJECT_IMAGE1D_ARRAY)
> >      surface_type = I965_SURFACE_2D;
> > @@ -2488,7 +2489,7 @@ intel_set_gpgpu_callbacks(int device_id)
> >  	intel_gpgpu_select_pipeline = intel_gpgpu_select_pipeline_gen7;
> >      return;
> >    }
> > -  if (IS_SKYLAKE(device_id)) {
> > +  if (IS_SKYLAKE(device_id) || IS_BROXTON(device_id)) {
> >      cl_gpgpu_bind_image = (cl_gpgpu_bind_image_cb *)
> intel_gpgpu_bind_image_gen9;
> >      intel_gpgpu_set_L3 = intel_gpgpu_set_L3_gen8;
> >      cl_gpgpu_get_cache_ctrl = (cl_gpgpu_get_cache_ctrl_cb
> > *)intel_gpgpu_get_cache_ctrl_gen9;
> > --
> > 1.9.1
> >
> > _______________________________________________
> > Beignet mailing list
> > Beignet at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/beignet
> 
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list