Pushed, thanks.
> -----Original Message----- > From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of > He Junyan > Sent: Friday, December 11, 2015 15:38 > To: beignet@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....@intel.com> > > To: beignet@lists.freedesktop.org > > Cc: Guo Yejun <yejun....@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....@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@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/beignet > > > _______________________________________________ > Beignet mailing list > Beignet@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet