[Beignet] [PATCH 2/3] BDW: Refine intel_gpgpu_setup_bti and add intel_gpgpu_set_base_address for BDW.

Zhigang Gong zhigang.gong at linux.intel.com
Fri Oct 10 00:45:46 PDT 2014


src/intel/.intel_gpgpu.c.swp is garbege, will delete it.
The other LGTM.

On Mon, Sep 29, 2014 at 01:38:11PM +0800, Yang Rong wrote:
> Because the sizeof struct surface state change in BDW, remove gen6_surface_state, and
> use gen_surface_state as the unoin of gen7_surface_state and gen8_surface_state.
> Use gen_surface_state in surface_heap_t.
> Reloc the Dynamic State Base and Instruction Address in intel_gpgpu_set_base_address_gen8.
> BDW use 48 bits GPU address, so when reloc address, remember that kernel will reloc 64 bits in
> command batch, so make sure there are 64 bits address, the high 64bits follow by low 32bits in command batch.
> 
> Signed-off-by: Yang Rong <rong.r.yang at intel.com>
> ---
>  src/intel/.intel_gpgpu.c.swp | Bin 0 -> 81920 bytes
>  src/intel/intel_defines.h    |   1 +
>  src/intel/intel_gpgpu.c      | 186 +++++++++++++++++++++----------------------
>  src/intel/intel_structs.h    |  78 ++----------------
>  4 files changed, 97 insertions(+), 168 deletions(-)
>  create mode 100644 src/intel/.intel_gpgpu.c.swp
> 
> diff --git a/src/intel/.intel_gpgpu.c.swp b/src/intel/.intel_gpgpu.c.swp
> new file mode 100644
> index 0000000000000000000000000000000000000000..61a705e3f41582fd9cf855655fe391dea4be8617
> GIT binary patch
> literal 81920
> zcmeIb2Yh5#dH<~hY<e}ln2Y_|NV{6C+G at 4cQQNg_t+Ys57mRZmjYiUVM>F!wXti<!
> z?0^k~518hJmH+_)gg+tl5)(=if+=>u6jMy7AsG0>O9-9!`#k5|d(SO1(yrG8UNoQ2
> zPcypr)aTTvoafARo;P~H+uqUJ!smf4EpPsK>+~mkpV at M^ww9LsLT+)XRw>J?W}hJ3
> zmf1q>aJ{nBDC|{1z^%2)ay4JrI#Vdlmkaf+wQ7EAv0N{d%wK<gX?|(BBi|^UjprK_
> z*r32MQee40x26AnEj`^`of7l((;n}g^58?qn8-%(4GL^fV1oi16xg7^1_d at Kut9+h
> z3T#l|_n89qr3be>l?wc^twh~^|54)m?)HBPE1zZa)e?j|$^JiRzki%~f3p35-hTJl
> zh(Y{&*yjuO`xS}z_q5N0@||Q09K^queP6TRtBLpbw$C4Hzwb!Af3SVN%YNVcZstdj
> z{(bCom6Py$IPv}z`@Y+LuO{B#*FMkN?>8pi-_JfT*zfyUf(QBE-#!oMQ%$^ofPMdT
> z`+ZyDJ)#}`TxGv6vJDob{~-Ik&whU)@!l4<C8);(Y=Z{zZM2QA4GL^fV1oi16xg7^
> z1_d at Kut9+h3T#kdg8~~A_#LG{ZnmXGSjGP<j2uj2z+e9ghVrxE)8GYQ8axEt3?upp
> z at N954xEr_`=JgZcSzrg~1HXb%{1@;c at Iml@z)Qh1K^6QdI0y8A$AWu<pTJ~)9efRZ
> z7`z%h9XuKA1`h!D2S0_G{~Guh_&4wmU<K?3e+2#oVZaB#jo^jgFc<<JcpUgS!i1lJ
> ze+I7y*MalF2p9%W01p8FgHYl-;Pc>f;2**J!LvXGl))h|4f?@$a4NVDxEJ_uc;qjF
> ze*td+*Mn8C8GHi%`by9Twt*kf2(JgP13B;%&<`F2z76yJesBa_2<`>$3BHO9<5uuC
> z at E71Ja1q!H9t|D^enGox+iL&w_|)pv<$T?{yv6gDF}mpK_UqnKq3YKcs)gLFU&~i>
> z_51>I5YM~P%Pk-ED|2(TLVXwiJ27gQhLngkQ>o7Km9La4Rliox)eFtTHwjXlt=6+6
> z=a;K9jnZAN&gJq2f1!|Daw0pG41RjE)kR;eOenOsX{NHv)^BEcPHQXm(@#8Lk&st<
> zOI4!I`7^srkgc1%`a;1z^+>_Xm1n(TdA4v={@b**B_eb><EAeuRlT at a5MnMaX@-&+
> zPiQ%wNb+-qs<%cKq>`_ciBYbT##$NLMqfurdWukC%>?VY{9y at 4z~ypH%zS3OQl&ia
> zg&n6 at U(798a(aBIrG4iu*K+d(Z$?9ONKM^TXa}#jI8ReTY=0(KE5s9#C$=T#Dpi6?
> zS~b&6I+SYh0!dmXD<>UWAQL&WIKj}Fk#fxX<wRsjK<iXqUYw!1Ds#5sYSc?&m<9|-
> zpiRb%wTl*W)NFaqFJG+5n%-8FRAeaDsGfE|9T%|<5vEtqRp$#dJ&B~#Bt01j)pD+6
> zlk|jCre}o(lt<FZ^SM&Vlr}yvY>|l-FE6P}j5SlsmyDs8f0&XK$bxU_SW>hS4a+QK
> z(qMwxr2j^5XRE~{GG}?4W~)c!@sUb#c2h7)i{-hBcG2Qx1;WgiDl at r~zjD~GU3O8=
> z#ZhoF^eaobOP33~S}t#~6NSlMP0(7X%GnI;Qo-AQaR0$WG6L%b?T`i9)w^8UDd^B;
> zZ;#j2=UqvkH!nSTE4 at qKboVFTP`BWXL?Wy6h1O;5A6}(gTJ>^Xskm6I(^=BJNJho!
> zvxT{0x!@fbxWFIX=MRre4N0%-K?r at NC1c@8ff+z&Zz`r0Sgr{L;%!;4NmoffHx00>
> zrM|jUAT#3Y;$di{X?vGTW_Em;X;^c^)~^~ozNmX!-=-RkQJHI<FO>Ztw35 at Ww`r4v
> zU03>5u{`hBb2FuaMCElN{~!UG^(g?fo2pl;1-fpfzMupo0Z$XC>C9{+m<FtA3kJlS
> z9z8HJH9c_Ppg%A?JSp^(Pv_C at o^AaRiKhrKHZtiGa(cv{8hz4;glg^TYl~W8!k-+O
> z9vB_>2S=ynt$td&yxqIK?*3S~>8V&4324LhM&b64jQc|ehW!I0!=nTK#Nat2LnPbU
> zd31YMr+(TfUIALog+&+|BlH0q)*n4Euz#d`*dLgj9JtVw#`)WMw5xMpPqV09!~Wo*
> zefvg2q6D!uYTp`Bo8-E!dDI}A#JA?!+j4qwj`?%Wqps(TOiqnXjQd?aJ^u7!IbT|y
> zEqJFfvDiV`v2a at a`EtEjs->PXT~+e()Cs&)t;|<*i#+wVZq?~=aC(#mo*J1vZ)DgX
> zKXkwetmDBNubQbTo`?J1nb;Z!GUF^!Qa2Sd@|y%OHng!i?JiWS<x0oG-l*ieYxP-@
> zia(pnm+PhYquOe1tBlt4QyG~Q!%cI!TqN1}GZv%DQZjmdwp5&nhs)J!g=#7so3HtJ
> zI5H?|Ra$gu+7$Mcfl}dUq3BIjmY0f$D at VNDIepN9$+1586QyEDzOuNNsNTSGeW6m_
> z=?xajm*f^%SEmZ|l_SNRw|mAu>8P0}@rV+4te7v9*=*!=W3y6Z>ZvajYfRcR)m(M8
> z!yBFR%9VP%S1S~}-3#^l($1}0S5{U!=F7_+mFoP~l1ZSpb#I5HcVT7Ot1VQPOS9fW
> z?nuF_7V-s_xmnhMd}V1>_7Jij?;k(pjTMAW-u^<lP-PK6xI9Bzq at l&idKVT}R`o^Z
> zN^iDM&&gnrC<jI+ht3`tpB at +-9UGm#&?C&g(dqG#sVQ&Y#H2Ui9UPdP9vwO~HZbWO
> zJT!T5VrrzrgH(l}K$6JJa@{+Bbo%UxL(|^C_=Vp2G6RfHU%1N?(o}dW3x>uh!aNkI
> z*h;QiWrr$NlN6>M>Uj`ymVQ(%k}g5*mS>@|B$?*e1J+4b_8A5Ci-o!6QaedVDr^jD
> z#Y)-h4hUx3sa>koO3YQP&pmo0f!bIdR=pCddNqir1PPnA<}C?rYYP-%W>pKnuS&hA
> zDsy#8U-0%-mdmp_No$u^pq_=Qlwq;Lw7e>1<Sl7SyOGCYEhtm7MoiIRPI9c-9Cu0i
> zb)!%%L<Ewo*r{x-NcK{KA$m-;IKNQ$KJ*5!yR)m?8<l+(&#OxnSUd{My4fQ9|8?-|
> zp8>-E!-nhUMtJ?Vf-AvUU<ddTy#9;81>nKpHsXBN#{IO!-}r1$V1oi16xg7^1_d at K
> zut9+h3T#kdg8~~A*r32~l>%3`pt=KrC|yNCK8k~7^hxz1a%z=<Sm}HC+($IKT|~gC
> zc&cUbbF;IESZnF%vDXb!S*q0Pel9O;XCeXTO at p|i$Otr4s`W{vkb3W=6Dk=bP(GJm
> zDERq$wL}W74PN>A8E;dYOQCpFCvijMIJs1bia5Pmm`@bbdE=xJk4<CvV?Bw8=Ajek
> zO0Q5t?sU1fRXhPFlSC at c8yal2UPbz|OZopx>7CC)S1kO0VBi0B`2ClG>%sHEx!`QD
> zA3PR327C$`z$?Kkz>~l!K;!~9A`7?%Tn%=D-yl@@H4vMCcY_)b8-RO)H=)n3gBq9z
> z=YmnN7u*w^3{C<c6}>)q12_Vf!67gOCc)#tW5I*L?dbTw488<z2CoON1<wb62IfH*
> zcm((sdj5}tzXVSM6JR^I2lzfZe9`&88U*_ODSkf=h at St)=<&Y>z6x#!{|5dByc%2s
> zt_Ble7q|!b0eb%LgZ~7d2e*K?gTDbcfER-of$P9|U>fv-JFo%x1h@%&47?Zo1$YU#
> z8axd=6;!|&I0tM2o57>O&#)EvAMhFQ at 8A~j&)~V>IiMGu0=`5akbZET^o8H{N0p_W
> z?IO}dnImep1BFFzV&)QWXsF#hDaq`U{d6FomzU>P(Uy6G=$?(j5>cc-I50hQcB{^T
> zTlT8(z1<VFiqYf at 4or=x;zwkiS9twxG64>b>=!LgM#Qd84WO#^$b13`x}VQ8-Wp6P
> zt!=wJbW{Y(Etl%vkW51e;>z`ErQ{vSm6lbfczKIE>ByiLRdz7#>hN!ML!kWBTD7%^
> zWWJbJ9VikzDo|yvuOe#A=lxPC?-%&$p>~UP`EO-Lw4H8B=?SjCHB2?o%ee`Y3`rOA
> zq*?0GUu!41eOpGFZlboZrJi-9)hMZf;qwN at hek5mPTQ?ne>gaLaAa(B9Od4~m}uIr
> z at DfjqB5th?!uvRJYlTuFU-y at aONA23+VwW!e5GFT3P+2oOjSiG{cHTt*qC%sxAA64
> zzg}q7AY_h?2Yp7=2lP3QNol9pQ5Xe_32w)OR!PIz2jR-$=&Jm3VI_!#&fSf}zr?VL
> z`02?D{eiKui6MV{!XKHO^h_kioIZ_Lzl~%P)uC6%Ya6Ggl)}_LW&#lQR+lpMO=dJO
> zDn){B<^V0Y3FX$#Qqi3zOxfa^a(}s8Ent3ADCcc at TlPkFHXSn+lRRo}abc5uCv{yr
> zy<n>|6D8*b>BZiyFEwL{la*HVW?d;6)1Qolq8IB*M{LTlE67O5d9$vR0;8-BY_t-D
> zkG(p!#2Tl?n{_4S+HXbG4B9aHR+BU{wvO#N+uGh9GvM126N>Gsv7X*|DQME)TH`h#
> zZ8VCdqSq?F$ybJ=U0Gt2jt&FXCv0 at 2EnCI>1|uDb<WA}CaN4rBl!FJrnl57)qz08H
> z9YzU at m6>3&pqpIMkg`)w_f52ZYLOF!TFDjbY~n?Ghw`~~9kg=OuC12yE>Rphw#1g+
> zi2I^Au at oG3EtvMb^?ZW$+7pAD_Q?894RVxy;vqSy;V0VQ#atco1_n0Tkg-YHDPdde
> zML at syge?)hz{x at CB!*_z46Qv?{rD~?O at -L|a1Cr)-dGgui!zH%rQ>CB8KgupoL8w5
> z2rc`1F*A$h;>3^wI3sO&ZgC#-O{m1T6vAzFml;l!!FiP`L%P+R(2WStE+g9Xg3 at wr
> z!AECZNR}tfS|>`C3Xm#W*w<q8NyU>=hC!w4CW~UZ;6(oBX)4n+L4xSnox$m_7!&xl
> z(xPM^bh4P$n@&No$&f8t3l at Bib+lOi8GGuQwF_nY&qM40q+`_Bpks7c6T1d$R6wq3
> z(@QE??qcsO={YG1Mf`lt$C|IYN}8l6kHnmyf(4*HrcmCtu5OH3kq;CWd8U?bv2-vb
> z43a4pFa#9+|05X)d#wHcpym6X3V)vmj|3lur~f<fI#2|=f$;kO1#iCu?hoD!FFyvv
> zj{g_%>o<TNa5MaP87zQaa2q`L)4?wAYk2IBftP@*fDbMPPX-6UBf!Ie at Zc{6PXS_E
> z{}=GmN5Ov32EGiB{A^GHv)~Ny6ZqawfxiX2!DGPp;Bo&Iyb7EJ9tYkJulsVa9sB|s
> z+zeg|E(SuA-Jsz|DBFmoFpQ#v2tJ+OW~}$%D_SkTh+SZBoBZD?CW2jUS9mTr>K~XG
> z9^H4LY>|T$%=hSyu5JE)%>0HY4v4kk==jw1<e{NyEa5PLiG9`#Dy5$sVYeP^PITRE
> zr-(6Q`8K=mVlWGfP%+tT-P*A38I{bcnsUXXSgDIqsYnI~#ddoDIiqLz_qEA;f{HL(
> z#Mr8?;)bXUYAn8X5h98oSL at 199$qbDe3rL at k5mbw9Fh$>IWj&xGPzc>yP+DjxNYHR
> z3vLo^NZ(YqbP_NY=N+z<u3i4`q9I_dbJwCnEZ8v;!t%}QtK}J9Z|9Ca*}#X>fbC3J
> zW-Zs$I2jR8V3jOp%q`l;SkW2lXJfqVEmd^?<YBee)y2Ddtpn4uc5g*Z#W5}v+qWQ;
> z7|cmG#&UdRp;#(tlJqX@$|Y3JSU-CrRq_I1eqiM97KN1s_SPFcZxDf&967;yEl3Lq
> z-Bdz4x8_id&jy%G+rG0_-)i_ip5Qv>(BKqBU at vK^5RJ2Nx`A3JS_av80%<6P?CP}?
> zY9fg2vqAosM3Mcm-5i at T9T=e)M)qHZ6KpDxGv at 0u10F&QyYJB06wZisq%>>$%%y}5
> zdP3tIos$oC_H?#J8H%B2Zq;Ki%hoGjsp=YHPQ+oc%Za!SW6FssYtB1duB?<X?5)nK
> z-RR8nydG_0*mJzALI4E8Fwrw&Piln17_5pt=}NH%A14;1ZqmV^*Aid at TP<9|&}Ty_
> z2hp$)g&vR<xi|;(biS#0i-lUwEAHsq2E!)DXDH(=DKnQWF4s64LNz3pS-Ths&&ot$
> zB<ssdNO?@*j*HT#i^i&1%%h#X=2Sx?dP{ZOy at D0_AJT#iD%G0zoOR~lYz6L`EaHp(
> zU6V(AqRY;MgA~rNGyMgNb-Dw#+Dn*ga~5gf(4aTRQlh;?4<l(8saNV)oht)E*X`>)
> zFu3-pb#}e|vg^$pRLMqmrs(F48($LE%D`#kD2Ef5LA-?%Ie6h`eS3*C)1b9;$muMA
> zJ?mp4lH16JEW{cCWyZ~7ADo&Y=RgE1JF`2tgVNS%x_dg&dne|b6SQ+8rH1>aW{Z~7
> z#>dg->)P}P{|}4Z@=wC&qW_<_%<lW)``-*i-~S)*`d5HQ0MYM at t^W#m4EPNE{)@qR
> z;Njpm at cdr^UjknQuLOSvt_DvBL!ccz1jsr5Tft|*2f)k0v%z)XTCfWCfnjhOI0^hW
> za)a*!(eHl|h&<ur;AP-1!8m9EzoAmMfxiSITUZ8v3PiSW5fDB9so*i-Zs6<46<!Bk
> z3!VzPKnu7H`NG at 5OTY`jvp^9Pz(c`@kTr<@{(3M4<ShTg!OxI4h!4KcgU^ARzzyKV
> zU>Wp+pCW&F2iOl<!I|I;@JR4I<PqNmH-YDXgJ27gcKU!LlQ6rU^^HNV*=Uv?>I_ at U
> z!Z~O1b-&rDx9TCsZB2u~357GC^MkRmICEL^<%5lKYj=BRd$&qUdc7 at PH#~%_6{SLX
> zzP_-f+r)3YU6u`XT#;C+;Os!EcS1I at cX2bg4iK6W*_9=Wh}A at th1v*s+L%Fmx|=4^
> zpq+%;>u#v7ctf3lmNFG#F+ury0$VK0#>24eje7c>dAnxoXv0A0sM(qij5P`)o1#Fl
> z=ZK^kKQxet9Qz{iqb at L=NArgDl*SHa*d&8MT4l`0j3rU*0O?%w at CPfo)hlLJmss2N
> zU!VU8pc9EvD3}U}QA!gAP3s-nw3)!s91$qJRe7aBqjz3vQgek}QMlyP=Z0Ei7ZYSJ
> z`gkK at 3ZAUX7%^x7_@{)A6|G7!v=vAP at b)4<@-7#BX`}8K9S}G6Oa~`M$EP_KEv?kQ
> zMW#t2H=Y-by;GnEiq$J~!aOpkj!CdLar<%;_CK^min_Fv$XGD)BYZF2Egr`6=8P5}
> z3lg-j)pqYRIOj6VY`YmCh5;!Y%@<&Ml{wL4jU7)epJqvmk*B(jQBGyAcIoJWr7RUm
> zyg-}e)=uWpc<F*B#pGqn-r2$tj`6aTm^?`>%7T>ankvsaq!@wrWtExOeV0_s#8<1t
> zT<#VxMSRR%cyFXHA$d6g+9!m!Y<T#5$Bynmzc4!GBl7e2Pj|8J4C*8X5Acbtyc`_3
> zaC&lJbj+W2-g{SEkyuzW$QA1KqI3hxg3Q9|xH83JcxdCDi5-#XyJYHWqj~WCvU#%!
> zvUO`2)xlC_g%iIL#+Vm~k(3EUAKSW>Qn6XcsVD at 68MX3^khImLyLT_%JKA)>>ASGV
> z!5Hr}nQ0;Rn4Y(HFGAT}ElyBzTw>-vp+ampsr}xzgo;zfw#;_cUQZL>>UDK?%O2<0
> zl5UW)=N+d2uJM%9xh~OI!x`(h6P?j at B1Cg{opA216wlqMwhJV6%@R3LvbsB;ha<_!
> zmU78JZ?t%Ju1h2sm*(76xg3|oPCL<^lGzFW4~yS&ljZ*xEdT!>JiHxz1&AEraxe-W
> z4(<)^0Zs<DA`f^CxD=cPy1`b^0ltoW;B(;R;HBU)FaquYZbepbJs1U>!TrF`MJ53L
> z2YeU2AG{Y_3wD4<gKr`Oco{e!c;Kt>`hO3e3dFAeY;X$rF+BZ`zz at MU!E3>5z%^hu
> z5TVBx;P1t^-}OLz_=#=*Ft{H$8Qcti|0!@CI2Y^&CxKtX-+vUm0sJj^2Dk=X4UT|r
> z&<P$09soWHum9(u4{QV9hrfR-cr`c&3<2Tw{|meZ%z;zEW5KU!mtTR~z~{l|fV9=e
> zK;jd#F_Trr-6e?mF<$!A<lM4?SgowFI`F>9(24Q$FbtQEZk^hL6amBbT3voj7mn`f
> zys|k5gOj7}oOtnv#;3;+CGPJDjPd=6efy?Hrgc-*s1UOG9h(>!mWZQMY<qEebby_2
> zmn$3)X at Qi1$~3J`w at hli%Kb`Zrp69P9S%(n?&<38Z}*0W_VjeOdy^CTHMP9Br)x*I
> ztz5XNYE)1r8W#1=&Tc80aKoB>U$04jN1rC&#TUuTS3G&ye+5=aO`0T0%I>?8luc^d
> zIou<f9Me6hYcR9r#a~I?+v%N+TN2Oyx5w-5<5A!Gddbuihor5$?#h}qW|nr)8ROe>
> zYg85-r^;lCGEB>Y&2OY7z0*UrS?4x8(o&C%|GDD498K%KsP|$WT5ERQ%*b8cCiZdm
> z%>Si9o>7&qJ41)Ai!$l(`!Gbe+abD+vfkxmu9<wI;gFl>tm^R(x28Oiu!~E182gp3
> zj$&k-W>1e6%c`eG^o1>^cqoL&hg0*sAj)jspHq9<?AO?EvQXo<DiN(-ILetV)@VJW
> z8s>skT!Va!Z8}~O)zPPk);QzNSXIQZl>+FBA*Y=Dp^5S7$%!%7meAk7?}Dga@%X`E
> zrpz>Yh8snzEQ!TIW~7OOLleUze$Q}FltyXPmS>tIGj(XNX-Y<4KncWy<HWw6Zt+Li
> zr-!qG-4TY!vSpC`7YmEb at U2VvcF~Rqca8(gO-uQ}fXU3-?lB_uB<R<ca7i2piL6DX
> zjh&U9PQ)26 at MkKA3bTs1DS0R)w!d>%lazQUT6E&0py^I)4MDTU_3S6ztM-pg3=WJT
> zS(^6GpB$YYVT)FrJqn9%i6RmdF`*CWY7$C{Y+WUFO6u#rq~&CL(nKkiID#Wm-9{Ul
> zbZxW>e&{x|Dcxj;>JBgw%Whj+EGwF{_)cR*PPY0|Zf1|gr3O<UbQH?Q&9K;ljo?LA
> zk240Nt0pE#nx@)wAf047spIALkh+ at IJcNG`yCkD at F@BiU%$?n=?3DYtNm?AGvaOZ>
> z7$N$*x3_;s at VmdaH~ih(+dI%Hl(x}(yKE>T_jU)r`(wXJIgFv!K_(CV>BI<AA~wH+
> z?N!1wE at S!czUX2Gm<ZuyxKl9oteWdG{|t1&5$x#FJa@<&`<wcuew!F<@jE+vOvyB<
> z9ykZBuRM2t_eS;V7g}m4%Ym2}JPw`*DXqU=U17Z_SA3W&6{3Tm!vD*ib;57D{{KG!
> zZ~u?r&p`>C0louI{~_=}a2ePG<Sf7z at Dq6YAAt9OcY{koFE|5yAKw1k;H}{K;CbMw
> z;3Ciu`oK2O2ITC(&%j5(tH3qjiC{ChJGdR5|6Sk)@DgwZcoNtPP6lER at OR*u;3?n<
> z;Ag_?gLi|sgSP=W>puhJtp7I93tGW{!1vz{J_+6cUJt}BK+Ydbf`dS81MUw*P9SIh
> z-wDJ%;6>nt;94MO6Gp&8z)z3?+yp)bUIv~Hd at uy=18zqq at K*2~Pyp at Vm&gRZ1l|YU
> z1>Om+15W}Mfb+o^kaPPF0$-;6z6f3ct_SCVX|N9jvV?@ZU>*OWf)SsY;xeRjmsj+5
> z2PzBe`x~E^n>QClM-U0YlQS1*-NhBW$kAujAGtL>&YZ$hGnd8|o3z=A_)=9{%beHg
> zF+)}BV%O*zGMh|f!V-4U5v-d9(OsxjgPB~SFH23k8U=<)wgDy)Gm8YPs at WBA_^WnV
> zSaiY}seU?FjuZO1dIeMeSk}6PxXC-Gw at kox&us02Gg^Uzm!@Oe<I`waGYh(e2tF#B
> zP~pTO?88~B)sj?beo+1~_E$k*zBy^cY9_*r3H3^^T}A9isU$v_G05cLU+uJX#N at i}
> zs$!$`n}u3qbq~)Y8*OcrW^0e^?8J0LKNLM~KN5vhKil2?>bko}l;ngxAnu<JPE1bw
> z2S+CNv63Dd56RMi%q@~)V}U}CY53s4 at 0Pt`$wfD*w8i2Tf5^H>%S$<~DYp5RynHY6
> zKra)}yxdNd+%jm-Z5QDfL4|X-OF?2YB%_(y+KgkH7d<Qx-9*9JGuoPt5#OqqF~ge%
> zBZe|2PaOs;TeLTID`KQ9!9WOmu45c6s-7ICAspf98TLZ%MEfjtnPk%>E|2l7V at 05{
> z{lR&z@^47`#9wcrT||U#zOg;E5=%)(f;t$b!_yQ(6iO(Gr%2(9W2^sj(~l;Rb&+IU
> zg+pKJ%oK^1NfzhMG*G-W4f>jCs}t1MbjpXsw31BiYiw*JK!Z^k9m<hF`U&K+>zn%I
> zOhCrOrv==Y`V7O{B6L08sgKC+K#6SiqEVQ7Z>%n?g;<ktkqJw7Aen7u9LGCm-bpRd
> zNw+SI6C3LZrY;S$Wv`y13<UZz8C%O}w at PNtOXb>NN-{Cs{f+j;ti49N$Bi1Kn>A-^
> zq|8Yn+}vc(&<%>k#R=htQCvlA*=uBCa=w}^rHakAZe_{}h+&j8$Gxdh`r_(nL(q-$
> znK&K(PzBw6$~@~hYP1>zdb9s^LAS0cHEt;3XpPxWaG+lYwUxo>UW1zsYQ;qr$Hd35
> znKGL0GeRyc9B{(_!y>o*Q1r>z|JN*6cnkdgr@$w{hrqSq8K4f%0j=OnAaVim5%5D~
> z06zdC8+ZqJ1~?B)gDD_)1wI;lA9=tBz+ZwJK;S3vFu$k4E^sOkdBL~9ZQxzt*<cP7
> zfZQ7>cLvH?gKvWOfR}@pfh)mNKqrv<0)L52K<)>;9{d?N3+w_rK|44F{3isEGXyt*
> zH-Q&`%fJNa0o~vhWCL#ot6&ODg00|w;H$_1UJPCYsz77}{}1>Iy#JTMKY-_hi@;;R
> zqrunV`#%Vt3U+{g at MHLX@$+{LSOFITkp=u5{{C~|qu?Xpufa3HW#A}S0f)hF;Prn6
> z{u*2i9s#6Xqx=78Tyb+##0!sKKqd%h%gr|dBal4%%>v%&W31vr0j_9cQnxzE$|fh9
> z5jGJVUftg4q;W;=X3iKOQjZ-Jm-|x8ZEbDdW|D}%^fu|8PoZ69ROT&vj})u*WzMB-
> z4i+7G+4wAaat+jlpG&!vCXL<gMQ&5HBI5l<=()+O%v{2^qwX~iYzZ<}P;2$4mW6g}
> z5LE~Ih^wSf2{BU%D~N#5${h%<Q=8cj+w`{Rx*D#$3HFY3U3WsZGi10mOT^QB*p|UJ
> zay1fX0!8?8=9vMhlc6cNd at _=^?zK!(fk&;BrSBQFooCGM^v<Y>HE+A;`};=6Mtom>
> zsgpi_;Wk2 at -L>kqMn-oa#d|#0J6>@`kTsVKwo0pD-1&Gpj<1Y0A;e*wjssQM1VcbA
> zdf7wbng?^^fkPMA8?Y#X=qh{&4)vi$3mwxw at HVR^&6iu)tcQWANVj2z1|s{^ZJBi?
> zsnhU5SIr8{)-1eQld=bSO9u&l^LSuvbpN;-w3?FIqaItg1~)6lP7rIF=Ik#Ah<m#6
> zMN`MVpJT{!UE?uTu`jrB%iaOHR^3ieb&jnD?lpPg)Mb79sQOK|(dIhQ*#gG9#U-Q$
> z4I0Tg7<C-YA+gs at c-uqNf;?^|PA_v`YDWls1o5s%m6+)cW;i9&+m55~8hzcRmqMkc
> z_y$CcP4&lGKJmDr>C)TH`k|{&SWxxI5$oYx9hJ|q6B1!EC*6hV3&qLuxVuwaDXGv4
> zv8EL?%dl`r%3Q&*5U3bUsu^=$DuNa?I{Fb!`!QL%GqQD&K=L$Y59t$wDVSTv?AFl8
> zMQlFQM?~)HFIW`87AzDFI&Y{r1<(f~>Ed6r>|~tN7}873M0TvRt5VloTPxHI*N^a|
> zhFJ`lxTX3beG_X6L^dm;$2b41J%39Alot;sc-yM3GKotkFn_~}hNUq}gC$`)@AWir
> zB37c6lW(c3)1syvbVDUntUW_#mh0|mPK>akwr1`tN|1btE6sKG<}jhi`)1f}V(*+G
> z6CElOKl09hvXI%L=tLKv%j|*|%x%fQiCJ+E9tk7}#KnBm_EnpBa9gXn at s~1O)oO0u
> zl(GabxfV{&nK;?RFB~QsPKv_<M>h!b!rjdUTC(6V1sar1BVInVk<CS<amSN-Gd0o~
> zFZ;t16^$P=S~3ELd|r%<Np(mVF%0fBNPA069HrZjV!7Br4HgLSiR0?Nl<0m#4WPa@
> z{ZsCyvqxu){Mu*{44s1AnLg9-!I2qh1>N)6<~7_hyT8Y~58yzQ-btew&FR?WU7CSO
> z&6s($Mujp2b3-VPwOCArv;w~%YMhVHsDC<TbO$DOK>0{87s?X at 5@?qb)$2vYi?{5x
> z>#A;sjsL&*!ULZJuPprkV=e#x8F>1?1;X=--Tx!N?eOoS|NkfO0r2<W$v}Mni|zk|
> zz}w*6p9ii2SAtW(kKxsS1bzs<39bcO!4~ik at GkO}{C`0?#OMDv_<jqh0`VF6YxwUM
> zgBO861>3>Bz!%}YMW25J41s%sJK($j3w#HB8OT}wCxA1+eZgDcy=Oo-xEr_~zWa^f
> zSzrv at AAA~~`x5Xl at Lu@p7lL`P3p@<m24DRKuml1<`xL*=2Eubc415Q^`~BemfH#9z
> zfxiN;1TO?H1`R%}SmJXx97++JNM{c^z7d|v|DI>8`S!?-xQ%ZAm6<}uNt2-5_G_-}
> zbx!mZF;+BtDPL~tT$MXBFpBfxY|*v(nwtCxncJ|?TCmt3`kx)TvB&&ldZf7<x<AZN
> z$biKYj90CzEqm%}B3%&4LHc7yglxA=rrAE~GULh^j5)GRC%@jq$R=iE4Y%FdtR<nT
> z)jGHAt=0Pd9bq*>#f85hMjNf-$2l1CeZ5FV61CvO<6dzH;GKz?l6t)2k4&mf(=N#t
> zVeO=oX*OxDbqRwgJSRG1taYlpXcx1E at 9MC9Rj+(8oGAsT4{JX_#N%EG!zB$-y?Z)l
> z3rpPREA^}ijX1fXH0psovat|Xd|prI&h9R8!CJEpENsTz9Sa4$dNqi>J&f$c?(W>V
> z-HmJ)g)ohk;w&W)B6b=>fy5iiR at 2wpNmO?`TByFAoo=c&QfJsj*n#8nnaJjcQ|Ty-
> znI<r@?Azu~9h%%XAXh5rRp1ibn#GcGD2Zw?c#Tj7-a6Gzc=@k&3U#wzwpq!coqaCS
> zmggS$yHp(LSTV`&RQ67?4-`2e^j+%{ZlWX}QowRe#VB4gzuWOWR^ahlWRKbY^^Vci
> zwp~fwtwFjLjpya~%$ySNHk+B7N`ABF=5RZGT(dLF+j{2bW1FFyg+8`9x~n6cndw>1
> zq at 13TRknB+OqHqjbLYEl9p(T*U>@_kJ4>FpNstbgp|)@*rWDDz7%XdIk|l|ObzI4v
> zX_`7V(Z!ayR3X~_kmkWghkWAxsToj?-X%2?q~<}prMBBawG-zWdX<>T8Y2k=n*_8%
> z=Gwf35l1XixDK{^T(H+3TR8VkOdc5EG(u1J{+{l^p6&sR-wxrVh2ck5;eI|4FUc-F
> zt6b4-AmKzAD+1GsOB26|T7$zrIExwQYAjvSt!|?osfkVrnOd8yB5CMIh#4zRlGQc`
> zW1=9+k7u&pPD9$2l;-Hi#1_hie1 at 5QHyK%jP%-{7nm1dU_^Ugys5P0CvzIhWwBuUP
> zV#>p8_NOrek*sp#g-q at L;hRr|pBDbV*D|Fy!|#jkU;F^x09L^vumkjiM}eQf at 81T#
> z0Nw}w3dntcF9cVEt3VYjfeJVid=+`X3xLQ7<a|IkcqI5Ra)6hD3OE-GgHymSkq3xh
> z067!zJ at 7v8T;PK?@N?t?9|kW4mjdw>_;BzY>ho>zY#?>JnL0j(@2~LvS3vamPXawa
> z^!WD$-$Fj{3Gi|74?uMKdC&(Q3BG~6;3MF*U<DimT|ndrzd>&BK2QfWFaZt#ktzHM
> zxE~1Y{4YnYAouh=6x at M4;lto1pa?|9umi|le9s3}&<p+>dBLZ^Esf;{(sG8&H}hAD
> zc~?%|NV#h@;T%&Ne)U>o8GZ>J%z3)~#s{&m`nn0X(QzV-sDjH~<YqG%tZGq at _i<JL
> z)300!XJ9q<zm*Egl=D<K>337akbelLP1pzcfsk8BEqSsiTV^5SUFMp6S1*!l at dUJi
> zS~+9RgQmQpq}GnqAoNlZGr8>19*yZBu(GJ at 4ZQADSJq0gfedJ^Xd!=O_|A0)U&llk
> zk;bkIfh`7|t=T6mlIh<uZcJqNesM83Uub4gm6pDSwwxlW*eyqFjbVV{qNf->6v_-x
> zT^{6KUOg7$n4Rbgu`?kJoPb-qk{BUk!_XcDHe2}WiaOq7xOAzc;(`k<ki#<^p(%@>
> zGz{O#(JR)^GAA>P4lkGw=&c2O_>~S5UAg~h%r4F!7(3U$@W8-16O%IdML1+;4+%XR
> z2<$XNUfauQRoZB*M7RcF|3Quxa%K`6jtk8U6i+2P&kNR at XT!`caHqRtW^$yKJsmnG
> zsh#;&fk06B-VSt}GVe(Xb}SalMojA4>vxEx>L5d}c;IT?KT<5L_#FF|lb7t?RNxd#
> zK9E9XzI2343r0)<@l8(M9Y%Jv$6GOPf){Z%)O4soJm}8rfzUTYRuu0qK|qxb>$zt!
> z3$muYL9Wp<qrrmL(r9KNoWPZ;F&9R*B5Ydk`k_47 at ul`V$kJ`BRtb&8x|g5d%hf8I
> zu}UvimJbd_vFz{c4DW0L88~*m5}$_73)Lp+LKJ$DabFWJCP401zYwy1NIt^PW+<!z
> zEmW{!(lyW%=Zu`j+w2Wa%OSj}k;(H$hW+tF2e3e7){~i}Ra{h#o_FEk<mmAJk${Cx
> zc<2<nK!Tk;Fm?XO*jR%=_?OgF!`*>fDG>%+aYFb$wQF{l_t+t?U`cPVg=%ZT>;wAX
> z&XS8d5JJpz=Y|r?7QtI7q7pEd@&pH8<>;C at s#(Z!P!)rvVhK%^9%<{4)SQ)nu6T5L
> ziM3yL0o}tU>DlFi{F at U$P20E1pKVX5d4a)Tu~u6yw4m_V&!&Os>>z@&NWnV1(K$&^
> zZ#d~1_RIvY+a^=ioL3SDCAQ**Uyl@;kqMFAHkkus_M&XPuQ(Kt#QKu)F_IUHt&C38
> zGu$Mq>4uG>c3UmzPAJznOq1lhw3j!E8g%bw$#+ru#+j3X5!*<h8vP-^VAQ&@(+Ld;
> zk|VWYhZFvPAB^Mog|CGF&kGmHNBsZ27rYa^5G;aeuoFBMd>3B+M(`?70(-&z!R_$!
> zZvn#J%iVy3;L+fh at baGo9|O+>XMw%oQQ#3k?hd#Q5TAdSf(kerJO+Fje*R5B&in5H
> zf&Knget!#|{u|(J;5r~S`@e#h{|xvL_#k)zxE?Hl17Hu>0s6sd;1+oMzXLA=H-P7W
> zXMrn$*zunReh82Mci>IniC_YZgF*01c>AA&TfsZQJAm;2<Debf9oz`7FaG~80FMTb
> z0{;Y`KLH*Hz73E6R`BOQ{QW->JQzs3e6KmrZyIb}f0+%8xiAOTON%~g%RL^a(aMDq
> zTU~u1)4xooR&=HFC%YzJt_xzu-Yzp}qj%fPW?QVBm<NiS{`R(da=Mmz$;&Ns?p+KU
> zkOZ!B4N`d)-a%$MnQ=B-BP}tz6_3ibd~b)bQq_A at LsL-QO*aU{QEsO;CN>q^YRzDy
> zSUnxF^9X)$$C}-&Hx8(mY;v}YlkMarLXJ)NB)}Yt8^L85>f{|o at 9qff$&4vOlutli
> z5ey3BAh!Lsj+ti{tU<U*#spNw{WfVWJ9D0pG|vz#aC>VVNk?_r)=`xkmgEqJt~WvT
> z^{Ff$WxMzkj?fGVLUeV^ae`C4H5gjQlMqYW(UFmnE!(&CdevndYNevfg?aF$SV+!S
> zbBkD0;p;ioTAdxHCySmR<|?8#k2#kSQW#}^pEjK`+$J*<gfx@)UWTJ1b{0eE5|drY
> z1Cd@?nn^+onm+NvoiZr*>nM at 3TC3Ud702A%W)r)gGc13gMQD<{w at FHyJp3}VTr4%Y
> z4+D?ufkMPk+1q5kLy3H(WDY~B2!;OLDrQ4EX_$LNxn7h9yx=Z};AT-8&6+GD at KApe
> zA%Rt=Vrp$?o+vPs&d_?0v^l_mnq%nPq<+JR5W9<+wA`7^B$A|)NNY6v>@9ZW2PLRP
> zxJzuT%uvz^U!Aovvd at A;J<i-5xED8e-oah*9-n|r`Kq~~-57#9^{!a;P(-Mq$${yi
> zv;DydsHL}i#jK=TA73fW%4r{cCDS~mHIe{%5x0I{)NW4$SA6$a5doD~Kw)GP<BMfS
> ztSolN61K(9xDNp#jB|?uF|7^_mO^hN+k`vOU<F%ypHCf_!4I;s4c3+ljA%<yuePA}
> z>)jWa`|t`iuGM7Ut9Bis*9ot*d~`8aJ*<AlS<mLpR1&tgDN(A#$Q5k;9AjH4v)eoz
> zCR4IzG-M*^arR)-Gm?GSl+01UC8!+^cIGv+m3KLvl%|y4rHAEWW^<N|4b`Lr=W8#q
> zHJ2#_5o6i-`j0;}BkZF1!*X=6P$*?zS|^DV$lCp7#nQ<-x~blYZc9P*tav<@uy!3z
> z6o;-Y?JPN$so3QN%=m<zCQ$~bDKe%Hm-yja>pqNlPq%aF-SbY$cBTs0+Grx*5M}Fi
> z8OCt-cT1GLy`#2}<5Cnq$K)Gu#zSWhjQdj~V<SV;{=nG5vj?PG8i{Ziex^bA!LdUl
> z8No%Co0a_j$&r!qjPNiCnc*i#lr1)e`Tx5dJ|Oz<gBV`;f7s}j_genHVEM?m!{c8K
> zE&-zV7oGp<;3OdD{BHrG^Zy6%a`1HU6d>mT4uO-wN#HB+{%-^?1YO`EK+Xi*A-q0#
> z8aNgF1U~=A;Qs~x32p!{21mdY7z6|0bns&e{6--60Eizz(fdCP{0!dzr{Fz6&I=U5
> zci`{E at 1LC4m;3(Yp1(JPBVY*}00ZDGuorZLuffxcU%y+yD}eC$dx7}>-vz{<-;aUt
> z`=ayzD{wh at 3g`t70(ZdQ|0{SEkURe_1tlQo3X0%ja5A_%_%8hat>Eq8ZQv~MaPar=
> z|6Smlw2idSdt!0`Sw<{_Y4lXwg5#IPxVOYcWfne_n|~RO*sod%X})wgIO2reu<s9{
> z)*Bb=q%oY~4x^@=I=9V;Wn<5WCMG6_r~G{bV^bp{mUS}i#!PxHw_L)GTCO{Gn64}a
> z$1F72$Me at Z^L(QCU2_217MG2Dc&NI~bD7`BNWl~=WJc6d!8|kO3YHoW+G>|#%sMM@
> zTNWvr at p^HofgxI(r-q{FgLTIXdxst?nUj4W?Hz6?R;sxr<+rsLAh^)m=ly_PS1vk~
> z8ZL?37+hXs)e)qg+#>4s#@Rer9d($W)5pTyVzi?OPmEfwMzrJ8BNu27J0Sj_&z~GP
> zC?!Sop#4gOobqWD{=n$uq}57Wk?XnP-2mnt9UHHGBLmZGB{eiQaKPl9N=aY&(-Zy(
> zs)co>10yv#JYv-4*~zVyOh}1Tbf-G0cjFV|rhrB=+$wClRTLPhODHAw>eXDiR+0e_
> z_L1lgsYEp0#>cx(n_&P96Np7merfeYbaX7-bM+jonE2w9mRFO(P-rOvOXN%Xzd3V|
> z?Rh}hWKMB95^?R@%S-A?%np=VgU)TTlwOOhL`xHP?{Y?`cDZ(I6~0^+w-c5Xh@^bB
> zN`_`qx$IB2U7wAd9YvmIM_WtL*^ooJ<l=Qkb-1H-$8k&|jiffYHrPbX<BKl2cyn>n
> z;VpXuscuj*m#tZsLz_)u7iV79)S~66d6uk<0XG?|a41&{CAVp2^Aa^iv(9ucAt7YP
> zmt;HBy~N1S(K^T6?o#*qg37`pm%GR=#u0?-P3@(UiYip3sh1$u)Nes$xr(n!PWuGP
> zLiJ29f{GSh;bhP%6~bZ1)<HX(p$&^#{2a at 1h%QZ=*=0<|bevI+Mn~x1MhjpDNkaN{
> zBHhH;p_(~R6YgT5^dX%&j68 at b0aa)fRjVOnI6GkZeTmdC5O?~atTgI8Jdz*@vIgWf
> z^4s`=Y$q)Zvi6j<$xfhQp+s;H&RR$Z%)ITTK8<FpWI!jJY19r!IL&A>4}-~B1sZc)
> zhv19U*|=1ZL!I(pcY|Y{=^Wx)9g{;a2gJ*loCK{y9@)ROgof?S4^|Q`{h`?qXf~LG
> z(*-_Wl5{p8iIzTHs$^~5TM&-5#?m52_qMHL9=*<zy{)$9<6eROYx=Tyj#u5@=&&kL
> ztfp^tSXFr=<MtvaYY<`vv72(Jc8t`Ga1?<q(*BT(HC2u)H4b0)^=>+M&}<4qdlTn%
> zPj~FKN^NZ1-S}&ew}DYfm}FO9vpD)T6{o*h6nUA75tUoEB~h8=xe4r2$kI2u^(7#@
> z_1R}A;KpdyS~ik*R at i>QI>N16s8faiAAslomGGA6{}(L(|1<b}vH$-B_-i1301kpv
> zf!qV|@8Dm-o53pB4^9F11a}8_17ZhoE!YBn3Xgv?_*?LLPzQnE|A+DWp+Ic>zYM+v
> z{svqO9tLiPxBm<9L~w8L5%~HKgO`I6I30Wo-u_LX3eEweU_aOgc7ksRUk`2tZvvv*
> z7k+;?*afzNZ^PSv6MPbgjsMl)Y2c}#20B1H5TE|vfX9D35WfM}f at gxuz!QP!{7(j-
> zfwzARr~%>s&jn|I- at x17288E-7q}EGf&E|~5Z?cL at ckbLH-R^TRnQK^CP3QimoZs@
> zZM0+kGI9aDNn*sy&Kg-kpY%t&K!+WL;bV^mHFBYe*-m<LGEZ1LO$Rn6K&o9fnvzC|
> z$(<?2URVr|M<#K$EZ0Ca^CsLS&RPgjl~dPT)?5?&W#iYSwoshY8+}v`qW{S|`-81m
> z8)G9N!A?{^1lI+cl}ioy!zgB$L8vq3E at DG7aT8;*wnPhFK+Jxzm2m!txLQbAkU7p2
> zCb!4K2P0=FR*=qIc2VcWus805uH=Jm-A#t;d#uh^aadeRf2Elv=1Y~CFy-!xF@|tc
> z?!K6i=t$f^<Q5OqW!ZpOC<+-5)v2Kj;}n)GiZWYVyr{=qwQ{-UDfv2|7?bA~vFGAo
> zHg!TLn8GL<$k&t2wZt-rBCwNa6eFxfFbp#H8(}Eh&T+3fVn|=8W^<Wob&K6apmUoG
> ze0Rmn5!idnJ89V%-y`NHoB-g)sjT2SauP9IwQMq14ew}~!{Q`Q^ob^1Uj|n_WY<$R
> z!)U)KqPIzchg;D|Dzpx!+0|+}rV3j4c00jn$!&EYd$?susqjVWhhq~t*x9(unozWX
> zS0ky6vNMG`heZ>zGg~|>BMYPs)|r787e0?7$Wakx3eC^mfryp)fLmAO_2$ja#2oI1
> zFY}n1!xJWmuf|3u<%EeA%0x_7UU=8_%Jwz|B}N=$=By~^6e-9w{jseP at pxLebU2r1
> zNC`H@&p;zq!4S-q2c at DLFS6-8owAwi6Xsgxp||dnomLv#P{5oyf24#qCyHN5)K at ym
> z!0<4p(^LK=7ncl=j_>zJ#s>yDkTZ$of4^BT60ws1HcRC^NyWROMdR3hV)PP${L$Eo
> zU154`qrw~tlhM7hA*!U)*}+*X-`Y0gyvlU at gSds2dw<7A2B_O~=3;RywSX3*s at F_L
> zO8vhEEk?&r2rX<fX<Bg9XiZwQ#B?=y!y!_sB03 at 6BRGx3JB$><ckzgw#&<;t(>}Si
> zlDNtDaV1d9KyYHIP~Jbbb at +m=PPIrkTR$i3&JME0w69>S+C^U_RyihK7$u%#Pe(Np
> zT2rJ at fGxe)NxP?`-Z&iFEPEEt4a6g9*_2X3{jICLkesK(tt1Bec*kKSE{bWa-fO8Q
> zhhAk_uIoYOMx)7fNP)S0U?Ok-Zx_3Kxwl46<t2+<Yh3KGuGBkAgzqR|LM2}?*hIsJ
> z?ncZh0}T)pGMO7beFg#JVKWgpM2ro*<hT=G%mYTv;S!!W#igKw+Bl=(SVc#Xl}ps6
> z8|M-#JnXnP`5Rq|Q~X#JA(Za at V_l<Zt?X=)S;!MuEhn2~z3eNgSYYFy)v%TdMss_)
> zv}CN3JseNW)CueOS0Re<|FFI-Pk^r!{{QKghkOfszWDz;AIO>i`-1Po(|-`W1{?ts
> zK=k|K&;Lg7O0WO|d;gycPY=Eh#E1Voz)L_L%z&NX3?S$GKMy_!-VOd7<bd%1PX_0K
> zec&vx1w0l!5ZoW!58NC48*+ia2Co3ugFMKAJ|I5+9|Rr<P6Gdoyg=j!F9S~pPXl5r
> za29w7_&)LiIXCcn at LcdLa2+@b{uEpcM6U2K at P8rRhk@J`_*(E>Am<034Xy$cKx_<l
> z0P#QgQ)CA>f%kxS0l7O+<O>zh5Bk94z<(k?crNG$pG9WyKJZTPI&dv`IuKieNpKKM
> zfK$Q!!KaZQ+ycaR;Wc0u%zzx|0Z#y*qrGnhH-hH^Id?D%`avs@{%|G;KB9uHq3HK8
> zvFz9GWB(5ihpB>1RTTA_Trn>G;jqHh9Ul|AoF9_u5VvVMJ8~8PlX-bEBgU6jl<qJ#
> z>#=M!if*|&HYlF1PjUIVn55U$*_)`h5u-P{M%7wo8tt|ux=HlTe!Ujo>{6NY3*HJ2
> zV`Ks0 at R!ztboB~Vaq=tv*EsL2YetLAtyYa;Nv1B{TxWYxt)UyV%gtKiwR_<;v$}n2
> z_s%qFC{=~|T%+zzdvK}IDho!j<Z_8IB8Sxs5|(pcK`hRM+2UL4*nA0-e{TVai`Q%1
> z;fXfn%9hi)`HiJd7IEJ%_VoApzGqhbI2F|K;4XrfYK65(bb4`)Jw})w!O6>$k9e&Y
> zSA3$Uh2!xgLp}8d55!NewpyzfxGiOr6E6j>bJn)90x2QRr8wi7 at 9?HL6)%z>o1Ua}
> zl#=)Lw(HTlN|`e&)xu(~ST@;OQmiZ#>BRH+xt^<579F-cXh##hr+Z7!Hd9VH3R9}o
> z>buAn7w|d=%mC1&A=+q=wJkgL*bEXm^3c<*Ri$%DC&PFJ$JXXFilnMn+|5eKCA_vv
> zK%B}PrT*=7GO<iKwhlIW-k{R>?5XpkK6c>H)U<7puqiA(bf%C&g<xT>S}3&Y__mB?
> zRLO+(xduXsS`%S}2F4CO{!m+XtptoHBawi8h;^?k3^4P~EWQBh1uJJTkC;UDM>yUh
> zQHUKPwqRnPv|N*Ih}odo$0j?rHNj~Qw{f%U?G)SdVyTmiy+jhDD7mGgZjS)RD6x{$
> z%VH2kRM|WRgmY3A4kcDRdq^Oh`(l|&m7u?*YK|L4o6trS2#fvOslDetK1P6<<=SeZ
> zf<{yC at rl(<Dilz(x?C<pujrI=j70JnLNp~&!=!`8N{Zz)g1@}PgeV?)qyuGkK4a1&
> zEf97?I<HX<Co)Y|M_SK{yAvU!n&WVPxgZBVvc`n#ciWUVdq|i`UdEI--erc9+Q_0C
> z(6_cc!!1Vj!mLjD)69FzO9&Y`bG*vmTuEm5RdZV>2RL-IVP;$vNTRJ at Mu~4|#ad at 7
> z&um`t3P+2o1<=wtBP}`S=mj*gOLx2Nt`>=|XN1kTjrF8RTx*Hv%t>KaGSA4^N~sc8
> z2iWnG{nC!SMAL*cGc6-2B&Lm2!I}<l;@cd;0cne)e#rxu>&jkEPhN;Y`q;z}=BED0
> z<fNS{+Pxut8t<RRtkO)Rngg3VGhc at 7kkzNkg%z8Q7DFQG54U&Y)X%19+j@<g1{-Op
> zPPn at 3z{v3EfX`{Q=@Eb5*rBPjy({b`rGq2;N5}m^Ih+;PlPP_<#*x8ABOGTHL{Zd0
> zX~!M}(S-Hhg_InRm+H(oSM$1%#Tx%XGnG2$dD+0AYU2fmdc7_ku8n9Gsi}1FY!ocg
> z&4|vZ`{Jg7jkkdHCDnD}lImPfQjKq)ZS9n6rF&33Uct$IYt^+y^oX)&o*F$c-0$(q
> zyphvGX0sdGJT$7W(RVgWx2rFeuJHe`m at SVKUJw5ND$DTQ0l)t>@Kta-_yBktm;t+i
> z_yLgf0H=XJ0$)ZJAZG!t1D68v`PTuygFN7GKn^_F$_DPi_sQT3 at cy3zp9MF89Poko
> z{(BtwWAJHs`#KOAfbjof|Nr0c at Zt+#6)XYa^Pd8`z(c`*z{7tC90kJH7r+SE4897_
> zF1`W&9ozyw0<Hzm0G9yq3Ah`a0pvb`- at vmAkN*Sk8E_+bKX at N_3pfmlU>t}&fd}pd
> z?tq8?I`}M*a|G`L!t=iyh#!H&pa?DmXM&T#4`_&g1g``y24Yk2XW$yJ0!{^w0Y8Pu
> z{}d2ez?DG!30?*k!4rVk82l0*U*rI91kVM}0nY|c1?Pcja4NW+c7Gkn0qFyBe}R4+
> zD>l*evG(RwsUF(4g-`wb3|8(i9x<n>CWb6CVGPwhv05;XhbMyl;9*88!K+vzwbgPy
> zmVi9Sh%Ap|5zR(C7S%k;h-_ZOqO-ol;_`n+M4m=l9-)v~jKt}|3<T7z7`AUmiWtNd
> zXWLp>69>k;)c)VDr1ln_VtGz)0<?1 at T5eSN;npCUG4+KMItqw7KRaNT8WBVR(dcIf
> z>?B}(y%l#iPRTM?-B4qQOvRWNV9 at QVyf@j+mPn1Z>`l}`iW0=4u3DvxfTnU`KwG7Z
> zfTnU`K&euAG}NgH**gCvt1YeRylzl!Y06D*GHX)85F*@Bn>Eci(W8{fa%NoW)!@8!
> zybnn{T}vJJeB2O$XgpwJlHt=AL9H_*_c|!ef|c&_L?6OXxgd9JTY at qvG@xf_U=jKL
> zjYdmsUu|sewU*G$@+T>3&dAjj$*LOX4h<=j8HZX*FA}~ts$_geEmt{_Tc%B~91w77
> zuZJ{_hXj`IaBc^cQpE at p-GHeZ#@~6`#3^%ZM6uI~rHaa_Q_D|NcNB6}sL}j~N4^68
> z6A7|9{VhB#<}^bX-HbXKC1er<Uk)eAntjbVB31H;)k_ZrEwAa=884}aba{Knsw?TM
> zV0Rb4YSl8L$JOB))XAC(sW<U}ABx}EdJq9seNMEnaxlX1rlALr at Qz4njnM4qPEq5y
> zW{q_1%xt^v>KVJ2J6XG6qRwt?d23rcoZ!T*vq(|g>_znA&NoeFJ!c7B&y4RJGmN|+
> zs7+=tLS=PGx`yYGSyH1y&2wdy%0*>rnXlIaL0%|%p$eOrGf?#~UmMxJOruuH&vw=R
> zQq9di`)R|1096<?!Mad9VT)v{oGat)ng_ErNz`g767qUA7+_P!S>2fucg4VNt0by+
> zxVWVBHK$9ATE%KJ2r~!SQ?CQHMupo<y}8_BamiQqIQmN_l;?1vph;2~KB99F!C_9M
> zxbj*WGhH}UW{ge{v|O)NO3)!EuAjt$2 at Z82pC@^nz~Gd6PRUNkYKkaWPoJtk+C^d!
> zQgx|bbuRV^luqoP>SDZSrAwxb!m~l~)y+0+qh<|f9 at Agh?R1JwZup<M;xR7Dw30V0
> zjAY$rGNi;o(W0WWvRuv`boaU!L}mD(3e-fiREN9_FOx9RC)q$3ju!H3>LE?kxDc$}
> z-9;m`3>B*=91&X<^2=OhD@~fzJ__a1om}|;AsD{x*8acGvVZS at r<Zg8!rQ+HK7PpZ
> z at -KsLKLAbw{|0~lY_J1-7rtC<_Rj}Df(L&!=m2kp=axJBP6BU$pBDdn;%8rU<8mk8
> z$KiWLAO1#A1)}@D10MHzU>~>_5Z(7OkaP0|FbhV&kKkWF07S3-2=GOCSJ7qf2M+-E
> z0djU;?%S&Xsbe2F0UvF4Y4@;cWo{emq2Hz-hMHGt0yEj-oM>?1!s*F@(J_CzHDU;Z
> z&3Js%V*F{QxMt&>Jk5P8-yFFvms~}7qziY<Noq1*BdtzUz}$Y4u9$hQ&e3hX64VH9
> zJSwR3{zS46h5dhE8z^eSbSjSaI+4Hg#*~0r7zLu(AR)S}dBr0$hSpA*mQcI;xqQ8d
> z)4_N%Id6=!_jFNY%mxm(?EDdH>C}5Sp|CY2l)Y%FUKL}yNDdNzWkd at u$rA5{VCw!)
> zXP<TTLMKXCps1_F3KKofka0LK!z5)-=s4VpcPv`M^enS2PZL+hj at um)&69jBr0q|q
> z;`E6`0?wO1*xr&sux3+M*s at 9a-JP3@vb*fsQ;e40cCx|AiGgAD-<;}ZVZWBq;s|SE
> zojdU^d#E{)rKg1n3(cH&v4j)v(g`O5#1c+RMC8bXJ40lKNN17`7RyK3)}RW8fr#aj
> z at jjhLGLX*Wv25Z at e6lL3x9Ke6L1Jk;WXz~Q>TNphc#v4ydNhW~2;(%d6iJW<PBD6y
> zPB#%bmT)X;EZNwbbfU4>u_UA2WXiBDmO+zn>Fk;WZjgC=E88IFc%Ww4#zSW0nIXtG
> zg?7dH?$YVL%}6h1E0IzB*!xB$j|IxeL`@zt5;vE9>mDv$WPO>DSW*{ZDi~@c(g~?r
> zA~A~v&Mw_4Mg~T(%SrDmowu<<>4v~sjK`|zzA%J~?U~%yu>{SzxmZ%>QAQ%>MJ#%n
> z)((|pB}fz4jC at QOW4VV<GYSyCi<QAVMQeswz@@PBykS}zD<d at +XSDI@)bx47)bwpE
> zwS*U(Sc-{v8L1{h#8MUuo#1F)ELrzOMw;&HSb{3(!!WH(2)Urq93+e-of#w}kIZnf
> z%wmo<VtK^gWTYK?A4^l08adG!oRW;Cn|hm(b}CFfeW5r$yTp*r;U<)z`Zz1aFpfF@
> zFaGK83*RmJf8-tdk^BE%1+D~VgZqF_AOpAoh+cmS_#b2dH-lG$IuN<Q1HhM%2fPYA
> z16%{H21kJS`Tr;612=-#0`c$vMPvlx+y4r10XQA}G5BZX1=oTx at O5Mc&jWH-pWM^;
> zRpbV52hRgjK>YK6hw^_4d;*9};e+6M at H{XBwt*)A(X~GcJOVr%XuWNnH at -F~ut9+h
> z3jCo`Ko*T+UN%TZff8v^RhDM|wP)!(K27d%3hvPfR7g#N26y5hnh&i6Qa8fEfa7G)
> z=gPW59zBg*ASHi7o0725Qm*)iO at q~G#-GP;0`3p5wlZrcKB{W9t_JRyeycYD%XVJu
> zpRMci^_?T192v*|<gtde`p4$}u{dH_>y#te{r-*)dzv*8-}wt at 3%QO9st2y|`g(B-
> zmZ*jLbM5Kosx7bcsCyQwY1$>Rr&v4bWSUKyYft2_EU1cv78hmqfBXkfcyZC-x*14y
> z7wuxU at EoT$ebvt+=2a_v?mLTwNO4(is~a`A@=@wp^Ee~bje(BTr)O?X?L+klP*3O1
> z?k+iHhBq43G1`osJ0VT%?O|jmc6aB_?QZ12b&YA&z-zVYI(yu*1#c)@P0O^ML{%lI
> zh3ebc>85In6kYykZqg&N`61ibR2VZ&gf7JQ4GfLg>#ihtcyVxNXkB6a%%xjH%Pn%^
> z<gk{jggb at 0*)O4&=`FVPje>HGrdNBic=z!(NiyVPZ73oa7@;bYe&xIjd{Ef?^|TY3
> zXHxUf3`!K#q6|0pdS1?}H9t{Y;-R4|*NXFHjzi=ZIKStpEmgB_+NP~VhHG%+3mizK
> z?CEb{kP~U!F?!m>=y$aDiLoD7VYV3EK)M=@=k55+ox0Jp+05->&7NE0bOIGeh3(fx
> z18=p^Ube4~&{)H9S{iF?(@YIxr)r<Bsys>h@@qDOHw%4ib9nqlSZC5sPuZ#pZ$iD}
> zok~;f=gv9Dd{=<3O#d6RXgCF%yLV-r{%%c at X*xq_(f>am{<#icE&PAC-TeLreqZhY
> zd<~cdd%@$tPvQH248;Hco4^ae^<V`&3ABP=AOjG;0B-=#0+)c@;Gy6r$N)YHJ_5w|
> zzt|4+gNJ|zg9m|=z`r9K5PJgg|Nkf8LEtvz0&fM^fs26H7s%xWzeYyzDzFVa9DISg
> zycB4i{!lmb8};6xzy<|2D6m0+4GR2 at QNWnM84e>Q=uxSTF at rO=MMVsxWe$aV4))*j
> z$k>6)d3Km|yk&@3$S{}2Z=9Is%C)n8saTdH at zo+1W{aN~v1Yc%T=NSR%yzx=xC&?g
> zxZmC4 at R}~G3GZl*CyRMZSO_aH63&uz?KLo#j|<<egRxAd*mhSlmTU2kw2^X!b-n#;
> zE$@0k=q0(7I$QJ<u|7fI*}_tN-GSE~aAmFR8^{yaiWc(HhEHC1aO9R^fo|>A>0Zq~
> zhJ)h{NR71aJWT(Oaqg;Nk1RpAW%KSai(+NRtwcyu<em!SYw-eq>d>S}WW>cNRWJis
> zMHu2tRg|;%F2Z}S+SnyVrLBvtlO;rKnBqN2F0?b|k=2#pl3?QwP at L|~R@|%X$&ria
> z&obgKBSHw~3wkS;+TeSa(WsZ#O^=R^h%agX!UF^6*z1CjJ(=l2LgNzEj8|f)eA_wI
> zVfwxtl`~GMB{BcPz);ssB|Fax)|;o8w`FE_fjb=@Gea!3?CH=kN$t!xZmXjivKKFL
> za=@1h4!Db2oJ8W`Key_0L~jw#SwzxvRHml!z}ypcq{u<o!qK`3siWD*rbN1D at -`2-
> zsaJ-2{G}tXv~TEGCSD+I#JyuYPF!SRI#wWRj%pPx8yRxPcz+2N6H{%uB1H~2L|y}J
> TM~MXsUQ45yf$)2|lC}JQDEuA8
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/src/intel/intel_defines.h b/src/intel/intel_defines.h
> index 02ffde4..b424233 100644
> --- a/src/intel/intel_defines.h
> +++ b/src/intel/intel_defines.h
> @@ -87,6 +87,7 @@
>  
>  #define PIPELINE_SELECT_3D              0
>  #define PIPELINE_SELECT_MEDIA           1
> +#define PIPELINE_SELECT_GPGPU           2
>  
>  #define UF0_CS_REALLOC                  (1 << 13)
>  #define UF0_VFE_REALLOC                 (1 << 12)
> diff --git a/src/intel/intel_gpgpu.c b/src/intel/intel_gpgpu.c
> index eedfe31..6d3c443 100644
> --- a/src/intel/intel_gpgpu.c
> +++ b/src/intel/intel_gpgpu.c
> @@ -58,16 +58,9 @@
>  /* Stores both binding tables and surface states */
>  typedef struct surface_heap {
>    uint32_t binding_table[256];
> -  char surface[256][sizeof(gen6_surface_state_t)];
> +  char surface[256*sizeof(gen_surface_state_t)];
>  } surface_heap_t;
>  
> -/* Stores both binding tables and surface states */
> -typedef struct surface_heap_gen8 {
> -  uint32_t binding_table[256];
> -  char surface[256][sizeof(gen8_surface_state_t)];
> -} surface_heap_gen8_t;
> -
> -
>  typedef struct intel_event {
>    drm_intel_bo *buffer;
>    drm_intel_bo *ts_buf;
> @@ -142,6 +135,14 @@ intel_gpgpu_post_action_t *intel_gpgpu_post_action = NULL;
>  typedef uint64_t (intel_gpgpu_read_ts_reg_t)(drm_intel_bufmgr *bufmgr);
>  intel_gpgpu_read_ts_reg_t *intel_gpgpu_read_ts_reg = NULL;
>  
> +
> +typedef void (intel_gpgpu_set_base_address_t)(intel_gpgpu_t *gpgpu);
> +intel_gpgpu_set_base_address_t *intel_gpgpu_set_base_address = NULL;
> +
> +typedef void (intel_gpgpu_setup_bti_t)(intel_gpgpu_t *gpgpu, drm_intel_bo *buf, uint32_t internal_offset,
> +                                       uint32_t size, unsigned char index, uint32_t format);
> +intel_gpgpu_setup_bti_t *intel_gpgpu_setup_bti = NULL;
> +
>  static void
>  intel_gpgpu_sync(void *buf)
>  {
> @@ -234,7 +235,7 @@ intel_gpgpu_get_cache_ctrl_gen8()
>  }
>  
>  static void
> -intel_gpgpu_set_base_address(intel_gpgpu_t *gpgpu)
> +intel_gpgpu_set_base_address_gen7(intel_gpgpu_t *gpgpu)
>  {
>    const uint32_t def_cc = cl_gpgpu_get_cache_ctrl(); /* default Cache Control value */
>    BEGIN_BATCH(gpgpu->batch, 10);
> @@ -272,6 +273,58 @@ intel_gpgpu_set_base_address(intel_gpgpu_t *gpgpu)
>    ADVANCE_BATCH(gpgpu->batch);
>  }
>  
> +static void
> +intel_gpgpu_set_base_address_gen8(intel_gpgpu_t *gpgpu)
> +{
> +    const uint32_t def_cc = cl_gpgpu_get_cache_ctrl(); /* default Cache Control value */
> +    BEGIN_BATCH(gpgpu->batch, 16);
> +    OUT_BATCH(gpgpu->batch, CMD_STATE_BASE_ADDRESS | 14);
> +    /* 0, Gen State Mem Obj CC, Stateless Mem Obj CC, Stateless Access Write Back */
> +    OUT_BATCH(gpgpu->batch, 0 | (def_cc << 4) | (0 << 1)| BASE_ADDRESS_MODIFY);    /* General State Base Addr   */
> +    OUT_BATCH(gpgpu->batch, 0);
> +    OUT_BATCH(gpgpu->batch, 0 | (def_cc << 16));
> +    /* 0, State Mem Obj CC */
> +    /* We use a state base address for the surface heap since IVB clamp the
> +     * binding table pointer at 11 bits. So, we cannot use pointers directly while
> +     * using the surface heap
> +     */
> +    assert(gpgpu->aux_offset.surface_heap_offset % 4096 == 0);
> +    OUT_RELOC(gpgpu->batch, gpgpu->aux_buf.bo,
> +              I915_GEM_DOMAIN_SAMPLER,
> +              I915_GEM_DOMAIN_SAMPLER,
> +              gpgpu->aux_offset.surface_heap_offset + (0 | (def_cc << 4) | (0 << 1)| BASE_ADDRESS_MODIFY));
> +    OUT_BATCH(gpgpu->batch, 0);
> +    OUT_RELOC(gpgpu->batch, gpgpu->aux_buf.bo,
> +              I915_GEM_DOMAIN_RENDER,
> +              I915_GEM_DOMAIN_RENDER,
> +              (0 | (def_cc << 4) | (0 << 1)| BASE_ADDRESS_MODIFY)); /* Dynamic State Base Addr */
> +    OUT_BATCH(gpgpu->batch, 0);
> +    OUT_BATCH(gpgpu->batch, 0 | (def_cc << 4) | BASE_ADDRESS_MODIFY); /* Indirect Obj Base Addr */
> +    OUT_BATCH(gpgpu->batch, 0);
> +    //OUT_BATCH(gpgpu->batch, 0 | (def_cc << 4) | BASE_ADDRESS_MODIFY); /* Instruction Base Addr  */
> +    OUT_RELOC(gpgpu->batch, (drm_intel_bo *)gpgpu->ker->bo,
> +              I915_GEM_DOMAIN_INSTRUCTION,
> +              I915_GEM_DOMAIN_INSTRUCTION,
> +              0 + (0 | (def_cc << 4) | (0 << 1)| BASE_ADDRESS_MODIFY));
> +    OUT_BATCH(gpgpu->batch, 0);
> +    /* If we output an AUB file, we limit the total size to 64MB */
> +#if USE_FULSIM
> +    OUT_BATCH(gpgpu->batch, 0x04000000 | BASE_ADDRESS_MODIFY); /* General State Access Upper Bound */
> +    OUT_BATCH(gpgpu->batch, 0x04000000 | BASE_ADDRESS_MODIFY); /* Dynamic State Access Upper Bound */
> +    OUT_BATCH(gpgpu->batch, 0x04000000 | BASE_ADDRESS_MODIFY); /* Indirect Obj Access Upper Bound */
> +    OUT_BATCH(gpgpu->batch, 0x04000000 | BASE_ADDRESS_MODIFY); /* Instruction Access Upper Bound */
> +#else
> +    OUT_BATCH(gpgpu->batch, 0xfffff000 | BASE_ADDRESS_MODIFY);
> +    /* According to mesa i965 driver code, we must set the dynamic state access upper bound
> +     * to a valid bound value, otherwise, the border color pointer may be rejected and you
> +     * may get incorrect border color. This is a known hardware bug. */
> +    OUT_BATCH(gpgpu->batch, 0xfffff000 | BASE_ADDRESS_MODIFY);
> +    OUT_BATCH(gpgpu->batch, 0xfffff000 | BASE_ADDRESS_MODIFY);
> +    OUT_BATCH(gpgpu->batch, 0xfffff000 | BASE_ADDRESS_MODIFY);
> +#endif /* USE_FULSIM */
> +    ADVANCE_BATCH(gpgpu->batch);
> +}
> +
>  uint32_t intel_gpgpu_get_scratch_index_gen7(uint32_t size) {
>    return size / 1024 - 1;
>  }
> @@ -702,86 +755,28 @@ intel_gpgpu_set_buf_reloc_gen7(intel_gpgpu_t *gpgpu, int32_t index, dri_bo* obj_
>  }
>  
>  static dri_bo*
> -intel_gpgpu_alloc_constant_buffer_gen7(intel_gpgpu_t *gpgpu, uint32_t size, uint8_t bti)
> +intel_gpgpu_alloc_constant_buffer(intel_gpgpu_t *gpgpu, uint32_t size, uint8_t bti)
>  {
> -  uint32_t s = size - 1;
> -  assert(size != 0);
> -
> -  surface_heap_t *heap = gpgpu->aux_buf.bo->virtual + gpgpu->aux_offset.surface_heap_offset;
> -  gen7_surface_state_t *ss2 = (gen7_surface_state_t *) heap->surface[bti];
> -  memset(ss2, 0, sizeof(gen7_surface_state_t));
> -  ss2->ss0.surface_type = I965_SURFACE_BUFFER;
> -  ss2->ss0.surface_format = I965_SURFACEFORMAT_R32G32B32A32_UINT;
> -  ss2->ss2.width  = s & 0x7f;            /* bits 6:0 of sz */
> -  ss2->ss2.height = (s >> 7) & 0x3fff;   /* bits 20:7 of sz */
> -  ss2->ss3.depth  = (s >> 21) & 0x3ff;   /* bits 30:21 of sz */
> -  ss2->ss5.cache_control = cl_gpgpu_get_cache_ctrl();
> -  heap->binding_table[bti] = offsetof(surface_heap_t, surface) + bti* sizeof(gen7_surface_state_t);
> -
>    if(gpgpu->constant_b.bo)
>      dri_bo_unreference(gpgpu->constant_b.bo);
> -  gpgpu->constant_b.bo = drm_intel_bo_alloc(gpgpu->drv->bufmgr, "CONSTANT_BUFFER", s, 64);
> +  gpgpu->constant_b.bo = drm_intel_bo_alloc(gpgpu->drv->bufmgr, "CONSTANT_BUFFER", size, 64);
>    if (gpgpu->constant_b.bo == NULL)
>      return NULL;
> -  ss2->ss1.base_addr = gpgpu->constant_b.bo->offset;
> -  dri_bo_emit_reloc(gpgpu->aux_buf.bo,
> -                      I915_GEM_DOMAIN_RENDER,
> -                      I915_GEM_DOMAIN_RENDER,
> -                      0,
> -                      gpgpu->aux_offset.surface_heap_offset +
> -                      heap->binding_table[bti] +
> -                      offsetof(gen7_surface_state_t, ss1),
> -                      gpgpu->constant_b.bo);
> -  return gpgpu->constant_b.bo;
> -}
> -
> -static dri_bo*
> -intel_gpgpu_alloc_constant_buffer_gen75(intel_gpgpu_t *gpgpu, uint32_t size, uint8_t bti)
> -{
> -  uint32_t s = size - 1;
> -  assert(size != 0);
> -
> -  surface_heap_t *heap = gpgpu->aux_buf.bo->virtual + gpgpu->aux_offset.surface_heap_offset;
> -  gen7_surface_state_t *ss2 = (gen7_surface_state_t *) heap->surface[bti];
> -  memset(ss2, 0, sizeof(gen7_surface_state_t));
> -  ss2->ss0.surface_type = I965_SURFACE_BUFFER;
> -  ss2->ss0.surface_format = I965_SURFACEFORMAT_R32G32B32A32_UINT;
> -  ss2->ss2.width  = s & 0x7f;            /* bits 6:0 of sz */
> -  ss2->ss2.height = (s >> 7) & 0x3fff;   /* bits 20:7 of sz */
> -  ss2->ss3.depth  = (s >> 21) & 0x3ff;   /* bits 30:21 of sz */
> -  ss2->ss5.cache_control = cl_gpgpu_get_cache_ctrl();
> -  ss2->ss7.shader_r = I965_SURCHAN_SELECT_RED;
> -  ss2->ss7.shader_g = I965_SURCHAN_SELECT_GREEN;
> -  ss2->ss7.shader_b = I965_SURCHAN_SELECT_BLUE;
> -  ss2->ss7.shader_a = I965_SURCHAN_SELECT_ALPHA;
> -  heap->binding_table[bti] = offsetof(surface_heap_t, surface) + bti* sizeof(gen7_surface_state_t);
>  
> -  if(gpgpu->constant_b.bo)
> -    dri_bo_unreference(gpgpu->constant_b.bo);
> -  gpgpu->constant_b.bo = drm_intel_bo_alloc(gpgpu->drv->bufmgr, "CONSTANT_BUFFER", s, 64);
> -  if (gpgpu->constant_b.bo == NULL)
> -    return NULL;
> -  ss2->ss1.base_addr = gpgpu->constant_b.bo->offset;
> -  dri_bo_emit_reloc(gpgpu->aux_buf.bo,
> -                      I915_GEM_DOMAIN_RENDER,
> -                      I915_GEM_DOMAIN_RENDER,
> -                      0,
> -                      gpgpu->aux_offset.surface_heap_offset +
> -                      heap->binding_table[bti] +
> -                      offsetof(gen7_surface_state_t, ss1),
> -                      gpgpu->constant_b.bo);
> +  intel_gpgpu_setup_bti(gpgpu, gpgpu->constant_b.bo, 0, size, bti, I965_SURFACEFORMAT_R32G32B32A32_UINT);
>    return gpgpu->constant_b.bo;
>  }
>  
>  static void
> -intel_gpgpu_setup_bti(intel_gpgpu_t *gpgpu, drm_intel_bo *buf, uint32_t internal_offset, uint32_t size, unsigned char index)
> +intel_gpgpu_setup_bti_gen7(intel_gpgpu_t *gpgpu, drm_intel_bo *buf, uint32_t internal_offset,
> +                                   uint32_t size, unsigned char index, uint32_t format)
>  {
>    uint32_t s = size - 1;
>    surface_heap_t *heap = gpgpu->aux_buf.bo->virtual + gpgpu->aux_offset.surface_heap_offset;
> -  gen7_surface_state_t *ss0 = (gen7_surface_state_t *) heap->surface[index];
> +  gen7_surface_state_t *ss0 = (gen7_surface_state_t *) &heap->surface[index * sizeof(gen7_surface_state_t)];
>    memset(ss0, 0, sizeof(gen7_surface_state_t));
>    ss0->ss0.surface_type = I965_SURFACE_BUFFER;
> -  ss0->ss0.surface_format = I965_SURFACEFORMAT_RAW;
> +  ss0->ss0.surface_format = format;
>    ss0->ss2.width  = s & 0x7f;   /* bits 6:0 of sz */
>    ss0->ss2.height = (s >> 7) & 0x3fff; /* bits 20:7 of sz */
>    ss0->ss3.depth  = (s >> 21) & 0x3ff; /* bits 30:21 of sz */
> @@ -800,15 +795,15 @@ intel_gpgpu_setup_bti(intel_gpgpu_t *gpgpu, drm_intel_bo *buf, uint32_t internal
>  }
>  
>  static void
> -intel_gpgpu_setup_bti_gen8(intel_gpgpu_t *gpgpu, drm_intel_bo *buf,
> -                           uint32_t internal_offset, uint32_t size, unsigned char index)
> +intel_gpgpu_setup_bti_gen8(intel_gpgpu_t *gpgpu, drm_intel_bo *buf, uint32_t internal_offset,
> +                                   uint32_t size, unsigned char index, uint32_t format)
>  {
>    uint32_t s = size - 1;
> -  surface_heap_gen8_t *heap = gpgpu->aux_buf.bo->virtual + gpgpu->aux_offset.surface_heap_offset;
> -  gen8_surface_state_t *ss0 = (gen8_surface_state_t *) heap->surface[index];
> +  surface_heap_t *heap = gpgpu->aux_buf.bo->virtual + gpgpu->aux_offset.surface_heap_offset;
> +  gen8_surface_state_t *ss0 = (gen8_surface_state_t *) &heap->surface[index * sizeof(gen8_surface_state_t)];
>    memset(ss0, 0, sizeof(gen8_surface_state_t));
>    ss0->ss0.surface_type = I965_SURFACE_BUFFER;
> -  ss0->ss0.surface_format = I965_SURFACEFORMAT_RAW;
> +  ss0->ss0.surface_format = format;
>    ss0->ss2.width  = s & 0x7f;   /* bits 6:0 of sz */
>    assert(ss0->ss2.width & 0x03);
>    ss0->ss2.height = (s >> 7) & 0x3fff; /* bits 20:7 of sz */
> @@ -889,7 +884,7 @@ intel_gpgpu_bind_image_gen7(intel_gpgpu_t *gpgpu,
>                                int32_t tiling)
>  {
>    surface_heap_t *heap = gpgpu->aux_buf.bo->virtual + gpgpu->aux_offset.surface_heap_offset;
> -  gen7_surface_state_t *ss = (gen7_surface_state_t *) heap->surface[index];
> +  gen7_surface_state_t *ss = (gen7_surface_state_t *) &heap->surface[index * sizeof(gen7_surface_state_t)];
>  
>    memset(ss, 0, sizeof(*ss));
>    ss->ss0.vertical_line_stride = 0; // always choose VALIGN_2
> @@ -935,7 +930,7 @@ intel_gpgpu_bind_image_gen75(intel_gpgpu_t *gpgpu,
>                                int32_t tiling)
>  {
>    surface_heap_t *heap = gpgpu->aux_buf.bo->virtual + gpgpu->aux_offset.surface_heap_offset;
> -  gen7_surface_state_t *ss = (gen7_surface_state_t *) heap->surface[index];
> +  gen7_surface_state_t *ss = (gen7_surface_state_t *) &heap->surface[index * sizeof(gen7_surface_state_t)];
>    memset(ss, 0, sizeof(*ss));
>    ss->ss0.vertical_line_stride = 0; // always choose VALIGN_2
>    ss->ss0.surface_type = get_surface_type(gpgpu, index, type);
> @@ -978,19 +973,7 @@ intel_gpgpu_bind_buf(intel_gpgpu_t *gpgpu, drm_intel_bo *buf, uint32_t offset,
>    gpgpu->target_buf_offset[gpgpu->binded_n] = internal_offset;
>    gpgpu->binded_offset[gpgpu->binded_n] = offset;
>    gpgpu->binded_n++;
> -  intel_gpgpu_setup_bti(gpgpu, buf, internal_offset, size, bti);
> -}
> -
> -static void
> -intel_gpgpu_bind_buf_gen8(intel_gpgpu_t *gpgpu, drm_intel_bo *buf, uint32_t offset,
> -                          uint32_t internal_offset, uint32_t size, uint8_t bti)
> -{
> -  assert(gpgpu->binded_n < max_buf_n);
> -  gpgpu->binded_buf[gpgpu->binded_n] = buf;
> -  gpgpu->target_buf_offset[gpgpu->binded_n] = internal_offset;
> -  gpgpu->binded_offset[gpgpu->binded_n] = offset;
> -  gpgpu->binded_n++;
> -  intel_gpgpu_setup_bti_gen8(gpgpu, buf, internal_offset, size, bti);
> +  intel_gpgpu_setup_bti(gpgpu, buf, internal_offset, size, bti, I965_SURFACEFORMAT_RAW);
>  }
>  
>  static int
> @@ -1514,6 +1497,7 @@ intel_set_gpgpu_callbacks(int device_id)
>    cl_gpgpu_state_init = (cl_gpgpu_state_init_cb *) intel_gpgpu_state_init;
>    cl_gpgpu_set_perf_counters = (cl_gpgpu_set_perf_counters_cb *) intel_gpgpu_set_perf_counters;
>    cl_gpgpu_upload_curbes = (cl_gpgpu_upload_curbes_cb *) intel_gpgpu_upload_curbes;
> +  cl_gpgpu_alloc_constant_buffer  = (cl_gpgpu_alloc_constant_buffer_cb *) intel_gpgpu_alloc_constant_buffer;
>    cl_gpgpu_states_setup = (cl_gpgpu_states_setup_cb *) intel_gpgpu_states_setup;
>    cl_gpgpu_upload_samplers = (cl_gpgpu_upload_samplers_cb *) intel_gpgpu_upload_samplers;
>    cl_gpgpu_batch_reset = (cl_gpgpu_batch_reset_cb *) intel_gpgpu_batch_reset;
> @@ -1539,23 +1523,29 @@ intel_set_gpgpu_callbacks(int device_id)
>    cl_gpgpu_get_printf_info = (cl_gpgpu_get_printf_info_cb *)intel_gpgpu_get_printf_info;
>  
>    if (IS_BROADWELL(device_id)) {
> -    cl_gpgpu_bind_buf = (cl_gpgpu_bind_buf_cb *)intel_gpgpu_bind_buf_gen8;
> +    intel_gpgpu_setup_bti = intel_gpgpu_setup_bti_gen8;
> +    cl_gpgpu_bind_image = (cl_gpgpu_bind_image_cb *) intel_gpgpu_bind_image_gen75;
> +    intel_gpgpu_set_L3 = intel_gpgpu_set_L3_gen75;
>      cl_gpgpu_get_cache_ctrl = (cl_gpgpu_get_cache_ctrl_cb *)intel_gpgpu_get_cache_ctrl_gen8;
> +    intel_gpgpu_get_scratch_index = intel_gpgpu_get_scratch_index_gen75;
> +    intel_gpgpu_post_action = intel_gpgpu_post_action_gen75;
> +    intel_gpgpu_read_ts_reg = intel_gpgpu_read_ts_reg_gen7; //HSW same as ivb
> +    intel_gpgpu_set_base_address = intel_gpgpu_set_base_address_gen8;
>      return;
>    }
>  
>    if (IS_HASWELL(device_id)) {
>      cl_gpgpu_bind_image = (cl_gpgpu_bind_image_cb *) intel_gpgpu_bind_image_gen75;
> -    cl_gpgpu_alloc_constant_buffer  = (cl_gpgpu_alloc_constant_buffer_cb *) intel_gpgpu_alloc_constant_buffer_gen75;
>      intel_gpgpu_set_L3 = intel_gpgpu_set_L3_gen75;
>      cl_gpgpu_get_cache_ctrl = (cl_gpgpu_get_cache_ctrl_cb *)intel_gpgpu_get_cache_ctrl_gen75;
>      intel_gpgpu_get_scratch_index = intel_gpgpu_get_scratch_index_gen75;
>      intel_gpgpu_post_action = intel_gpgpu_post_action_gen75;
>      intel_gpgpu_read_ts_reg = intel_gpgpu_read_ts_reg_gen7; //HSW same as ivb
> +    intel_gpgpu_set_base_address = intel_gpgpu_set_base_address_gen7;
> +    intel_gpgpu_setup_bti = intel_gpgpu_setup_bti_gen7;
>    }
>    else if (IS_IVYBRIDGE(device_id)) {
>      cl_gpgpu_bind_image = (cl_gpgpu_bind_image_cb *) intel_gpgpu_bind_image_gen7;
> -    cl_gpgpu_alloc_constant_buffer  = (cl_gpgpu_alloc_constant_buffer_cb *) intel_gpgpu_alloc_constant_buffer_gen7;
>      if (IS_BAYTRAIL_T(device_id)) {
>        intel_gpgpu_set_L3 = intel_gpgpu_set_L3_baytrail;
>        intel_gpgpu_read_ts_reg = intel_gpgpu_read_ts_reg_baytrail;
> @@ -1566,5 +1556,7 @@ intel_set_gpgpu_callbacks(int device_id)
>      cl_gpgpu_get_cache_ctrl = (cl_gpgpu_get_cache_ctrl_cb *)intel_gpgpu_get_cache_ctrl_gen7;
>      intel_gpgpu_get_scratch_index = intel_gpgpu_get_scratch_index_gen7;
>      intel_gpgpu_post_action = intel_gpgpu_post_action_gen7;
> +    intel_gpgpu_set_base_address = intel_gpgpu_set_base_address_gen7;
> +    intel_gpgpu_setup_bti = intel_gpgpu_setup_bti_gen7;
>    }
>  }
> diff --git a/src/intel/intel_structs.h b/src/intel/intel_structs.h
> index 415df8d..2d8bc54 100644
> --- a/src/intel/intel_structs.h
> +++ b/src/intel/intel_structs.h
> @@ -98,75 +98,6 @@ typedef struct gen6_interface_descriptor
>    uint32_t desc7; /* unused */
>  } gen6_interface_descriptor_t;
>  
> -typedef struct gen6_surface_state
> -{
> -  struct {
> -    uint32_t cube_pos_z:1;
> -    uint32_t cube_neg_z:1;
> -    uint32_t cube_pos_y:1;
> -    uint32_t cube_neg_y:1;
> -    uint32_t cube_pos_x:1;
> -    uint32_t cube_neg_x:1;
> -    uint32_t pad:2;
> -    uint32_t render_cache_read_mode:1;
> -    uint32_t cube_map_corner_mode:1;
> -    uint32_t mipmap_layout_mode:1;
> -    uint32_t vert_line_stride_ofs:1;
> -    uint32_t vert_line_stride:1;
> -    uint32_t color_blend:1;
> -    uint32_t writedisable_blue:1;
> -    uint32_t writedisable_green:1;
> -    uint32_t writedisable_red:1;
> -    uint32_t writedisable_alpha:1;
> -    uint32_t surface_format:9;
> -    uint32_t data_return_format:1;
> -    uint32_t pad0:1;
> -    uint32_t surface_type:3;
> -  } ss0;
> -
> -  struct {
> -    uint32_t base_addr;
> -  } ss1;
> -
> -  struct {
> -    uint32_t render_target_rotation:2;
> -    uint32_t mip_count:4;
> -    uint32_t width:13;
> -    uint32_t height:13;
> -  } ss2;
> -
> -  struct {
> -    uint32_t tile_walk:1;
> -    uint32_t tiled_surface:1;
> -    uint32_t pad:1;
> -    uint32_t pitch:18;
> -    uint32_t depth:11;
> -  } ss3;
> -
> -  struct {
> -    uint32_t multisample_pos_index:3;
> -    uint32_t pad:1;
> -    uint32_t multisample_count:3;
> -    uint32_t pad1:1;
> -    uint32_t rt_view_extent:9;
> -    uint32_t min_array_elt:11;
> -    uint32_t min_lod:4;
> -  } ss4;
> -
> -  struct {
> -    uint32_t pad:16;
> -    uint32_t cache_control:2;  /* different values for GT and IVB */
> -    uint32_t gfdt:1;           /* allows selective flushing of LLC (e.g. for scanout) */
> -    uint32_t encrypted_data:1;
> -    uint32_t y_offset:4;
> -    uint32_t vertical_alignment:1;
> -    uint32_t x_offset:7;
> -  } ss5;
> -
> -  uint32_t ss6; /* unused */
> -  uint32_t ss7; /* unused */
> -} gen6_surface_state_t;
> -
>  typedef struct gen7_surface_state
>  {
>    struct {
> @@ -407,8 +338,13 @@ typedef struct gen8_surface_state
>    } ss15;
>  } gen8_surface_state_t;
>  
> -STATIC_ASSERT(sizeof(gen6_surface_state_t) == sizeof(gen7_surface_state_t));
> -static const size_t surface_state_sz = sizeof(gen6_surface_state_t);
> +typedef union gen_surface_state
> +{
> +  gen7_surface_state_t gen7_surface_state;
> +  gen8_surface_state_t gen8_surface_state;
> +} gen_surface_state_t;
> +
> +static const size_t surface_state_sz = sizeof(gen_surface_state_t);
>  
>  typedef struct gen6_vfe_state_inline
>  {
> -- 
> 1.8.3.2
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list