<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="generator" content="rustdoc"> <meta name="description" content="Source to the Rust file `/Users/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/ocl-core-0.9.0/src/lib.rs`."> <meta name="keywords" content="rust, rustlang, rust-lang"> <title>lib.rs.html -- source</title> <link rel="stylesheet" type="text/css" href="../../normalize.css"> <link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"> <link rel="stylesheet" type="text/css" href="../../dark.css"> <link rel="stylesheet" type="text/css" href="../../main.css" id="themeStyle"> <script src="../../storage.js"></script> </head> <body class="rustdoc source"> <!--[if lte IE 8]> <div class="warning"> This old browser is unsupported and will most likely display funky things. </div> <![endif]--> <nav class="sidebar"> <div class="sidebar-menu">☰</div> </nav> <div class="theme-picker"> <button id="theme-picker" aria-label="Pick another theme!"> <img src="../../brush.svg" width="18" alt="Pick another theme!"> </button> <div id="theme-choices"></div> </div> <script src="../../theme.js"></script> <nav class="sub"> <form class="search-form js-only"> <div class="search-container"> <input class="search-input" name="search" autocomplete="off" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"> </div> </form> </nav> <section id='main' class="content"><pre class="line-numbers"><span id="1"> 1</span> <span id="2"> 2</span> <span id="3"> 3</span> <span id="4"> 4</span> <span id="5"> 5</span> <span id="6"> 6</span> <span id="7"> 7</span> <span id="8"> 8</span> <span id="9"> 9</span> <span id="10"> 10</span> <span id="11"> 11</span> <span id="12"> 12</span> <span id="13"> 13</span> <span id="14"> 14</span> <span id="15"> 15</span> <span id="16"> 16</span> <span id="17"> 17</span> <span id="18"> 18</span> <span id="19"> 19</span> <span id="20"> 20</span> <span id="21"> 21</span> <span id="22"> 22</span> <span id="23"> 23</span> <span id="24"> 24</span> <span id="25"> 25</span> <span id="26"> 26</span> <span id="27"> 27</span> <span id="28"> 28</span> <span id="29"> 29</span> <span id="30"> 30</span> <span id="31"> 31</span> <span id="32"> 32</span> <span id="33"> 33</span> <span id="34"> 34</span> <span id="35"> 35</span> <span id="36"> 36</span> <span id="37"> 37</span> <span id="38"> 38</span> <span id="39"> 39</span> <span id="40"> 40</span> <span id="41"> 41</span> <span id="42"> 42</span> <span id="43"> 43</span> <span id="44"> 44</span> <span id="45"> 45</span> <span id="46"> 46</span> <span id="47"> 47</span> <span id="48"> 48</span> <span id="49"> 49</span> <span id="50"> 50</span> <span id="51"> 51</span> <span id="52"> 52</span> <span id="53"> 53</span> <span id="54"> 54</span> <span id="55"> 55</span> <span id="56"> 56</span> <span id="57"> 57</span> <span id="58"> 58</span> <span id="59"> 59</span> <span id="60"> 60</span> <span id="61"> 61</span> <span id="62"> 62</span> <span id="63"> 63</span> <span id="64"> 64</span> <span id="65"> 65</span> <span id="66"> 66</span> <span id="67"> 67</span> <span id="68"> 68</span> <span id="69"> 69</span> <span id="70"> 70</span> <span id="71"> 71</span> <span id="72"> 72</span> <span id="73"> 73</span> <span id="74"> 74</span> <span id="75"> 75</span> <span id="76"> 76</span> <span id="77"> 77</span> <span id="78"> 78</span> <span id="79"> 79</span> <span id="80"> 80</span> <span id="81"> 81</span> <span id="82"> 82</span> <span id="83"> 83</span> <span id="84"> 84</span> <span id="85"> 85</span> <span id="86"> 86</span> <span id="87"> 87</span> <span id="88"> 88</span> <span id="89"> 89</span> <span id="90"> 90</span> <span id="91"> 91</span> <span id="92"> 92</span> <span id="93"> 93</span> <span id="94"> 94</span> <span id="95"> 95</span> <span id="96"> 96</span> <span id="97"> 97</span> <span id="98"> 98</span> <span id="99"> 99</span> <span id="100"> 100</span> <span id="101"> 101</span> <span id="102"> 102</span> <span id="103"> 103</span> <span id="104"> 104</span> <span id="105"> 105</span> <span id="106"> 106</span> <span id="107"> 107</span> <span id="108"> 108</span> <span id="109"> 109</span> <span id="110"> 110</span> <span id="111"> 111</span> <span id="112"> 112</span> <span id="113"> 113</span> <span id="114"> 114</span> <span id="115"> 115</span> <span id="116"> 116</span> <span id="117"> 117</span> <span id="118"> 118</span> <span id="119"> 119</span> <span id="120"> 120</span> <span id="121"> 121</span> <span id="122"> 122</span> <span id="123"> 123</span> <span id="124"> 124</span> <span id="125"> 125</span> <span id="126"> 126</span> <span id="127"> 127</span> <span id="128"> 128</span> <span id="129"> 129</span> <span id="130"> 130</span> <span id="131"> 131</span> <span id="132"> 132</span> <span id="133"> 133</span> <span id="134"> 134</span> <span id="135"> 135</span> <span id="136"> 136</span> <span id="137"> 137</span> <span id="138"> 138</span> <span id="139"> 139</span> <span id="140"> 140</span> <span id="141"> 141</span> <span id="142"> 142</span> <span id="143"> 143</span> <span id="144"> 144</span> <span id="145"> 145</span> <span id="146"> 146</span> <span id="147"> 147</span> <span id="148"> 148</span> <span id="149"> 149</span> <span id="150"> 150</span> <span id="151"> 151</span> <span id="152"> 152</span> <span id="153"> 153</span> <span id="154"> 154</span> <span id="155"> 155</span> <span id="156"> 156</span> <span id="157"> 157</span> <span id="158"> 158</span> <span id="159"> 159</span> <span id="160"> 160</span> <span id="161"> 161</span> <span id="162"> 162</span> <span id="163"> 163</span> <span id="164"> 164</span> <span id="165"> 165</span> <span id="166"> 166</span> <span id="167"> 167</span> <span id="168"> 168</span> <span id="169"> 169</span> <span id="170"> 170</span> <span id="171"> 171</span> <span id="172"> 172</span> <span id="173"> 173</span> <span id="174"> 174</span> <span id="175"> 175</span> <span id="176"> 176</span> <span id="177"> 177</span> <span id="178"> 178</span> <span id="179"> 179</span> <span id="180"> 180</span> <span id="181"> 181</span> <span id="182"> 182</span> <span id="183"> 183</span> <span id="184"> 184</span> <span id="185"> 185</span> <span id="186"> 186</span> <span id="187"> 187</span> <span id="188"> 188</span> <span id="189"> 189</span> <span id="190"> 190</span> <span id="191"> 191</span> <span id="192"> 192</span> <span id="193"> 193</span> <span id="194"> 194</span> <span id="195"> 195</span> <span id="196"> 196</span> <span id="197"> 197</span> <span id="198"> 198</span> <span id="199"> 199</span> <span id="200"> 200</span> <span id="201"> 201</span> <span id="202"> 202</span> <span id="203"> 203</span> <span id="204"> 204</span> <span id="205"> 205</span> <span id="206"> 206</span> <span id="207"> 207</span> <span id="208"> 208</span> <span id="209"> 209</span> <span id="210"> 210</span> <span id="211"> 211</span> <span id="212"> 212</span> <span id="213"> 213</span> <span id="214"> 214</span> <span id="215"> 215</span> <span id="216"> 216</span> <span id="217"> 217</span> <span id="218"> 218</span> <span id="219"> 219</span> <span id="220"> 220</span> <span id="221"> 221</span> <span id="222"> 222</span> <span id="223"> 223</span> <span id="224"> 224</span> <span id="225"> 225</span> <span id="226"> 226</span> <span id="227"> 227</span> <span id="228"> 228</span> <span id="229"> 229</span> <span id="230"> 230</span> <span id="231"> 231</span> <span id="232"> 232</span> <span id="233"> 233</span> <span id="234"> 234</span> <span id="235"> 235</span> <span id="236"> 236</span> <span id="237"> 237</span> <span id="238"> 238</span> <span id="239"> 239</span> <span id="240"> 240</span> <span id="241"> 241</span> <span id="242"> 242</span> <span id="243"> 243</span> <span id="244"> 244</span> <span id="245"> 245</span> <span id="246"> 246</span> <span id="247"> 247</span> <span id="248"> 248</span> <span id="249"> 249</span> <span id="250"> 250</span> <span id="251"> 251</span> <span id="252"> 252</span> <span id="253"> 253</span> <span id="254"> 254</span> <span id="255"> 255</span> <span id="256"> 256</span> <span id="257"> 257</span> <span id="258"> 258</span> <span id="259"> 259</span> <span id="260"> 260</span> <span id="261"> 261</span> <span id="262"> 262</span> <span id="263"> 263</span> <span id="264"> 264</span> <span id="265"> 265</span> <span id="266"> 266</span> <span id="267"> 267</span> <span id="268"> 268</span> <span id="269"> 269</span> <span id="270"> 270</span> <span id="271"> 271</span> <span id="272"> 272</span> <span id="273"> 273</span> <span id="274"> 274</span> <span id="275"> 275</span> <span id="276"> 276</span> <span id="277"> 277</span> <span id="278"> 278</span> <span id="279"> 279</span> <span id="280"> 280</span> <span id="281"> 281</span> <span id="282"> 282</span> <span id="283"> 283</span> <span id="284"> 284</span> <span id="285"> 285</span> <span id="286"> 286</span> <span id="287"> 287</span> <span id="288"> 288</span> <span id="289"> 289</span> <span id="290"> 290</span> <span id="291"> 291</span> <span id="292"> 292</span> <span id="293"> 293</span> <span id="294"> 294</span> <span id="295"> 295</span> <span id="296"> 296</span> <span id="297"> 297</span> <span id="298"> 298</span> <span id="299"> 299</span> <span id="300"> 300</span> <span id="301"> 301</span> <span id="302"> 302</span> <span id="303"> 303</span> <span id="304"> 304</span> <span id="305"> 305</span> <span id="306"> 306</span> <span id="307"> 307</span> <span id="308"> 308</span> <span id="309"> 309</span> <span id="310"> 310</span> <span id="311"> 311</span> <span id="312"> 312</span> <span id="313"> 313</span> <span id="314"> 314</span> <span id="315"> 315</span> <span id="316"> 316</span> <span id="317"> 317</span> <span id="318"> 318</span> <span id="319"> 319</span> <span id="320"> 320</span> <span id="321"> 321</span> <span id="322"> 322</span> <span id="323"> 323</span> <span id="324"> 324</span> <span id="325"> 325</span> <span id="326"> 326</span> <span id="327"> 327</span> <span id="328"> 328</span> <span id="329"> 329</span> <span id="330"> 330</span> <span id="331"> 331</span> <span id="332"> 332</span> <span id="333"> 333</span> <span id="334"> 334</span> <span id="335"> 335</span> <span id="336"> 336</span> <span id="337"> 337</span> <span id="338"> 338</span> <span id="339"> 339</span> <span id="340"> 340</span> <span id="341"> 341</span> <span id="342"> 342</span> <span id="343"> 343</span> <span id="344"> 344</span> <span id="345"> 345</span> <span id="346"> 346</span> <span id="347"> 347</span> <span id="348"> 348</span> <span id="349"> 349</span> <span id="350"> 350</span> <span id="351"> 351</span> <span id="352"> 352</span> <span id="353"> 353</span> <span id="354"> 354</span> <span id="355"> 355</span> <span id="356"> 356</span> <span id="357"> 357</span> <span id="358"> 358</span> <span id="359"> 359</span> <span id="360"> 360</span> <span id="361"> 361</span> <span id="362"> 362</span> <span id="363"> 363</span> <span id="364"> 364</span> <span id="365"> 365</span> <span id="366"> 366</span> <span id="367"> 367</span> <span id="368"> 368</span> <span id="369"> 369</span> <span id="370"> 370</span> <span id="371"> 371</span> <span id="372"> 372</span> <span id="373"> 373</span> <span id="374"> 374</span> <span id="375"> 375</span> <span id="376"> 376</span> <span id="377"> 377</span> <span id="378"> 378</span> <span id="379"> 379</span> <span id="380"> 380</span> <span id="381"> 381</span> <span id="382"> 382</span> <span id="383"> 383</span> <span id="384"> 384</span> <span id="385"> 385</span> <span id="386"> 386</span> <span id="387"> 387</span> <span id="388"> 388</span> <span id="389"> 389</span> <span id="390"> 390</span> <span id="391"> 391</span> <span id="392"> 392</span> <span id="393"> 393</span> <span id="394"> 394</span> <span id="395"> 395</span> <span id="396"> 396</span> <span id="397"> 397</span> <span id="398"> 398</span> <span id="399"> 399</span> <span id="400"> 400</span> <span id="401"> 401</span> <span id="402"> 402</span> <span id="403"> 403</span> <span id="404"> 404</span> <span id="405"> 405</span> <span id="406"> 406</span> <span id="407"> 407</span> <span id="408"> 408</span> <span id="409"> 409</span> <span id="410"> 410</span> <span id="411"> 411</span> <span id="412"> 412</span> <span id="413"> 413</span> <span id="414"> 414</span> <span id="415"> 415</span> <span id="416"> 416</span> <span id="417"> 417</span> <span id="418"> 418</span> <span id="419"> 419</span> <span id="420"> 420</span> <span id="421"> 421</span> <span id="422"> 422</span> <span id="423"> 423</span> <span id="424"> 424</span> <span id="425"> 425</span> <span id="426"> 426</span> <span id="427"> 427</span> <span id="428"> 428</span> <span id="429"> 429</span> <span id="430"> 430</span> <span id="431"> 431</span> <span id="432"> 432</span> <span id="433"> 433</span> <span id="434"> 434</span> <span id="435"> 435</span> <span id="436"> 436</span> <span id="437"> 437</span> <span id="438"> 438</span> <span id="439"> 439</span> <span id="440"> 440</span> <span id="441"> 441</span> <span id="442"> 442</span> <span id="443"> 443</span> <span id="444"> 444</span> <span id="445"> 445</span> <span id="446"> 446</span> <span id="447"> 447</span> <span id="448"> 448</span> <span id="449"> 449</span> <span id="450"> 450</span> <span id="451"> 451</span> <span id="452"> 452</span> <span id="453"> 453</span> <span id="454"> 454</span> <span id="455"> 455</span> <span id="456"> 456</span> <span id="457"> 457</span> <span id="458"> 458</span> <span id="459"> 459</span> <span id="460"> 460</span> <span id="461"> 461</span> <span id="462"> 462</span> <span id="463"> 463</span> <span id="464"> 464</span> <span id="465"> 465</span> <span id="466"> 466</span> <span id="467"> 467</span> <span id="468"> 468</span> <span id="469"> 469</span> <span id="470"> 470</span> <span id="471"> 471</span> <span id="472"> 472</span> <span id="473"> 473</span> <span id="474"> 474</span> <span id="475"> 475</span> <span id="476"> 476</span> <span id="477"> 477</span> <span id="478"> 478</span> <span id="479"> 479</span> <span id="480"> 480</span> <span id="481"> 481</span> <span id="482"> 482</span> <span id="483"> 483</span> <span id="484"> 484</span> <span id="485"> 485</span> <span id="486"> 486</span> <span id="487"> 487</span> <span id="488"> 488</span> <span id="489"> 489</span> <span id="490"> 490</span> <span id="491"> 491</span> <span id="492"> 492</span> <span id="493"> 493</span> <span id="494"> 494</span> <span id="495"> 495</span> <span id="496"> 496</span> <span id="497"> 497</span> <span id="498"> 498</span> <span id="499"> 499</span> <span id="500"> 500</span> <span id="501"> 501</span> <span id="502"> 502</span> <span id="503"> 503</span> <span id="504"> 504</span> <span id="505"> 505</span> <span id="506"> 506</span> <span id="507"> 507</span> <span id="508"> 508</span> <span id="509"> 509</span> <span id="510"> 510</span> <span id="511"> 511</span> <span id="512"> 512</span> <span id="513"> 513</span> <span id="514"> 514</span> <span id="515"> 515</span> <span id="516"> 516</span> <span id="517"> 517</span> <span id="518"> 518</span> <span id="519"> 519</span> <span id="520"> 520</span> <span id="521"> 521</span> <span id="522"> 522</span> <span id="523"> 523</span> <span id="524"> 524</span> <span id="525"> 525</span> <span id="526"> 526</span> <span id="527"> 527</span> <span id="528"> 528</span> <span id="529"> 529</span> <span id="530"> 530</span> <span id="531"> 531</span> <span id="532"> 532</span> <span id="533"> 533</span> <span id="534"> 534</span> <span id="535"> 535</span> <span id="536"> 536</span> <span id="537"> 537</span> <span id="538"> 538</span> <span id="539"> 539</span> <span id="540"> 540</span> <span id="541"> 541</span> <span id="542"> 542</span> <span id="543"> 543</span> <span id="544"> 544</span> <span id="545"> 545</span> <span id="546"> 546</span> <span id="547"> 547</span> <span id="548"> 548</span> <span id="549"> 549</span> <span id="550"> 550</span> <span id="551"> 551</span> <span id="552"> 552</span> <span id="553"> 553</span> <span id="554"> 554</span> <span id="555"> 555</span> <span id="556"> 556</span> <span id="557"> 557</span> <span id="558"> 558</span> <span id="559"> 559</span> <span id="560"> 560</span> <span id="561"> 561</span> <span id="562"> 562</span> <span id="563"> 563</span> <span id="564"> 564</span> <span id="565"> 565</span> <span id="566"> 566</span> <span id="567"> 567</span> <span id="568"> 568</span> <span id="569"> 569</span> <span id="570"> 570</span> <span id="571"> 571</span> <span id="572"> 572</span> <span id="573"> 573</span> <span id="574"> 574</span> <span id="575"> 575</span> <span id="576"> 576</span> <span id="577"> 577</span> <span id="578"> 578</span> <span id="579"> 579</span> <span id="580"> 580</span> <span id="581"> 581</span> <span id="582"> 582</span> <span id="583"> 583</span> <span id="584"> 584</span> <span id="585"> 585</span> <span id="586"> 586</span> <span id="587"> 587</span> <span id="588"> 588</span> <span id="589"> 589</span> <span id="590"> 590</span> <span id="591"> 591</span> <span id="592"> 592</span> <span id="593"> 593</span> <span id="594"> 594</span> <span id="595"> 595</span> <span id="596"> 596</span> <span id="597"> 597</span> <span id="598"> 598</span> <span id="599"> 599</span> <span id="600"> 600</span> <span id="601"> 601</span> <span id="602"> 602</span> <span id="603"> 603</span> <span id="604"> 604</span> <span id="605"> 605</span> <span id="606"> 606</span> <span id="607"> 607</span> <span id="608"> 608</span> <span id="609"> 609</span> <span id="610"> 610</span> <span id="611"> 611</span> <span id="612"> 612</span> <span id="613"> 613</span> <span id="614"> 614</span> <span id="615"> 615</span> <span id="616"> 616</span> <span id="617"> 617</span> <span id="618"> 618</span> <span id="619"> 619</span> <span id="620"> 620</span> <span id="621"> 621</span> <span id="622"> 622</span> <span id="623"> 623</span> <span id="624"> 624</span> <span id="625"> 625</span> <span id="626"> 626</span> <span id="627"> 627</span> <span id="628"> 628</span> <span id="629"> 629</span> <span id="630"> 630</span> <span id="631"> 631</span> <span id="632"> 632</span> <span id="633"> 633</span> <span id="634"> 634</span> <span id="635"> 635</span> <span id="636"> 636</span> <span id="637"> 637</span> <span id="638"> 638</span> <span id="639"> 639</span> <span id="640"> 640</span> <span id="641"> 641</span> <span id="642"> 642</span> <span id="643"> 643</span> <span id="644"> 644</span> <span id="645"> 645</span> <span id="646"> 646</span> <span id="647"> 647</span> <span id="648"> 648</span> <span id="649"> 649</span> <span id="650"> 650</span> <span id="651"> 651</span> <span id="652"> 652</span> <span id="653"> 653</span> <span id="654"> 654</span> <span id="655"> 655</span> <span id="656"> 656</span> <span id="657"> 657</span> <span id="658"> 658</span> <span id="659"> 659</span> <span id="660"> 660</span> <span id="661"> 661</span> <span id="662"> 662</span> <span id="663"> 663</span> <span id="664"> 664</span> <span id="665"> 665</span> <span id="666"> 666</span> <span id="667"> 667</span> <span id="668"> 668</span> <span id="669"> 669</span> <span id="670"> 670</span> <span id="671"> 671</span> <span id="672"> 672</span> <span id="673"> 673</span> <span id="674"> 674</span> <span id="675"> 675</span> <span id="676"> 676</span> <span id="677"> 677</span> <span id="678"> 678</span> <span id="679"> 679</span> <span id="680"> 680</span> <span id="681"> 681</span> <span id="682"> 682</span> <span id="683"> 683</span> <span id="684"> 684</span> <span id="685"> 685</span> <span id="686"> 686</span> <span id="687"> 687</span> <span id="688"> 688</span> <span id="689"> 689</span> <span id="690"> 690</span> <span id="691"> 691</span> <span id="692"> 692</span> <span id="693"> 693</span> <span id="694"> 694</span> <span id="695"> 695</span> <span id="696"> 696</span> <span id="697"> 697</span> <span id="698"> 698</span> <span id="699"> 699</span> <span id="700"> 700</span> <span id="701"> 701</span> <span id="702"> 702</span> <span id="703"> 703</span> <span id="704"> 704</span> <span id="705"> 705</span> <span id="706"> 706</span> <span id="707"> 707</span> <span id="708"> 708</span> <span id="709"> 709</span> <span id="710"> 710</span> <span id="711"> 711</span> <span id="712"> 712</span> <span id="713"> 713</span> <span id="714"> 714</span> <span id="715"> 715</span> <span id="716"> 716</span> <span id="717"> 717</span> <span id="718"> 718</span> <span id="719"> 719</span> <span id="720"> 720</span> <span id="721"> 721</span> <span id="722"> 722</span> <span id="723"> 723</span> <span id="724"> 724</span> <span id="725"> 725</span> <span id="726"> 726</span> <span id="727"> 727</span> <span id="728"> 728</span> <span id="729"> 729</span> <span id="730"> 730</span> <span id="731"> 731</span> <span id="732"> 732</span> <span id="733"> 733</span> <span id="734"> 734</span> <span id="735"> 735</span> <span id="736"> 736</span> <span id="737"> 737</span> <span id="738"> 738</span> <span id="739"> 739</span> <span id="740"> 740</span> <span id="741"> 741</span> <span id="742"> 742</span> <span id="743"> 743</span> <span id="744"> 744</span> <span id="745"> 745</span> <span id="746"> 746</span> <span id="747"> 747</span> <span id="748"> 748</span> <span id="749"> 749</span> <span id="750"> 750</span> <span id="751"> 751</span> <span id="752"> 752</span> <span id="753"> 753</span> <span id="754"> 754</span> <span id="755"> 755</span> <span id="756"> 756</span> <span id="757"> 757</span> <span id="758"> 758</span> <span id="759"> 759</span> <span id="760"> 760</span> <span id="761"> 761</span> <span id="762"> 762</span> <span id="763"> 763</span> <span id="764"> 764</span> <span id="765"> 765</span> <span id="766"> 766</span> <span id="767"> 767</span> <span id="768"> 768</span> <span id="769"> 769</span> <span id="770"> 770</span> <span id="771"> 771</span> <span id="772"> 772</span> <span id="773"> 773</span> <span id="774"> 774</span> <span id="775"> 775</span> <span id="776"> 776</span> <span id="777"> 777</span> <span id="778"> 778</span> <span id="779"> 779</span> <span id="780"> 780</span> <span id="781"> 781</span> <span id="782"> 782</span> <span id="783"> 783</span> <span id="784"> 784</span> <span id="785"> 785</span> <span id="786"> 786</span> <span id="787"> 787</span> <span id="788"> 788</span> <span id="789"> 789</span> <span id="790"> 790</span> <span id="791"> 791</span> <span id="792"> 792</span> <span id="793"> 793</span> <span id="794"> 794</span> <span id="795"> 795</span> <span id="796"> 796</span> <span id="797"> 797</span> <span id="798"> 798</span> <span id="799"> 799</span> <span id="800"> 800</span> <span id="801"> 801</span> <span id="802"> 802</span> <span id="803"> 803</span> <span id="804"> 804</span> <span id="805"> 805</span> <span id="806"> 806</span> <span id="807"> 807</span> <span id="808"> 808</span> <span id="809"> 809</span> <span id="810"> 810</span> <span id="811"> 811</span> <span id="812"> 812</span> <span id="813"> 813</span> <span id="814"> 814</span> <span id="815"> 815</span> <span id="816"> 816</span> <span id="817"> 817</span> <span id="818"> 818</span> <span id="819"> 819</span> <span id="820"> 820</span> <span id="821"> 821</span> <span id="822"> 822</span> <span id="823"> 823</span> <span id="824"> 824</span> <span id="825"> 825</span> <span id="826"> 826</span> <span id="827"> 827</span> <span id="828"> 828</span> <span id="829"> 829</span> <span id="830"> 830</span> <span id="831"> 831</span> <span id="832"> 832</span> <span id="833"> 833</span> <span id="834"> 834</span> <span id="835"> 835</span> <span id="836"> 836</span> <span id="837"> 837</span> <span id="838"> 838</span> <span id="839"> 839</span> <span id="840"> 840</span> <span id="841"> 841</span> <span id="842"> 842</span> <span id="843"> 843</span> <span id="844"> 844</span> <span id="845"> 845</span> <span id="846"> 846</span> <span id="847"> 847</span> <span id="848"> 848</span> <span id="849"> 849</span> <span id="850"> 850</span> <span id="851"> 851</span> <span id="852"> 852</span> <span id="853"> 853</span> <span id="854"> 854</span> <span id="855"> 855</span> <span id="856"> 856</span> <span id="857"> 857</span> <span id="858"> 858</span> <span id="859"> 859</span> <span id="860"> 860</span> <span id="861"> 861</span> <span id="862"> 862</span> <span id="863"> 863</span> <span id="864"> 864</span> <span id="865"> 865</span> <span id="866"> 866</span> <span id="867"> 867</span> <span id="868"> 868</span> <span id="869"> 869</span> <span id="870"> 870</span> <span id="871"> 871</span> <span id="872"> 872</span> <span id="873"> 873</span> <span id="874"> 874</span> <span id="875"> 875</span> <span id="876"> 876</span> <span id="877"> 877</span> <span id="878"> 878</span> <span id="879"> 879</span> <span id="880"> 880</span> <span id="881"> 881</span> <span id="882"> 882</span> <span id="883"> 883</span> <span id="884"> 884</span> <span id="885"> 885</span> <span id="886"> 886</span> <span id="887"> 887</span> <span id="888"> 888</span> <span id="889"> 889</span> <span id="890"> 890</span> <span id="891"> 891</span> <span id="892"> 892</span> <span id="893"> 893</span> <span id="894"> 894</span> <span id="895"> 895</span> <span id="896"> 896</span> <span id="897"> 897</span> <span id="898"> 898</span> <span id="899"> 899</span> <span id="900"> 900</span> <span id="901"> 901</span> <span id="902"> 902</span> <span id="903"> 903</span> <span id="904"> 904</span> <span id="905"> 905</span> <span id="906"> 906</span> <span id="907"> 907</span> <span id="908"> 908</span> <span id="909"> 909</span> <span id="910"> 910</span> <span id="911"> 911</span> <span id="912"> 912</span> <span id="913"> 913</span> <span id="914"> 914</span> <span id="915"> 915</span> <span id="916"> 916</span> <span id="917"> 917</span> <span id="918"> 918</span> <span id="919"> 919</span> <span id="920"> 920</span> <span id="921"> 921</span> <span id="922"> 922</span> <span id="923"> 923</span> <span id="924"> 924</span> <span id="925"> 925</span> <span id="926"> 926</span> <span id="927"> 927</span> <span id="928"> 928</span> <span id="929"> 929</span> <span id="930"> 930</span> <span id="931"> 931</span> <span id="932"> 932</span> <span id="933"> 933</span> <span id="934"> 934</span> <span id="935"> 935</span> <span id="936"> 936</span> <span id="937"> 937</span> <span id="938"> 938</span> <span id="939"> 939</span> <span id="940"> 940</span> <span id="941"> 941</span> <span id="942"> 942</span> <span id="943"> 943</span> <span id="944"> 944</span> <span id="945"> 945</span> <span id="946"> 946</span> <span id="947"> 947</span> <span id="948"> 948</span> <span id="949"> 949</span> <span id="950"> 950</span> <span id="951"> 951</span> <span id="952"> 952</span> <span id="953"> 953</span> <span id="954"> 954</span> <span id="955"> 955</span> <span id="956"> 956</span> <span id="957"> 957</span> <span id="958"> 958</span> <span id="959"> 959</span> <span id="960"> 960</span> <span id="961"> 961</span> <span id="962"> 962</span> <span id="963"> 963</span> <span id="964"> 964</span> <span id="965"> 965</span> <span id="966"> 966</span> <span id="967"> 967</span> <span id="968"> 968</span> <span id="969"> 969</span> <span id="970"> 970</span> <span id="971"> 971</span> <span id="972"> 972</span> <span id="973"> 973</span> <span id="974"> 974</span> <span id="975"> 975</span> <span id="976"> 976</span> <span id="977"> 977</span> <span id="978"> 978</span> <span id="979"> 979</span> <span id="980"> 980</span> <span id="981"> 981</span> <span id="982"> 982</span> <span id="983"> 983</span> <span id="984"> 984</span> <span id="985"> 985</span> <span id="986"> 986</span> <span id="987"> 987</span> <span id="988"> 988</span> <span id="989"> 989</span> <span id="990"> 990</span> <span id="991"> 991</span> <span id="992"> 992</span> <span id="993"> 993</span> <span id="994"> 994</span> <span id="995"> 995</span> <span id="996"> 996</span> <span id="997"> 997</span> <span id="998"> 998</span> <span id="999"> 999</span> <span id="1000">1000</span> <span id="1001">1001</span> <span id="1002">1002</span> <span id="1003">1003</span> <span id="1004">1004</span> <span id="1005">1005</span> <span id="1006">1006</span> <span id="1007">1007</span> <span id="1008">1008</span> <span id="1009">1009</span> <span id="1010">1010</span> <span id="1011">1011</span> <span id="1012">1012</span> <span id="1013">1013</span> <span id="1014">1014</span> <span id="1015">1015</span> <span id="1016">1016</span> <span id="1017">1017</span> <span id="1018">1018</span> <span id="1019">1019</span> <span id="1020">1020</span> <span id="1021">1021</span> <span id="1022">1022</span> <span id="1023">1023</span> <span id="1024">1024</span> <span id="1025">1025</span> <span id="1026">1026</span> <span id="1027">1027</span> <span id="1028">1028</span> <span id="1029">1029</span> <span id="1030">1030</span> <span id="1031">1031</span> <span id="1032">1032</span> <span id="1033">1033</span> <span id="1034">1034</span> <span id="1035">1035</span> <span id="1036">1036</span> <span id="1037">1037</span> <span id="1038">1038</span> <span id="1039">1039</span> <span id="1040">1040</span> <span id="1041">1041</span> <span id="1042">1042</span> <span id="1043">1043</span> <span id="1044">1044</span> <span id="1045">1045</span> <span id="1046">1046</span> <span id="1047">1047</span> <span id="1048">1048</span> <span id="1049">1049</span> <span id="1050">1050</span> <span id="1051">1051</span> <span id="1052">1052</span> <span id="1053">1053</span> <span id="1054">1054</span> <span id="1055">1055</span> <span id="1056">1056</span> <span id="1057">1057</span> <span id="1058">1058</span> <span id="1059">1059</span> <span id="1060">1060</span> <span id="1061">1061</span> <span id="1062">1062</span> <span id="1063">1063</span> <span id="1064">1064</span> <span id="1065">1065</span> <span id="1066">1066</span> <span id="1067">1067</span> <span id="1068">1068</span> <span id="1069">1069</span> <span id="1070">1070</span> <span id="1071">1071</span> <span id="1072">1072</span> <span id="1073">1073</span> <span id="1074">1074</span> <span id="1075">1075</span> <span id="1076">1076</span> <span id="1077">1077</span> <span id="1078">1078</span> <span id="1079">1079</span> <span id="1080">1080</span> <span id="1081">1081</span> <span id="1082">1082</span> <span id="1083">1083</span> <span id="1084">1084</span> <span id="1085">1085</span> <span id="1086">1086</span> <span id="1087">1087</span> <span id="1088">1088</span> <span id="1089">1089</span> <span id="1090">1090</span> <span id="1091">1091</span> <span id="1092">1092</span> <span id="1093">1093</span> <span id="1094">1094</span> <span id="1095">1095</span> <span id="1096">1096</span> <span id="1097">1097</span> <span id="1098">1098</span> <span id="1099">1099</span> <span id="1100">1100</span> <span id="1101">1101</span> <span id="1102">1102</span> <span id="1103">1103</span> <span id="1104">1104</span> <span id="1105">1105</span> <span id="1106">1106</span> <span id="1107">1107</span> <span id="1108">1108</span> <span id="1109">1109</span> <span id="1110">1110</span> <span id="1111">1111</span> <span id="1112">1112</span> <span id="1113">1113</span> <span id="1114">1114</span> <span id="1115">1115</span> <span id="1116">1116</span> <span id="1117">1117</span> <span id="1118">1118</span> <span id="1119">1119</span> <span id="1120">1120</span> <span id="1121">1121</span> <span id="1122">1122</span> <span id="1123">1123</span> <span id="1124">1124</span> <span id="1125">1125</span> <span id="1126">1126</span> <span id="1127">1127</span> <span id="1128">1128</span> <span id="1129">1129</span> <span id="1130">1130</span> <span id="1131">1131</span> <span id="1132">1132</span> <span id="1133">1133</span> <span id="1134">1134</span> <span id="1135">1135</span> <span id="1136">1136</span> <span id="1137">1137</span> <span id="1138">1138</span> <span id="1139">1139</span> <span id="1140">1140</span> <span id="1141">1141</span> <span id="1142">1142</span> <span id="1143">1143</span> <span id="1144">1144</span> <span id="1145">1145</span> <span id="1146">1146</span> <span id="1147">1147</span> <span id="1148">1148</span> <span id="1149">1149</span> <span id="1150">1150</span> <span id="1151">1151</span> <span id="1152">1152</span> <span id="1153">1153</span> <span id="1154">1154</span> <span id="1155">1155</span> <span id="1156">1156</span> <span id="1157">1157</span> <span id="1158">1158</span> <span id="1159">1159</span> <span id="1160">1160</span> <span id="1161">1161</span> <span id="1162">1162</span> <span id="1163">1163</span> <span id="1164">1164</span> <span id="1165">1165</span> <span id="1166">1166</span> <span id="1167">1167</span> <span id="1168">1168</span> <span id="1169">1169</span> <span id="1170">1170</span> <span id="1171">1171</span> <span id="1172">1172</span> <span id="1173">1173</span> <span id="1174">1174</span> <span id="1175">1175</span> <span id="1176">1176</span> <span id="1177">1177</span> <span id="1178">1178</span> <span id="1179">1179</span> <span id="1180">1180</span> <span id="1181">1181</span> <span id="1182">1182</span> <span id="1183">1183</span> <span id="1184">1184</span> <span id="1185">1185</span> <span id="1186">1186</span> <span id="1187">1187</span> <span id="1188">1188</span> <span id="1189">1189</span> <span id="1190">1190</span> <span id="1191">1191</span> <span id="1192">1192</span> <span id="1193">1193</span> <span id="1194">1194</span> <span id="1195">1195</span> <span id="1196">1196</span> <span id="1197">1197</span> <span id="1198">1198</span> <span id="1199">1199</span> <span id="1200">1200</span> <span id="1201">1201</span> <span id="1202">1202</span> <span id="1203">1203</span> <span id="1204">1204</span> <span id="1205">1205</span> <span id="1206">1206</span> <span id="1207">1207</span> <span id="1208">1208</span> <span id="1209">1209</span> <span id="1210">1210</span> <span id="1211">1211</span> <span id="1212">1212</span> <span id="1213">1213</span> <span id="1214">1214</span> <span id="1215">1215</span> <span id="1216">1216</span> <span id="1217">1217</span> <span id="1218">1218</span> <span id="1219">1219</span> <span id="1220">1220</span> <span id="1221">1221</span> <span id="1222">1222</span> <span id="1223">1223</span> <span id="1224">1224</span> <span id="1225">1225</span> <span id="1226">1226</span> <span id="1227">1227</span> <span id="1228">1228</span> <span id="1229">1229</span> <span id="1230">1230</span> <span id="1231">1231</span> <span id="1232">1232</span> <span id="1233">1233</span> <span id="1234">1234</span> <span id="1235">1235</span> <span id="1236">1236</span> <span id="1237">1237</span> <span id="1238">1238</span> <span id="1239">1239</span> <span id="1240">1240</span> <span id="1241">1241</span> <span id="1242">1242</span> <span id="1243">1243</span> <span id="1244">1244</span> <span id="1245">1245</span> <span id="1246">1246</span> <span id="1247">1247</span> <span id="1248">1248</span> <span id="1249">1249</span> <span id="1250">1250</span> <span id="1251">1251</span> <span id="1252">1252</span> <span id="1253">1253</span> <span id="1254">1254</span> <span id="1255">1255</span> <span id="1256">1256</span> <span id="1257">1257</span> <span id="1258">1258</span> <span id="1259">1259</span> <span id="1260">1260</span> <span id="1261">1261</span> <span id="1262">1262</span> <span id="1263">1263</span> <span id="1264">1264</span> <span id="1265">1265</span> <span id="1266">1266</span> <span id="1267">1267</span> <span id="1268">1268</span> <span id="1269">1269</span> <span id="1270">1270</span> <span id="1271">1271</span> <span id="1272">1272</span> <span id="1273">1273</span> <span id="1274">1274</span> <span id="1275">1275</span> <span id="1276">1276</span> <span id="1277">1277</span> <span id="1278">1278</span> <span id="1279">1279</span> <span id="1280">1280</span> <span id="1281">1281</span> <span id="1282">1282</span> <span id="1283">1283</span> <span id="1284">1284</span> <span id="1285">1285</span> <span id="1286">1286</span> <span id="1287">1287</span> <span id="1288">1288</span> <span id="1289">1289</span> <span id="1290">1290</span> <span id="1291">1291</span> <span id="1292">1292</span> <span id="1293">1293</span> <span id="1294">1294</span> <span id="1295">1295</span> <span id="1296">1296</span> <span id="1297">1297</span> <span id="1298">1298</span> <span id="1299">1299</span> <span id="1300">1300</span> <span id="1301">1301</span> <span id="1302">1302</span> <span id="1303">1303</span> <span id="1304">1304</span> <span id="1305">1305</span> <span id="1306">1306</span> <span id="1307">1307</span> <span id="1308">1308</span> <span id="1309">1309</span> <span id="1310">1310</span> <span id="1311">1311</span> <span id="1312">1312</span> <span id="1313">1313</span> <span id="1314">1314</span> <span id="1315">1315</span> <span id="1316">1316</span> <span id="1317">1317</span> <span id="1318">1318</span> <span id="1319">1319</span> <span id="1320">1320</span> <span id="1321">1321</span> <span id="1322">1322</span> <span id="1323">1323</span> <span id="1324">1324</span> <span id="1325">1325</span> <span id="1326">1326</span> <span id="1327">1327</span> <span id="1328">1328</span> <span id="1329">1329</span> <span id="1330">1330</span> <span id="1331">1331</span> <span id="1332">1332</span> <span id="1333">1333</span> <span id="1334">1334</span> </pre><pre class="rust "> <span class="comment">// ocl::core::</span> <span class="doccomment">//! Thin wrappers for the `OpenCL` FFI functions and types.</span> <span class="doccomment">//!</span> <span class="doccomment">//! Allows access to `OpenCL` FFI functions with a minimal layer of zero-cost</span> <span class="doccomment">//! abstraction, providing, safety, performance, and convenience. The [`ocl`]</span> <span class="doccomment">//! crate contains higher level and easier to use interfaces to the</span> <span class="doccomment">//! functionality contained within.</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//! ## Even Lower Level: [`cl-sys`]</span> <span class="doccomment">//!</span> <span class="doccomment">//! If there's still something missing or for some reason you need direct FFI</span> <span class="doccomment">//! access, use the functions in the [`cl-sys`] module. The pointers used by</span> <span class="doccomment">//! [`cl-sys`] functions can be wrapped in [`ocl-core`] wrappers</span> <span class="doccomment">//! (`ocl_core::PlatformId`, `ocl_core::Context`, etc.) and passed to</span> <span class="doccomment">//! [`ocl-core`] module functions. Likewise the other way around (using, for</span> <span class="doccomment">//! example: [`EventRaw::as_ptr`]).</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//! ## Performance</span> <span class="doccomment">//!</span> <span class="doccomment">//! Performance between all three interface layers, [`cl-sys`], [`ocl-core`],</span> <span class="doccomment">//! and the 'standard' ([`ocl`]) types, is identical or virtually identical</span> <span class="doccomment">//! (if not, please file an issue).</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//! ## Safety</span> <span class="doccomment">//!</span> <span class="doccomment">//! Running any kernel at all is inherently unsafe. The guarantee we aim to</span> <span class="doccomment">//! make in this library is that if there is a segfault or invalid memory</span> <span class="doccomment">//! access, the fault lies within the kernel. No effort is or will be made to</span> <span class="doccomment">//! verify or sanitize kernels. Consider all kernels within user-supplied</span> <span class="doccomment">//! programs just as if you would an `unsafe fn`.</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//! ## Length vs Size</span> <span class="doccomment">//!</span> <span class="doccomment">//! No, not that...</span> <span class="doccomment">//!</span> <span class="doccomment">//! Quantifiers passed to functions in the `OpenCL` API are generally</span> <span class="doccomment">//! expressed in bytes. Units passed to functions in *this* library are</span> <span class="doccomment">//! expected to be `bytes / sizeof(T)` (corresponding with units returned by</span> <span class="doccomment">//! the ubiquitous `.len()` method). The suffix '_size' or '_bytes' is</span> <span class="doccomment">//! generally used when a parameter deviates from this convention.</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//! ## Version Control</span> <span class="doccomment">//!</span> <span class="doccomment">//! The version control system is in place to ensure that you don't call</span> <span class="doccomment">//! functions that your hardware/driver does not support.</span> <span class="doccomment">//!</span> <span class="doccomment">//! Functions in this crate with the `[Version Controlled: OpenCL {...}+]` tag</span> <span class="doccomment">//! in the description require an additional parameter, `device_version` or</span> <span class="doccomment">//! `device_versions`: a parsed result (or slice of results) of</span> <span class="doccomment">//! `DeviceInfo::Version`. This is a runtime check to ensure that the device</span> <span class="doccomment">//! supports the function being called. Calling a function which a particular</span> <span class="doccomment">//! device does not support will likely cause a segmentation fault and</span> <span class="doccomment">//! possibly data corruption.</span> <span class="doccomment">//!</span> <span class="doccomment">//! Saving the `OpenclVersion` returned from `device_version()` for your</span> <span class="doccomment">//! device(s) at the start of your program and passing it each time you call</span> <span class="doccomment">//! a version controlled function is the fastest and safest method (see the</span> <span class="doccomment">//! `ocl` library for an example). The cost of this check is little more than</span> <span class="doccomment">//! a single `if` statement.</span> <span class="doccomment">//!</span> <span class="doccomment">//! Passing `None` for `device_version` will cause an automated version check</span> <span class="doccomment">//! which has a small cost (calling info function, parsing the version number</span> <span class="doccomment">//! etc.) but is a safe option if you are not sure what to do.</span> <span class="doccomment">//!</span> <span class="doccomment">//! Passing the result of a call to `OpenclVersion::max()` or passing a fake</span> <span class="doccomment">//! version will bypass any safety checks and has all of the risks described</span> <span class="doccomment">//! above. Only do this if you're absolutely sure you know what you're doing</span> <span class="doccomment">//! and are not concerned about segfaults and data integrity.</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//! ## More Documentation</span> <span class="doccomment">//!</span> <span class="doccomment">//! As most of the functions here are minimally documented, please refer to</span> <span class="doccomment">//! the official `OpenCL` documentation linked below. Although there isn't a</span> <span class="doccomment">//! precise 1:1 parameter mapping between the `core` and original functions,</span> <span class="doccomment">//! it's close enough (modulo the size/len difference discussed above) to help</span> <span class="doccomment">//! sort out any questions you may have until a more thorough documentation</span> <span class="doccomment">//! pass can be made. View the source code in [`src/types/functions.rs`] for</span> <span class="doccomment">//! more mapping details.</span> <span class="doccomment">//!</span> <span class="doccomment">//! ['OpenCL' 1.2 SDK Reference: https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/]</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//!</span> <span class="doccomment">//! [`ocl`]: https://github.com/cogciprocate/ocl</span> <span class="doccomment">//! [`ocl-core`]: https://github.com/cogciprocate/ocl-core</span> <span class="doccomment">//! [`cl-sys`]: https://github.com/cogciprocate/cl-sys</span> <span class="doccomment">//! [issue]: https://github.com/cogciprocate/ocl-core/issues</span> <span class="doccomment">//! ['OpenCL' 1.2 SDK Reference: https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/]: https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/</span> <span class="doccomment">//! [`src/types/functions.rs`]: /ocl-core/src/ocl-core/src/types/functions.rs.html</span> <span class="comment">// #![doc(html_root_url="https://docs.rs/ocl-core/0.3/")]</span> <span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">bitflags</span>; <span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">enum_primitive</span>; <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">num_traits</span>; <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">num_complex</span>; <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"ocl-core-vector"</span>)]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">ocl_core_vector</span> <span class="kw">as</span> <span class="ident">vector</span>; <span class="attribute">#[<span class="ident">macro_use</span>]</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">failure</span>; <span class="kw">pub</span> <span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">cl_sys</span> <span class="kw">as</span> <span class="ident">ffi</span>; <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span> <span class="kw">mod</span> <span class="ident">tests</span>; <span class="kw">mod</span> <span class="ident">functions</span>; <span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">types</span>; <span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">error</span>; <span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">util</span>; <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">error</span>::{<span class="ident">Error</span>, <span class="prelude-ty">Result</span>, <span class="ident">ErrorKind</span>}; <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">types</span>::<span class="ident">abs</span>::{<span class="ident">ClWaitListPtr</span>, <span class="ident">ClNullEventPtr</span>, <span class="ident">ClEventPtrRef</span>, <span class="ident">ClPlatformIdPtr</span>, <span class="ident">ClDeviceIdPtr</span>, <span class="ident">ClContextPtr</span>, <span class="ident">EventRefWrapper</span>, <span class="ident">PlatformId</span>, <span class="ident">DeviceId</span>, <span class="ident">Context</span>, <span class="ident">CommandQueue</span>, <span class="ident">Mem</span>, <span class="ident">Program</span>, <span class="ident">Kernel</span>, <span class="ident">Event</span>, <span class="ident">Sampler</span>, <span class="ident">ClVersions</span>, <span class="ident">AsMem</span>, <span class="ident">MemCmdRw</span>, <span class="ident">MemCmdAll</span>, <span class="ident">MemMap</span>}; <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">types</span>::<span class="ident">structs</span>::{<span class="self">self</span>, <span class="ident">OpenclVersion</span>, <span class="ident">ContextProperties</span>, <span class="ident">ImageFormatParseError</span>, <span class="ident">ImageFormatParseResult</span>, <span class="ident">ImageFormat</span>, <span class="ident">ImageDescriptor</span>, <span class="ident">BufferRegion</span>, <span class="ident">ContextPropertyValue</span>, <span class="ident">ArgVal</span>}; <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">types</span>::<span class="ident">enums</span>::{<span class="ident">EmptyInfoResultError</span>, <span class="ident">PlatformInfoResult</span>, <span class="ident">DeviceInfoResult</span>, <span class="ident">ContextInfoResult</span>, <span class="ident">GlContextInfoResult</span>, <span class="ident">CommandQueueInfoResult</span>, <span class="ident">MemInfoResult</span>, <span class="ident">ImageInfoResult</span>, <span class="ident">SamplerInfoResult</span>, <span class="ident">ProgramInfoResult</span>, <span class="ident">ProgramBuildInfoResult</span>, <span class="ident">KernelInfoResult</span>, <span class="ident">KernelArgInfoResult</span>, <span class="ident">KernelWorkGroupInfoResult</span>, <span class="ident">EventInfoResult</span>, <span class="ident">ProfilingInfoResult</span>}; <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">functions</span>::{<span class="ident">get_platform_ids</span>, <span class="ident">get_platform_info</span>, <span class="ident">get_device_ids</span>, <span class="ident">get_device_info</span>, <span class="ident">create_sub_devices</span>, <span class="ident">retain_device</span>, <span class="ident">release_device</span>, <span class="ident">create_context</span>, <span class="ident">create_context_from_type</span>, <span class="ident">retain_context</span>, <span class="ident">release_context</span>, <span class="ident">get_context_info</span>, <span class="ident">create_command_queue</span>, <span class="ident">retain_command_queue</span>, <span class="ident">release_command_queue</span>, <span class="ident">get_command_queue_info</span>, <span class="ident">create_buffer</span>, <span class="ident">create_sub_buffer</span>, <span class="ident">create_image</span>, <span class="ident">retain_mem_object</span>, <span class="ident">release_mem_object</span>, <span class="ident">get_supported_image_formats</span>, <span class="ident">get_mem_object_info</span>, <span class="ident">get_image_info</span>, <span class="ident">set_mem_object_destructor_callback</span>, <span class="ident">create_sampler</span>, <span class="ident">retain_sampler</span>, <span class="ident">release_sampler</span>, <span class="ident">get_sampler_info</span>, <span class="ident">create_program_with_source</span>, <span class="ident">create_program_with_binary</span>, <span class="ident">create_program_with_built_in_kernels</span>, <span class="ident">retain_program</span>, <span class="ident">release_program</span>, <span class="ident">build_program</span>, <span class="ident">compile_program</span>, <span class="ident">link_program</span>, <span class="ident">create_build_program</span>, <span class="ident">get_program_info</span>, <span class="ident">get_program_build_info</span>, <span class="ident">create_kernel</span>, <span class="ident">create_kernels_in_program</span>, <span class="ident">retain_kernel</span>, <span class="ident">release_kernel</span>, <span class="ident">set_kernel_arg</span>, <span class="ident">get_kernel_info</span>, <span class="ident">get_kernel_arg_info</span>, <span class="ident">get_kernel_work_group_info</span>, <span class="ident">wait_for_events</span>, <span class="ident">get_event_info</span>, <span class="ident">create_user_event</span>, <span class="ident">retain_event</span>, <span class="ident">release_event</span>, <span class="ident">set_user_event_status</span>, <span class="ident">set_event_callback</span>, <span class="ident">get_event_profiling_info</span>, <span class="ident">flush</span>, <span class="ident">finish</span>, <span class="ident">enqueue_read_buffer</span>, <span class="ident">enqueue_read_buffer_rect</span>, <span class="ident">enqueue_write_buffer</span>, <span class="ident">enqueue_write_buffer_rect</span>, <span class="ident">enqueue_copy_buffer</span>, <span class="ident">enqueue_copy_buffer_rect</span>, <span class="ident">enqueue_read_image</span>, <span class="ident">enqueue_write_image</span>, <span class="ident">enqueue_fill_image</span>, <span class="ident">enqueue_copy_image</span>, <span class="ident">enqueue_copy_image_to_buffer</span>, <span class="ident">enqueue_copy_buffer_to_image</span>, <span class="ident">enqueue_map_buffer</span>, <span class="ident">enqueue_map_image</span>, <span class="ident">enqueue_unmap_mem_object</span>, <span class="ident">enqueue_migrate_mem_objects</span>, <span class="ident">enqueue_kernel</span>, <span class="ident">enqueue_task</span>, <span class="ident">enqueue_native_kernel</span>, <span class="ident">enqueue_marker_with_wait_list</span>, <span class="ident">enqueue_barrier_with_wait_list</span>, <span class="ident">get_extension_function_address_for_platform</span>, <span class="ident">wait_for_event</span>, <span class="ident">event_status</span>, <span class="ident">default_platform_idx</span>, <span class="ident">program_build_err</span>, <span class="ident">verify_context</span>, <span class="ident">default_platform</span>, <span class="ident">default_device_type</span>, <span class="ident">device_versions</span>, <span class="ident">event_is_complete</span>, <span class="ident">_dummy_event_callback</span>, <span class="ident">_complete_user_event</span>, <span class="ident">get_context_platform</span>}; <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">feature</span><span class="op">=</span><span class="string">"opencl_vendor_mesa"</span>))]</span> <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">functions</span>::{ <span class="ident">get_gl_context_info_khr</span>, <span class="ident">create_from_gl_buffer</span>, <span class="ident">create_from_gl_renderbuffer</span>, <span class="ident">create_from_gl_texture</span>, <span class="ident">create_from_gl_texture_2d</span>, <span class="ident">create_from_gl_texture_3d</span>, <span class="ident">enqueue_fill_buffer</span>, <span class="ident">enqueue_acquire_gl_objects</span>, <span class="ident">enqueue_release_gl_objects</span>}; <span class="kw">pub</span> <span class="kw">use</span> <span class="ident">traits</span>::{<span class="ident">OclPrm</span>, <span class="ident">OclNum</span>, <span class="ident">OclScl</span>}; <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"ocl-core-vector"</span>)]</span> <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">vector</span>::{ <span class="comment">// pub use self::types::vector::{</span> <span class="ident">Char</span>, <span class="ident">Char2</span>, <span class="ident">Char3</span>, <span class="ident">Char4</span>, <span class="ident">Char8</span>, <span class="ident">Char16</span>, <span class="ident">Uchar</span>, <span class="ident">Uchar2</span>, <span class="ident">Uchar3</span>, <span class="ident">Uchar4</span>, <span class="ident">Uchar8</span>, <span class="ident">Uchar16</span>, <span class="ident">Short</span>, <span class="ident">Short2</span>, <span class="ident">Short3</span>, <span class="ident">Short4</span>, <span class="ident">Short8</span>, <span class="ident">Short16</span>, <span class="ident">Ushort</span>, <span class="ident">Ushort2</span>, <span class="ident">Ushort3</span>, <span class="ident">Ushort4</span>, <span class="ident">Ushort8</span>, <span class="ident">Ushort16</span>, <span class="ident">Int</span>, <span class="ident">Int2</span>, <span class="ident">Int3</span>, <span class="ident">Int4</span>, <span class="ident">Int8</span>, <span class="ident">Int16</span>, <span class="ident">Uint</span>, <span class="ident">Uint2</span>, <span class="ident">Uint3</span>, <span class="ident">Uint4</span>, <span class="ident">Uint8</span>, <span class="ident">Uint16</span>, <span class="ident">Long</span>, <span class="ident">Long2</span>, <span class="ident">Long3</span>, <span class="ident">Long4</span>, <span class="ident">Long8</span>, <span class="ident">Long16</span>, <span class="ident">Ulong</span>, <span class="ident">Ulong2</span>, <span class="ident">Ulong3</span>, <span class="ident">Ulong4</span>, <span class="ident">Ulong8</span>, <span class="ident">Ulong16</span>, <span class="ident">Float</span>, <span class="ident">Float2</span>, <span class="ident">Float3</span>, <span class="ident">Float4</span>, <span class="ident">Float8</span>, <span class="ident">Float16</span>, <span class="ident">Double</span>, <span class="ident">Double2</span>, <span class="ident">Double3</span>, <span class="ident">Double4</span>, <span class="ident">Double8</span>, <span class="ident">Double16</span>, }; <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"ocl-core-vector"</span>)]</span> <span class="kw">pub</span> <span class="kw">use</span> <span class="ident">traits</span>::<span class="ident">OclVec</span>; <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"opencl_version_2_1"</span>)]</span> <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">functions</span>::{<span class="ident">create_program_with_il</span>}; <span class="comment">//=============================================================================</span> <span class="comment">//================================ CONSTANTS ==================================</span> <span class="comment">//=============================================================================</span> <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICES_MAX</span>: <span class="ident">u32</span> <span class="op">=</span> <span class="number">64</span>; <span class="comment">//=============================================================================</span> <span class="comment">//================================= TYPEDEFS ==================================</span> <span class="comment">//=============================================================================</span> <span class="kw">pub</span> <span class="kw">type</span> <span class="ident">EventCallbackFn</span> <span class="op">=</span> <span class="kw">extern</span> <span class="string">"C"</span> <span class="kw">fn</span> (<span class="ident">ffi</span>::<span class="ident">cl_event</span>, <span class="ident">i32</span>, <span class="kw-2">*</span><span class="kw-2">mut</span> <span class="ident">ffi</span>::<span class="ident">c_void</span>); <span class="kw">pub</span> <span class="kw">type</span> <span class="ident">CreateContextCallbackFn</span> <span class="op">=</span> <span class="kw">extern</span> <span class="string">"C"</span> <span class="kw">fn</span> (<span class="kw-2">*</span><span class="kw">const</span> <span class="ident">ffi</span>::<span class="ident">c_char</span>, <span class="kw-2">*</span><span class="kw">const</span> <span class="ident">ffi</span>::<span class="ident">c_void</span>, <span class="ident">ffi</span>::<span class="ident">size_t</span>, <span class="kw-2">*</span><span class="kw-2">mut</span> <span class="ident">ffi</span>::<span class="ident">c_void</span>); <span class="kw">pub</span> <span class="kw">type</span> <span class="ident">BuildProgramCallbackFn</span> <span class="op">=</span> <span class="kw">extern</span> <span class="string">"C"</span> <span class="kw">fn</span> (<span class="kw-2">*</span><span class="kw-2">mut</span> <span class="ident">ffi</span>::<span class="ident">c_void</span>, <span class="kw-2">*</span><span class="kw-2">mut</span> <span class="ident">ffi</span>::<span class="ident">c_void</span>); <span class="kw">pub</span> <span class="kw">type</span> <span class="ident">UserDataPtr</span> <span class="op">=</span> <span class="kw-2">*</span><span class="kw-2">mut</span> <span class="ident">ffi</span>::<span class="ident">c_void</span>; <span class="comment">//=============================================================================</span> <span class="comment">//================================== TRAITS ===================================</span> <span class="comment">//=============================================================================</span> <span class="kw">mod</span> <span class="ident">traits</span> { <span class="kw">use</span> <span class="ident">std</span>::<span class="ident">fmt</span>::{<span class="ident">Display</span>, <span class="ident">Debug</span>}; <span class="kw">use</span> <span class="ident">std</span>::<span class="ident">ops</span>::<span class="kw-2">*</span>; <span class="kw">use</span> <span class="ident">std</span>::<span class="ident">iter</span>::{<span class="ident">Sum</span>, <span class="ident">Product</span>}; <span class="kw">use</span> <span class="ident">num_traits</span>::{<span class="ident">NumCast</span>, <span class="ident">FromPrimitive</span>, <span class="ident">ToPrimitive</span>, <span class="ident">Zero</span>, <span class="ident">One</span>}; <span class="kw">use</span> <span class="ident">num_complex</span>::{<span class="ident">Complex32</span>, <span class="ident">Complex64</span>}; <span class="comment">// Implements an unsafe trait for a list of types.</span> <span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">impl_unsafe</span> { (<span class="macro-nonterminal">$</span><span class="macro-nonterminal">trt</span>:<span class="ident">ident</span>: $( <span class="macro-nonterminal">$</span><span class="macro-nonterminal">ty</span>:<span class="ident">ident</span> ),<span class="op">+</span>) <span class="op">=></span> { $( <span class="kw">unsafe</span> <span class="kw">impl</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">trt</span> <span class="kw">for</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">ty</span> {} )<span class="op">+</span> } } <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"ocl-core-vector"</span>)]</span> <span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">ocl_vec</span>::<span class="ident">OclVec</span>; <span class="doccomment">/// A primitive type usable within `OpenCL` kernels.</span> <span class="doccomment">///</span> <span class="doccomment">/// Includes all of the signed, unsigned, and floating point 8 bit - 64 bit</span> <span class="doccomment">/// scalar primitives (ex.: cl_char, cl_uint, cl_double) (exception: cl_half)</span> <span class="doccomment">/// and their vector counterparts (ex.: cl_int4, cl_float3, cl_short16);</span> <span class="doccomment">///</span> <span class="doccomment">/// Can also be implemented for custom types as long as layout and</span> <span class="doccomment">/// alignment are conserved between Rust and OpenCL (repr "C").</span> <span class="kw">pub</span> <span class="kw">unsafe</span> <span class="kw">trait</span> <span class="ident">OclPrm</span>: <span class="ident">Debug</span> <span class="op">+</span> <span class="ident">Clone</span> <span class="op">+</span> <span class="ident">Copy</span> <span class="op">+</span> <span class="ident">Default</span> <span class="op">+</span> <span class="ident">PartialEq</span> <span class="op">+</span> <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="lifetime">'static</span> {} <span class="macro">impl_unsafe</span><span class="macro">!</span>(<span class="ident">OclPrm</span>: <span class="ident">u8</span>, <span class="ident">i8</span>, <span class="ident">u16</span>, <span class="ident">i16</span>, <span class="ident">u32</span>, <span class="ident">i32</span>, <span class="ident">u64</span>, <span class="ident">i64</span>, <span class="ident">usize</span>, <span class="ident">isize</span>, <span class="ident">f32</span>, <span class="ident">f64</span>, <span class="ident">Complex32</span>, <span class="ident">Complex64</span>); <span class="doccomment">/// A set of traits common to numeric built-in OpenCL scalar and vector</span> <span class="doccomment">/// primitives.</span> <span class="doccomment">///</span> <span class="doccomment">/// To describe the contents of buffers, etc., prefer using the more general</span> <span class="doccomment">/// `OclPrm` trait unless numeric operations are required.</span> <span class="kw">pub</span> <span class="kw">unsafe</span> <span class="kw">trait</span> <span class="ident">OclNum</span>: <span class="ident">Debug</span> <span class="op">+</span> <span class="ident">Display</span> <span class="op">+</span> <span class="ident">Clone</span> <span class="op">+</span> <span class="ident">Copy</span> <span class="op">+</span> <span class="ident">Default</span> <span class="op">+</span> <span class="ident">PartialOrd</span> <span class="op">+</span> <span class="ident">Zero</span><span class="op"><</span><span class="ident">Output</span><span class="op">=</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">One</span><span class="op"><</span><span class="ident">Output</span><span class="op">=</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">Add</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">Output</span><span class="op">=</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">Sub</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">Output</span><span class="op">=</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">Mul</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">Output</span><span class="op">=</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">Div</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">Output</span><span class="op">=</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">Rem</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">Output</span><span class="op">=</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">PartialEq</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">AddAssign</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">SubAssign</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">MulAssign</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">DivAssign</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">RemAssign</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">Sum</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">Product</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> <span class="op">+</span> <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="lifetime">'static</span> {} <span class="macro">impl_unsafe</span><span class="macro">!</span>(<span class="ident">OclNum</span>: <span class="ident">u8</span>, <span class="ident">i8</span>, <span class="ident">u16</span>, <span class="ident">i16</span>, <span class="ident">u32</span>, <span class="ident">i32</span>, <span class="ident">u64</span>, <span class="ident">i64</span>, <span class="ident">usize</span>, <span class="ident">isize</span>, <span class="ident">f32</span>, <span class="ident">f64</span>); <span class="doccomment">/// A scalar type usable within OpenCL kernels.</span> <span class="doccomment">///</span> <span class="doccomment">/// To describe the contents of buffers, etc., prefer using the more general</span> <span class="doccomment">/// `OclPrm` trait unless numeric operations are required.</span> <span class="kw">pub</span> <span class="kw">unsafe</span> <span class="kw">trait</span> <span class="ident">OclScl</span>: <span class="ident">OclPrm</span> <span class="op">+</span> <span class="ident">OclNum</span> <span class="op">+</span> <span class="ident">NumCast</span> <span class="op">+</span> <span class="ident">FromPrimitive</span> <span class="op">+</span> <span class="ident">ToPrimitive</span> {} <span class="macro">impl_unsafe</span><span class="macro">!</span>(<span class="ident">OclScl</span>: <span class="ident">u8</span>, <span class="ident">i8</span>, <span class="ident">u16</span>, <span class="ident">i16</span>, <span class="ident">u32</span>, <span class="ident">i32</span>, <span class="ident">u64</span>, <span class="ident">i64</span>, <span class="ident">usize</span>, <span class="ident">isize</span>, <span class="ident">f32</span>, <span class="ident">f64</span>); <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"ocl-core-vector"</span>)]</span> <span class="kw">mod</span> <span class="ident">ocl_vec</span> { <span class="kw">use</span> <span class="ident">traits</span>::{<span class="ident">OclPrm</span>, <span class="ident">OclNum</span>}; <span class="doccomment">/// A vector type usable within `OpenCL` kernels.</span> <span class="doccomment">///</span> <span class="doccomment">/// To describe the contents of buffers, etc., prefer using the more general</span> <span class="doccomment">/// `OclPrm` trait unless numeric operations are required.</span> <span class="kw">pub</span> <span class="kw">unsafe</span> <span class="kw">trait</span> <span class="ident">OclVec</span>: <span class="ident">OclPrm</span> <span class="op">+</span> <span class="ident">OclNum</span> {} <span class="kw">use</span> <span class="ident">vector</span>::{ <span class="ident">Char</span>, <span class="ident">Char2</span>, <span class="ident">Char3</span>, <span class="ident">Char4</span>, <span class="ident">Char8</span>, <span class="ident">Char16</span>, <span class="ident">Uchar</span>, <span class="ident">Uchar2</span>, <span class="ident">Uchar3</span>, <span class="ident">Uchar4</span>, <span class="ident">Uchar8</span>, <span class="ident">Uchar16</span>, <span class="ident">Short</span>, <span class="ident">Short2</span>, <span class="ident">Short3</span>, <span class="ident">Short4</span>, <span class="ident">Short8</span>, <span class="ident">Short16</span>, <span class="ident">Ushort</span>, <span class="ident">Ushort2</span>, <span class="ident">Ushort3</span>, <span class="ident">Ushort4</span>, <span class="ident">Ushort8</span>, <span class="ident">Ushort16</span>, <span class="ident">Int</span>, <span class="ident">Int2</span>, <span class="ident">Int3</span>, <span class="ident">Int4</span>, <span class="ident">Int8</span>, <span class="ident">Int16</span>, <span class="ident">Uint</span>, <span class="ident">Uint2</span>, <span class="ident">Uint3</span>, <span class="ident">Uint4</span>, <span class="ident">Uint8</span>, <span class="ident">Uint16</span>, <span class="ident">Long</span>, <span class="ident">Long2</span>, <span class="ident">Long3</span>, <span class="ident">Long4</span>, <span class="ident">Long8</span>, <span class="ident">Long16</span>, <span class="ident">Ulong</span>, <span class="ident">Ulong2</span>, <span class="ident">Ulong3</span>, <span class="ident">Ulong4</span>, <span class="ident">Ulong8</span>, <span class="ident">Ulong16</span>, <span class="ident">Float</span>, <span class="ident">Float2</span>, <span class="ident">Float3</span>, <span class="ident">Float4</span>, <span class="ident">Float8</span>, <span class="ident">Float16</span>, <span class="ident">Double</span>, <span class="ident">Double2</span>, <span class="ident">Double3</span>, <span class="ident">Double4</span>, <span class="ident">Double8</span>, <span class="ident">Double16</span> }; <span class="macro">impl_unsafe</span><span class="macro">!</span>(<span class="ident">OclNum</span>: <span class="ident">Char</span>, <span class="ident">Char2</span>, <span class="ident">Char3</span>, <span class="ident">Char4</span>, <span class="ident">Char8</span>, <span class="ident">Char16</span>, <span class="ident">Uchar</span>, <span class="ident">Uchar2</span>, <span class="ident">Uchar3</span>, <span class="ident">Uchar4</span>, <span class="ident">Uchar8</span>, <span class="ident">Uchar16</span>, <span class="ident">Short</span>, <span class="ident">Short2</span>, <span class="ident">Short3</span>, <span class="ident">Short4</span>, <span class="ident">Short8</span>, <span class="ident">Short16</span>, <span class="ident">Ushort</span>, <span class="ident">Ushort2</span>, <span class="ident">Ushort3</span>, <span class="ident">Ushort4</span>, <span class="ident">Ushort8</span>, <span class="ident">Ushort16</span>, <span class="ident">Int</span>, <span class="ident">Int2</span>, <span class="ident">Int3</span>, <span class="ident">Int4</span>, <span class="ident">Int8</span>, <span class="ident">Int16</span>, <span class="ident">Uint</span>, <span class="ident">Uint2</span>, <span class="ident">Uint3</span>, <span class="ident">Uint4</span>, <span class="ident">Uint8</span>, <span class="ident">Uint16</span>, <span class="ident">Long</span>, <span class="ident">Long2</span>, <span class="ident">Long3</span>, <span class="ident">Long4</span>, <span class="ident">Long8</span>, <span class="ident">Long16</span>, <span class="ident">Ulong</span>, <span class="ident">Ulong2</span>, <span class="ident">Ulong3</span>, <span class="ident">Ulong4</span>, <span class="ident">Ulong8</span>, <span class="ident">Ulong16</span>, <span class="ident">Float</span>, <span class="ident">Float2</span>, <span class="ident">Float3</span>, <span class="ident">Float4</span>, <span class="ident">Float8</span>, <span class="ident">Float16</span>, <span class="ident">Double</span>, <span class="ident">Double2</span>, <span class="ident">Double3</span>, <span class="ident">Double4</span>, <span class="ident">Double8</span>, <span class="ident">Double16</span> ); <span class="macro">impl_unsafe</span><span class="macro">!</span>(<span class="ident">OclPrm</span>: <span class="ident">Char</span>, <span class="ident">Char2</span>, <span class="ident">Char3</span>, <span class="ident">Char4</span>, <span class="ident">Char8</span>, <span class="ident">Char16</span>, <span class="ident">Uchar</span>, <span class="ident">Uchar2</span>, <span class="ident">Uchar3</span>, <span class="ident">Uchar4</span>, <span class="ident">Uchar8</span>, <span class="ident">Uchar16</span>, <span class="ident">Short</span>, <span class="ident">Short2</span>, <span class="ident">Short3</span>, <span class="ident">Short4</span>, <span class="ident">Short8</span>, <span class="ident">Short16</span>, <span class="ident">Ushort</span>, <span class="ident">Ushort2</span>, <span class="ident">Ushort3</span>, <span class="ident">Ushort4</span>, <span class="ident">Ushort8</span>, <span class="ident">Ushort16</span>, <span class="ident">Int</span>, <span class="ident">Int2</span>, <span class="ident">Int3</span>, <span class="ident">Int4</span>, <span class="ident">Int8</span>, <span class="ident">Int16</span>, <span class="ident">Uint</span>, <span class="ident">Uint2</span>, <span class="ident">Uint3</span>, <span class="ident">Uint4</span>, <span class="ident">Uint8</span>, <span class="ident">Uint16</span>, <span class="ident">Long</span>, <span class="ident">Long2</span>, <span class="ident">Long3</span>, <span class="ident">Long4</span>, <span class="ident">Long8</span>, <span class="ident">Long16</span>, <span class="ident">Ulong</span>, <span class="ident">Ulong2</span>, <span class="ident">Ulong3</span>, <span class="ident">Ulong4</span>, <span class="ident">Ulong8</span>, <span class="ident">Ulong16</span>, <span class="ident">Float</span>, <span class="ident">Float2</span>, <span class="ident">Float3</span>, <span class="ident">Float4</span>, <span class="ident">Float8</span>, <span class="ident">Float16</span>, <span class="ident">Double</span>, <span class="ident">Double2</span>, <span class="ident">Double3</span>, <span class="ident">Double4</span>, <span class="ident">Double8</span>, <span class="ident">Double16</span> ); <span class="macro">impl_unsafe</span><span class="macro">!</span>(<span class="ident">OclVec</span>: <span class="ident">Char</span>, <span class="ident">Char2</span>, <span class="ident">Char3</span>, <span class="ident">Char4</span>, <span class="ident">Char8</span>, <span class="ident">Char16</span>, <span class="ident">Uchar</span>, <span class="ident">Uchar2</span>, <span class="ident">Uchar3</span>, <span class="ident">Uchar4</span>, <span class="ident">Uchar8</span>, <span class="ident">Uchar16</span>, <span class="ident">Short</span>, <span class="ident">Short2</span>, <span class="ident">Short3</span>, <span class="ident">Short4</span>, <span class="ident">Short8</span>, <span class="ident">Short16</span>, <span class="ident">Ushort</span>, <span class="ident">Ushort2</span>, <span class="ident">Ushort3</span>, <span class="ident">Ushort4</span>, <span class="ident">Ushort8</span>, <span class="ident">Ushort16</span>, <span class="ident">Int</span>, <span class="ident">Int2</span>, <span class="ident">Int3</span>, <span class="ident">Int4</span>, <span class="ident">Int8</span>, <span class="ident">Int16</span>, <span class="ident">Uint</span>, <span class="ident">Uint2</span>, <span class="ident">Uint3</span>, <span class="ident">Uint4</span>, <span class="ident">Uint8</span>, <span class="ident">Uint16</span>, <span class="ident">Long</span>, <span class="ident">Long2</span>, <span class="ident">Long3</span>, <span class="ident">Long4</span>, <span class="ident">Long8</span>, <span class="ident">Long16</span>, <span class="ident">Ulong</span>, <span class="ident">Ulong2</span>, <span class="ident">Ulong3</span>, <span class="ident">Ulong4</span>, <span class="ident">Ulong8</span>, <span class="ident">Ulong16</span>, <span class="ident">Float</span>, <span class="ident">Float2</span>, <span class="ident">Float3</span>, <span class="ident">Float4</span>, <span class="ident">Float8</span>, <span class="ident">Float16</span>, <span class="ident">Double</span>, <span class="ident">Double2</span>, <span class="ident">Double3</span>, <span class="ident">Double4</span>, <span class="ident">Double8</span>, <span class="ident">Double16</span> ); } } <span class="comment">//=============================================================================</span> <span class="comment">//================================ BITFIELDS ==================================</span> <span class="comment">//=============================================================================</span> <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_device_type - bitfield</span> <span class="doccomment">///</span> <span class="doccomment">/// * `CL_DEVICE_TYPE_DEFAULT`: The default `OpenCL` device in the system.</span> <span class="doccomment">/// * `CL_DEVICE_TYPE_CPU`: An `OpenCL` device that is the host processor.</span> <span class="doccomment">/// The host processor runs the `OpenCL` implementations and is a single</span> <span class="doccomment">/// or multi-core CPU.</span> <span class="doccomment">/// * `CL_DEVICE_TYPE_GPU`: An `OpenCL` device that is a GPU. By this we</span> <span class="doccomment">/// mean that the device can also be used to accelerate a 3D API such as</span> <span class="doccomment">/// OpenGL or DirectX.</span> <span class="doccomment">/// * `CL_DEVICE_TYPE_ACCELERATOR`: Dedicated `OpenCL` accelerators (for</span> <span class="doccomment">/// example the IBM CELL Blade). These devices communicate with the host</span> <span class="doccomment">/// processor using a peripheral interconnect such as PCIe.</span> <span class="doccomment">/// * `CL_DEVICE_TYPE_ALL`: A union of all flags.</span> <span class="doccomment">///</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">DeviceType</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">DEFAULT</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">CPU</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; <span class="kw">const</span> <span class="ident">GPU</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">2</span>; <span class="kw">const</span> <span class="ident">ACCELERATOR</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">3</span>; <span class="kw">const</span> <span class="ident">CUSTOM</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">4</span>; <span class="kw">const</span> <span class="ident">ALL</span> <span class="op">=</span> <span class="number">0xFFFFFFFF</span>; } } <span class="kw">impl</span> <span class="ident">DeviceType</span> { <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-></span> <span class="ident">DeviceType</span> { <span class="ident">DeviceType</span>::<span class="ident">empty</span>() } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">system_default</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">DeviceType</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">DeviceType</span>::<span class="ident">DEFAULT</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">cpu</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">DeviceType</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">DeviceType</span>::<span class="ident">CPU</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">gpu</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">DeviceType</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">DeviceType</span>::<span class="ident">GPU</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">accelerator</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">DeviceType</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">DeviceType</span>::<span class="ident">ACCELERATOR</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">custom</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">DeviceType</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">DeviceType</span>::<span class="ident">CUSTOM</span> } <span class="comment">// #[inline] pub fn all() -> DeviceType { DeviceType::ALL }</span> } <span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">DeviceType</span> { <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-></span> <span class="ident">DeviceType</span> { <span class="ident">DeviceType</span>::<span class="ident">ALL</span> } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_TYPE_DEFAULT</span>: <span class="ident">DeviceType</span> <span class="op">=</span> <span class="ident">DeviceType</span>::<span class="ident">DEFAULT</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_TYPE_CPU</span>: <span class="ident">DeviceType</span> <span class="op">=</span> <span class="ident">DeviceType</span>::<span class="ident">CPU</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_TYPE_GPU</span>: <span class="ident">DeviceType</span> <span class="op">=</span> <span class="ident">DeviceType</span>::<span class="ident">GPU</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_TYPE_ACCELERATOR</span>: <span class="ident">DeviceType</span> <span class="op">=</span> <span class="ident">DeviceType</span>::<span class="ident">ACCELERATOR</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_TYPE_CUSTOM</span>: <span class="ident">DeviceType</span> <span class="op">=</span> <span class="ident">DeviceType</span>::<span class="ident">CUSTOM</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_TYPE_ALL</span>: <span class="ident">DeviceType</span> <span class="op">=</span> <span class="ident">DeviceType</span>::<span class="ident">ALL</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_device_fp_config - bitfield</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">DeviceFpConfig</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">DENORM</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">INF_NAN</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; <span class="kw">const</span> <span class="ident">ROUND_TO_NEAREST</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">2</span>; <span class="kw">const</span> <span class="ident">ROUND_TO_ZERO</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">3</span>; <span class="kw">const</span> <span class="ident">ROUND_TO_INF</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">4</span>; <span class="kw">const</span> <span class="ident">FMA</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">5</span>; <span class="kw">const</span> <span class="ident">SOFT_FLOAT</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">6</span>; <span class="kw">const</span> <span class="ident">CORRECTLY_ROUNDED_DIVIDE_SQRT</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">7</span>; } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FP_DENORM</span>: <span class="ident">DeviceFpConfig</span> <span class="op">=</span> <span class="ident">DeviceFpConfig</span>::<span class="ident">DENORM</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FP_INF_NAN</span>: <span class="ident">DeviceFpConfig</span> <span class="op">=</span> <span class="ident">DeviceFpConfig</span>::<span class="ident">INF_NAN</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FP_ROUND_TO_NEAREST</span>: <span class="ident">DeviceFpConfig</span> <span class="op">=</span> <span class="ident">DeviceFpConfig</span>::<span class="ident">ROUND_TO_NEAREST</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FP_ROUND_TO_ZERO</span>: <span class="ident">DeviceFpConfig</span> <span class="op">=</span> <span class="ident">DeviceFpConfig</span>::<span class="ident">ROUND_TO_ZERO</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FP_ROUND_TO_INF</span>: <span class="ident">DeviceFpConfig</span> <span class="op">=</span> <span class="ident">DeviceFpConfig</span>::<span class="ident">ROUND_TO_INF</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FP_FMA</span>: <span class="ident">DeviceFpConfig</span> <span class="op">=</span> <span class="ident">DeviceFpConfig</span>::<span class="ident">FMA</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FP_SOFT_FLOAT</span>: <span class="ident">DeviceFpConfig</span> <span class="op">=</span> <span class="ident">DeviceFpConfig</span>::<span class="ident">SOFT_FLOAT</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">FP_CORRECTLY_ROUNDED_DIVIDE_SQRT</span>: <span class="ident">DeviceFpConfig</span> <span class="op">=</span> <span class="ident">DeviceFpConfig</span>::<span class="ident">CORRECTLY_ROUNDED_DIVIDE_SQRT</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_device_exec_capabilities - bitfield</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">DeviceExecCapabilities</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">KERNEL</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">NATIVE_KERNEL</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">EXEC_KERNEL</span>: <span class="ident">DeviceExecCapabilities</span> <span class="op">=</span> <span class="ident">DeviceExecCapabilities</span>::<span class="ident">KERNEL</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">EXEC_NATIVE_KERNEL</span>: <span class="ident">DeviceExecCapabilities</span> <span class="op">=</span> <span class="ident">DeviceExecCapabilities</span>::<span class="ident">NATIVE_KERNEL</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_command_queue_properties - bitfield</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">CommandQueueProperties</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">OUT_OF_ORDER_EXEC_MODE_ENABLE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">PROFILING_ENABLE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; <span class="kw">const</span> <span class="ident">ON_DEVICE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">2</span>; <span class="kw">const</span> <span class="ident">ON_DEVICE_DEFAULT</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">3</span>; } } <span class="kw">impl</span> <span class="ident">CommandQueueProperties</span> { <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-></span> <span class="ident">CommandQueueProperties</span> { <span class="ident">CommandQueueProperties</span>::<span class="ident">empty</span>() } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">out_of_order</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">CommandQueueProperties</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">CommandQueueProperties</span>::<span class="ident">OUT_OF_ORDER_EXEC_MODE_ENABLE</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">profiling</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">CommandQueueProperties</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">CommandQueueProperties</span>::<span class="ident">PROFILING_ENABLE</span> } } <span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">CommandQueueProperties</span> { <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-></span> <span class="ident">CommandQueueProperties</span> { <span class="ident">CommandQueueProperties</span>::<span class="ident">empty</span>() } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</span>: <span class="ident">CommandQueueProperties</span> <span class="op">=</span> <span class="ident">CommandQueueProperties</span>::<span class="ident">OUT_OF_ORDER_EXEC_MODE_ENABLE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">QUEUE_PROFILING_ENABLE</span>: <span class="ident">CommandQueueProperties</span> <span class="op">=</span> <span class="ident">CommandQueueProperties</span>::<span class="ident">PROFILING_ENABLE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">QUEUE_ON_DEVICE</span>: <span class="ident">CommandQueueProperties</span> <span class="op">=</span> <span class="ident">CommandQueueProperties</span>::<span class="ident">ON_DEVICE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">QUEUE_ON_DEVICE_DEFAULT</span>: <span class="ident">CommandQueueProperties</span> <span class="op">=</span> <span class="ident">CommandQueueProperties</span>::<span class="ident">ON_DEVICE_DEFAULT</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_device_affinity_domain</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">DeviceAffinityDomain</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">NUMA</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">L4_CACHE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; <span class="kw">const</span> <span class="ident">L3_CACHE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">2</span>; <span class="kw">const</span> <span class="ident">L2_CACHE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">3</span>; <span class="kw">const</span> <span class="ident">L1_CACHE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">4</span>; <span class="kw">const</span> <span class="ident">NEXT_PARTITIONABLE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">5</span>; } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_AFFINITY_DOMAIN_NUMA</span>: <span class="ident">DeviceAffinityDomain</span> <span class="op">=</span> <span class="ident">DeviceAffinityDomain</span>::<span class="ident">NUMA</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_AFFINITY_DOMAIN_L4_CACHE</span>: <span class="ident">DeviceAffinityDomain</span> <span class="op">=</span> <span class="ident">DeviceAffinityDomain</span>::<span class="ident">L4_CACHE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_AFFINITY_DOMAIN_L3_CACHE</span>: <span class="ident">DeviceAffinityDomain</span> <span class="op">=</span> <span class="ident">DeviceAffinityDomain</span>::<span class="ident">L3_CACHE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_AFFINITY_DOMAIN_L2_CACHE</span>: <span class="ident">DeviceAffinityDomain</span> <span class="op">=</span> <span class="ident">DeviceAffinityDomain</span>::<span class="ident">L2_CACHE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_AFFINITY_DOMAIN_L1_CACHE</span>: <span class="ident">DeviceAffinityDomain</span> <span class="op">=</span> <span class="ident">DeviceAffinityDomain</span>::<span class="ident">L1_CACHE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE</span>: <span class="ident">DeviceAffinityDomain</span> <span class="op">=</span> <span class="ident">DeviceAffinityDomain</span>::<span class="ident">NEXT_PARTITIONABLE</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_mem_flags - bitfield</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">MemFlags</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">READ_WRITE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">WRITE_ONLY</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; <span class="kw">const</span> <span class="ident">READ_ONLY</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">2</span>; <span class="kw">const</span> <span class="ident">USE_HOST_PTR</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">3</span>; <span class="kw">const</span> <span class="ident">ALLOC_HOST_PTR</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">4</span>; <span class="kw">const</span> <span class="ident">COPY_HOST_PTR</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">5</span>; <span class="comment">// RESERVED 1<< 6;</span> <span class="kw">const</span> <span class="ident">HOST_WRITE_ONLY</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">7</span>; <span class="kw">const</span> <span class="ident">HOST_READ_ONLY</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">8</span>; <span class="kw">const</span> <span class="ident">HOST_NO_ACCESS</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">9</span>; } } <span class="kw">impl</span> <span class="ident">MemFlags</span> { <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="ident">MemFlags</span>::<span class="ident">empty</span>() } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">read_write</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">READ_WRITE</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">write_only</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">WRITE_ONLY</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">read_only</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">READ_ONLY</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">use_host_ptr</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">USE_HOST_PTR</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">alloc_host_ptr</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">ALLOC_HOST_PTR</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">copy_host_ptr</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">COPY_HOST_PTR</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">host_write_only</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">HOST_WRITE_ONLY</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">host_read_only</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">HOST_READ_ONLY</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">host_no_access</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MemFlags</span>::<span class="ident">HOST_NO_ACCESS</span> } } <span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">MemFlags</span> { <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-></span> <span class="ident">MemFlags</span> { <span class="ident">MemFlags</span>::<span class="ident">READ_WRITE</span> } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_READ_WRITE</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">READ_WRITE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_WRITE_ONLY</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">WRITE_ONLY</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_READ_ONLY</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">READ_ONLY</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_USE_HOST_PTR</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">USE_HOST_PTR</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_ALLOC_HOST_PTR</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">ALLOC_HOST_PTR</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_COPY_HOST_PTR</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">COPY_HOST_PTR</span>; <span class="comment">// RESERVED 1<< 6;</span> <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_HOST_WRITE_ONLY</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">HOST_WRITE_ONLY</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_HOST_READ_ONLY</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">HOST_READ_ONLY</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MEM_HOST_NO_ACCESS</span>: <span class="ident">MemFlags</span> <span class="op">=</span> <span class="ident">MemFlags</span>::<span class="ident">HOST_NO_ACCESS</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_mem_migration_flags - bitfield</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">MemMigrationFlags</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">OBJECT_HOST</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">OBJECT_CONTENT_UNDEFINED</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MIGRATE_MEM_OBJECT_HOST</span>: <span class="ident">MemMigrationFlags</span> <span class="op">=</span> <span class="ident">MemMigrationFlags</span>::<span class="ident">OBJECT_HOST</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED</span>: <span class="ident">MemMigrationFlags</span> <span class="op">=</span> <span class="ident">MemMigrationFlags</span>::<span class="ident">OBJECT_CONTENT_UNDEFINED</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_map_flags - bitfield</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">MapFlags</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">READ</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">WRITE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; <span class="kw">const</span> <span class="ident">WRITE_INVALIDATE_REGION</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">2</span>; } } <span class="kw">impl</span> <span class="ident">MapFlags</span> { <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-></span> <span class="ident">MapFlags</span> { <span class="ident">MapFlags</span>::<span class="ident">empty</span>() } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">read</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MapFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MapFlags</span>::<span class="ident">READ</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">write</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MapFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MapFlags</span>::<span class="ident">WRITE</span> } <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">write_invalidate_region</span>(<span class="self">self</span>) <span class="op">-></span> <span class="ident">MapFlags</span> { <span class="self">self</span> <span class="op">|</span> <span class="ident">MapFlags</span>::<span class="ident">WRITE_INVALIDATE_REGION</span> } } <span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">MapFlags</span> { <span class="attribute">#[<span class="ident">inline</span>]</span> <span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-></span> <span class="ident">MapFlags</span> { <span class="ident">MapFlags</span>::<span class="ident">empty</span>() } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MAP_READ</span>: <span class="ident">MapFlags</span> <span class="op">=</span> <span class="ident">MapFlags</span>::<span class="ident">READ</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MAP_WRITE</span>: <span class="ident">MapFlags</span> <span class="op">=</span> <span class="ident">MapFlags</span>::<span class="ident">WRITE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">MAP_WRITE_INVALIDATE_REGION</span>: <span class="ident">MapFlags</span> <span class="op">=</span> <span class="ident">MapFlags</span>::<span class="ident">WRITE_INVALIDATE_REGION</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_program_binary_type</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">ProgramBinaryType</span>: <span class="ident">u32</span> { <span class="kw">const</span> <span class="ident">NONE</span> <span class="op">=</span> <span class="number">0x0</span>; <span class="kw">const</span> <span class="ident">COMPILED_OBJECT</span> <span class="op">=</span> <span class="number">0x1</span>; <span class="kw">const</span> <span class="ident">LIBRARY</span> <span class="op">=</span> <span class="number">0x2</span>; <span class="kw">const</span> <span class="ident">EXECUTABLE</span> <span class="op">=</span> <span class="number">0x4</span>; } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">PROGRAM_BINARY_TYPE_NONE</span>: <span class="ident">ProgramBinaryType</span> <span class="op">=</span> <span class="ident">ProgramBinaryType</span>::<span class="ident">NONE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">PROGRAM_BINARY_TYPE_COMPILED_OBJECT</span>: <span class="ident">ProgramBinaryType</span> <span class="op">=</span> <span class="ident">ProgramBinaryType</span>::<span class="ident">COMPILED_OBJECT</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">PROGRAM_BINARY_TYPE_LIBRARY</span>: <span class="ident">ProgramBinaryType</span> <span class="op">=</span> <span class="ident">ProgramBinaryType</span>::<span class="ident">LIBRARY</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">PROGRAM_BINARY_TYPE_EXECUTABLE</span>: <span class="ident">ProgramBinaryType</span> <span class="op">=</span> <span class="ident">ProgramBinaryType</span>::<span class="ident">EXECUTABLE</span>; <span class="macro">bitflags</span><span class="macro">!</span> { <span class="doccomment">/// cl_kernel_arg_type_qualifer</span> <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">KernelArgTypeQualifier</span>: <span class="ident">u64</span> { <span class="kw">const</span> <span class="ident">NONE</span> <span class="op">=</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">CONST</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">0</span>; <span class="kw">const</span> <span class="ident">RESTRICT</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">1</span>; <span class="kw">const</span> <span class="ident">VOLATILE</span> <span class="op">=</span> <span class="number">1</span> <span class="op"><<</span> <span class="number">2</span>; } } <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">KERNEL_ARG_TYPE_NONE</span>: <span class="ident">KernelArgTypeQualifier</span> <span class="op">=</span> <span class="ident">KernelArgTypeQualifier</span>::<span class="ident">NONE</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">KERNEL_ARG_TYPE_CONST</span>: <span class="ident">KernelArgTypeQualifier</span> <span class="op">=</span> <span class="ident">KernelArgTypeQualifier</span>::<span class="ident">CONST</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">KERNEL_ARG_TYPE_RESTRICT</span>: <span class="ident">KernelArgTypeQualifier</span> <span class="op">=</span> <span class="ident">KernelArgTypeQualifier</span>::<span class="ident">RESTRICT</span>; <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">KERNEL_ARG_TYPE_VOLATILE</span>: <span class="ident">KernelArgTypeQualifier</span> <span class="op">=</span> <span class="ident">KernelArgTypeQualifier</span>::<span class="ident">VOLATILE</span>; <span class="comment">//=============================================================================</span> <span class="comment">//=============================== ENUMERATORS =================================</span> <span class="comment">//=============================================================================</span> <span class="comment">// #[derive(PartialEq, Debug, FromPrimitive)]</span> <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// The status of an OpenCL API call. Used for returning success/error codes.</span> <span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_camel_case_types</span>)]</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">Status</span> { <span class="ident">CL_SUCCESS</span> <span class="op">=</span> <span class="number">0</span>, <span class="ident">CL_DEVICE_NOT_FOUND</span> <span class="op">=</span> <span class="op">-</span><span class="number">1</span>, <span class="ident">CL_DEVICE_NOT_AVAILABLE</span> <span class="op">=</span> <span class="op">-</span><span class="number">2</span>, <span class="ident">CL_COMPILER_NOT_AVAILABLE</span> <span class="op">=</span> <span class="op">-</span><span class="number">3</span>, <span class="ident">CL_MEM_OBJECT_ALLOCATION_FAILURE</span> <span class="op">=</span> <span class="op">-</span><span class="number">4</span>, <span class="ident">CL_OUT_OF_RESOURCES</span> <span class="op">=</span> <span class="op">-</span><span class="number">5</span>, <span class="ident">CL_OUT_OF_HOST_MEMORY</span> <span class="op">=</span> <span class="op">-</span><span class="number">6</span>, <span class="ident">CL_PROFILING_INFO_NOT_AVAILABLE</span> <span class="op">=</span> <span class="op">-</span><span class="number">7</span>, <span class="ident">CL_MEM_COPY_OVERLAP</span> <span class="op">=</span> <span class="op">-</span><span class="number">8</span>, <span class="ident">CL_IMAGE_FORMAT_MISMATCH</span> <span class="op">=</span> <span class="op">-</span><span class="number">9</span>, <span class="ident">CL_IMAGE_FORMAT_NOT_SUPPORTED</span> <span class="op">=</span> <span class="op">-</span><span class="number">10</span>, <span class="ident">CL_BUILD_PROGRAM_FAILURE</span> <span class="op">=</span> <span class="op">-</span><span class="number">11</span>, <span class="ident">CL_MAP_FAILURE</span> <span class="op">=</span> <span class="op">-</span><span class="number">12</span>, <span class="ident">CL_MISALIGNED_SUB_BUFFER_OFFSET</span> <span class="op">=</span> <span class="op">-</span><span class="number">13</span>, <span class="ident">CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST</span> <span class="op">=</span> <span class="op">-</span><span class="number">14</span>, <span class="ident">CL_COMPILE_PROGRAM_FAILURE</span> <span class="op">=</span> <span class="op">-</span><span class="number">15</span>, <span class="ident">CL_LINKER_NOT_AVAILABLE</span> <span class="op">=</span> <span class="op">-</span><span class="number">16</span>, <span class="ident">CL_LINK_PROGRAM_FAILURE</span> <span class="op">=</span> <span class="op">-</span><span class="number">17</span>, <span class="ident">CL_DEVICE_PARTITION_FAILED</span> <span class="op">=</span> <span class="op">-</span><span class="number">18</span>, <span class="ident">CL_KERNEL_ARG_INFO_NOT_AVAILABLE</span> <span class="op">=</span> <span class="op">-</span><span class="number">19</span>, <span class="ident">CL_INVALID_VALUE</span> <span class="op">=</span> <span class="op">-</span><span class="number">30</span>, <span class="ident">CL_INVALID_DEVICE_TYPE</span> <span class="op">=</span> <span class="op">-</span><span class="number">31</span>, <span class="ident">CL_INVALID_PLATFORM</span> <span class="op">=</span> <span class="op">-</span><span class="number">32</span>, <span class="ident">CL_INVALID_DEVICE</span> <span class="op">=</span> <span class="op">-</span><span class="number">33</span>, <span class="ident">CL_INVALID_CONTEXT</span> <span class="op">=</span> <span class="op">-</span><span class="number">34</span>, <span class="ident">CL_INVALID_QUEUE_PROPERTIES</span> <span class="op">=</span> <span class="op">-</span><span class="number">35</span>, <span class="ident">CL_INVALID_COMMAND_QUEUE</span> <span class="op">=</span> <span class="op">-</span><span class="number">36</span>, <span class="ident">CL_INVALID_HOST_PTR</span> <span class="op">=</span> <span class="op">-</span><span class="number">37</span>, <span class="ident">CL_INVALID_MEM_OBJECT</span> <span class="op">=</span> <span class="op">-</span><span class="number">38</span>, <span class="ident">CL_INVALID_IMAGE_FORMAT_DESCRIPTOR</span> <span class="op">=</span> <span class="op">-</span><span class="number">39</span>, <span class="ident">CL_INVALID_IMAGE_SIZE</span> <span class="op">=</span> <span class="op">-</span><span class="number">40</span>, <span class="ident">CL_INVALID_SAMPLER</span> <span class="op">=</span> <span class="op">-</span><span class="number">41</span>, <span class="ident">CL_INVALID_BINARY</span> <span class="op">=</span> <span class="op">-</span><span class="number">42</span>, <span class="ident">CL_INVALID_BUILD_OPTIONS</span> <span class="op">=</span> <span class="op">-</span><span class="number">43</span>, <span class="ident">CL_INVALID_PROGRAM</span> <span class="op">=</span> <span class="op">-</span><span class="number">44</span>, <span class="ident">CL_INVALID_PROGRAM_EXECUTABLE</span> <span class="op">=</span> <span class="op">-</span><span class="number">45</span>, <span class="ident">CL_INVALID_KERNEL_NAME</span> <span class="op">=</span> <span class="op">-</span><span class="number">46</span>, <span class="ident">CL_INVALID_KERNEL_DEFINITION</span> <span class="op">=</span> <span class="op">-</span><span class="number">47</span>, <span class="ident">CL_INVALID_KERNEL</span> <span class="op">=</span> <span class="op">-</span><span class="number">48</span>, <span class="ident">CL_INVALID_ARG_INDEX</span> <span class="op">=</span> <span class="op">-</span><span class="number">49</span>, <span class="ident">CL_INVALID_ARG_VALUE</span> <span class="op">=</span> <span class="op">-</span><span class="number">50</span>, <span class="ident">CL_INVALID_ARG_SIZE</span> <span class="op">=</span> <span class="op">-</span><span class="number">51</span>, <span class="ident">CL_INVALID_KERNEL_ARGS</span> <span class="op">=</span> <span class="op">-</span><span class="number">52</span>, <span class="ident">CL_INVALID_WORK_DIMENSION</span> <span class="op">=</span> <span class="op">-</span><span class="number">53</span>, <span class="ident">CL_INVALID_WORK_GROUP_SIZE</span> <span class="op">=</span> <span class="op">-</span><span class="number">54</span>, <span class="ident">CL_INVALID_WORK_ITEM_SIZE</span> <span class="op">=</span> <span class="op">-</span><span class="number">55</span>, <span class="ident">CL_INVALID_GLOBAL_OFFSET</span> <span class="op">=</span> <span class="op">-</span><span class="number">56</span>, <span class="ident">CL_INVALID_EVENT_WAIT_LIST</span> <span class="op">=</span> <span class="op">-</span><span class="number">57</span>, <span class="ident">CL_INVALID_EVENT</span> <span class="op">=</span> <span class="op">-</span><span class="number">58</span>, <span class="ident">CL_INVALID_OPERATION</span> <span class="op">=</span> <span class="op">-</span><span class="number">59</span>, <span class="ident">CL_INVALID_GL_OBJECT</span> <span class="op">=</span> <span class="op">-</span><span class="number">60</span>, <span class="ident">CL_INVALID_BUFFER_SIZE</span> <span class="op">=</span> <span class="op">-</span><span class="number">61</span>, <span class="ident">CL_INVALID_MIP_LEVEL</span> <span class="op">=</span> <span class="op">-</span><span class="number">62</span>, <span class="ident">CL_INVALID_GLOBAL_WORK_SIZE</span> <span class="op">=</span> <span class="op">-</span><span class="number">63</span>, <span class="ident">CL_INVALID_PROPERTY</span> <span class="op">=</span> <span class="op">-</span><span class="number">64</span>, <span class="ident">CL_INVALID_IMAGE_DESCRIPTOR</span> <span class="op">=</span> <span class="op">-</span><span class="number">65</span>, <span class="ident">CL_INVALID_COMPILER_OPTIONS</span> <span class="op">=</span> <span class="op">-</span><span class="number">66</span>, <span class="ident">CL_INVALID_LINKER_OPTIONS</span> <span class="op">=</span> <span class="op">-</span><span class="number">67</span>, <span class="ident">CL_INVALID_DEVICE_PARTITION_COUNT</span> <span class="op">=</span> <span class="op">-</span><span class="number">68</span>, <span class="ident">CL_INVALID_PIPE_SIZE</span> <span class="op">=</span> <span class="op">-</span><span class="number">69</span>, <span class="ident">CL_INVALID_DEVICE_QUEUE</span> <span class="op">=</span> <span class="op">-</span><span class="number">70</span>, <span class="ident">CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</span> <span class="op">=</span> <span class="op">-</span><span class="number">1000</span>, <span class="ident">CL_PLATFORM_NOT_FOUND_KHR</span> <span class="op">=</span> <span class="op">-</span><span class="number">1001</span>, <span class="ident">CL_NV_INVALID_MEM_ACCESS</span> <span class="op">=</span> <span class="op">-</span><span class="number">9999</span>, } } <span class="kw">impl</span> <span class="ident">std</span>::<span class="ident">fmt</span>::<span class="ident">Display</span> <span class="kw">for</span> <span class="ident">Status</span> { <span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">fmtr</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">std</span>::<span class="ident">fmt</span>::<span class="ident">Formatter</span>) <span class="op">-></span> <span class="ident">std</span>::<span class="ident">fmt</span>::<span class="prelude-ty">Result</span> { <span class="macro">write</span><span class="macro">!</span>(<span class="ident">fmtr</span>, <span class="string">"{:?}"</span>, <span class="self">self</span>) } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// specify the texture target type</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">GlTextureTarget</span> { <span class="ident">GlTexture1d</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_1D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTexture1dArray</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_1D_ARRAY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTextureBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTexture2d</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_2D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTexture2dArray</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_2D_ARRAY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTexture3d</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_3D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTextureCubeMapPositiveX</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_CUBE_MAP_POSITIVE_X</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTextureCubeMapPositiveY</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_CUBE_MAP_POSITIVE_Y</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTextureCubeMapPositiveZ</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_CUBE_MAP_POSITIVE_Z</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTextureCubeMapNegativeX</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_CUBE_MAP_NEGATIVE_X</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTextureCubeMapNegativeY</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_CUBE_MAP_NEGATIVE_Y</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTextureCubeMapNegativeZ</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_CUBE_MAP_NEGATIVE_Z</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlTextureRectangle</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">GL_TEXTURE_RECTANGLE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="comment">// cl_gl_object_type = 0x2000 - 0x200F enum values are currently taken</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ClGlObjectType</span> { <span class="ident">ClGlObjectBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_OBJECT_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ClGlObjectTexture2D</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_OBJECT_TEXTURE2D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ClGlObjectTexture3D</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_OBJECT_TEXTURE3D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ClGlObjectRenderbuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_OBJECT_RENDERBUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ClGlObjectTexture2DArray</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_OBJECT_TEXTURE2D_ARRAY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ClGlObjectTexture1D</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_OBJECT_TEXTURE1D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ClGlObjectTexture1DArray</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_OBJECT_TEXTURE1D_ARRAY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ClGlObjectTextureBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_OBJECT_TEXTURE_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// Specifies the number of channels and the channel layout i.e. the memory layout in which channels are stored in the image. Valid values are described in the table below. (from SDK)</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ImageChannelOrder</span> { <span class="ident">R</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_R</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">A</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_A</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Rg</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_RG</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Ra</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_RA</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// This format can only be used if channel data type = CL_UNORM_SHORT_565, CL_UNORM_SHORT_555 or CL_UNORM_INT101010:</span> <span class="ident">Rgb</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_RGB</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Rgba</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_RGBA</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// This format can only be used if channel data type = CL_UNORM_INT8, CL_SNORM_INT8, CL_SIGNED_INT8 or CL_UNSIGNED_INT8:</span> <span class="ident">Bgra</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_BGRA</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// This format can only be used if channel data type = CL_UNORM_INT8, CL_SNORM_INT8, CL_SIGNED_INT8 or CL_UNSIGNED_INT8:</span> <span class="ident">Argb</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_ARGB</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// This format can only be used if channel data type = CL_UNORM_INT8, CL_UNORM_INT16, CL_SNORM_INT8, CL_SNORM_INT16, CL_HALF_FLOAT, or CL_FLOAT:</span> <span class="ident">Intensity</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_INTENSITY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// This format can only be used if channel data type = CL_UNORM_INT8, CL_UNORM_INT16, CL_SNORM_INT8, CL_SNORM_INT16, CL_HALF_FLOAT, or CL_FLOAT:</span> <span class="ident">Luminance</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_LUMINANCE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Rx</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_Rx</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Rgx</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_RGx</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// This format can only be used if channel data type = CL_UNORM_SHORT_565, CL_UNORM_SHORT_555 or CL_UNORM_INT101010:</span> <span class="ident">Rgbx</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_RGBx</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Depth</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEPTH</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">DepthStencil</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEPTH_STENCIL</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// Describes the size of the channel data type. The number of bits per element determined by the image_channel_data_type and image_channel_order must be a power of two. The list of supported values is described in the table below. (from SDK)</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ImageChannelDataType</span> { <span class="comment">// Each channel component is a normalized signed 8-bit integer value:</span> <span class="ident">SnormInt8</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SNORM_INT8</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is a normalized signed 16-bit integer value:</span> <span class="ident">SnormInt16</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SNORM_INT16</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is a normalized unsigned 8-bit integer value:</span> <span class="ident">UnormInt8</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_INT8</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is a normalized unsigned 16-bit integer value:</span> <span class="ident">UnormInt16</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_INT16</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Represents a normalized 5-6-5 3-channel RGB image. The channel order must be CL_RGB or CL_RGBx:</span> <span class="ident">UnormShort565</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_SHORT_565</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Represents a normalized x-5-5-5 4-channel xRGB image. The channel order must be CL_RGB or CL_RGBx:</span> <span class="ident">UnormShort555</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_SHORT_555</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Represents a normalized x-10-10-10 4-channel xRGB image. The channel order must be CL_RGB or CL_RGBx:</span> <span class="ident">UnormInt101010</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_INT_101010</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is an unnormalized signed 8-bit integer value:</span> <span class="ident">SignedInt8</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SIGNED_INT8</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is an unnormalized signed 16-bit integer value:</span> <span class="ident">SignedInt16</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SIGNED_INT16</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is an unnormalized signed 32-bit integer value:</span> <span class="ident">SignedInt32</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SIGNED_INT32</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is an unnormalized unsigned 8-bit integer value:</span> <span class="ident">UnsignedInt8</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNSIGNED_INT8</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is an unnormalized unsigned 16-bit integer value:</span> <span class="ident">UnsignedInt16</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNSIGNED_INT16</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is an unnormalized unsigned 32-bit integer value:</span> <span class="ident">UnsignedInt32</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNSIGNED_INT32</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is a 16-bit half-float value:</span> <span class="ident">HalfFloat</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_HALF_FLOAT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is a single precision floating-point value:</span> <span class="ident">Float</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_FLOAT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// Each channel component is a normalized unsigned 24-bit integer value:</span> <span class="ident">UnormInt24</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_INT24</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_bool</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">Cbool</span> { <span class="ident">False</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_FALSE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">True</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_TRUE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_bool: Polling</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">Polling</span> { <span class="ident">Blocking</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_BLOCKING</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NonBlocking</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_NON_BLOCKING</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_platform_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">PlatformInfo</span> { <span class="ident">Profile</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PLATFORM_PROFILE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Version</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PLATFORM_VERSION</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Name</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PLATFORM_NAME</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Vendor</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PLATFORM_VENDOR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Extensions</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PLATFORM_EXTENSIONS</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_device_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">DeviceInfo</span> { <span class="ident">Type</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_TYPE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">VendorId</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_VENDOR_ID</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxComputeUnits</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_COMPUTE_UNITS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxWorkItemDimensions</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxWorkGroupSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_WORK_GROUP_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxWorkItemSizes</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_WORK_ITEM_SIZES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredVectorWidthChar</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredVectorWidthShort</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredVectorWidthInt</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredVectorWidthLong</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredVectorWidthFloat</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredVectorWidthDouble</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxClockFrequency</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_CLOCK_FREQUENCY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">AddressBits</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_ADDRESS_BITS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxReadImageArgs</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_READ_IMAGE_ARGS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxWriteImageArgs</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_WRITE_IMAGE_ARGS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxMemAllocSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_MEM_ALLOC_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image2dMaxWidth</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE2D_MAX_WIDTH</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image2dMaxHeight</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE2D_MAX_HEIGHT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image3dMaxWidth</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE3D_MAX_WIDTH</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image3dMaxHeight</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE3D_MAX_HEIGHT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image3dMaxDepth</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE3D_MAX_DEPTH</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ImageSupport</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE_SUPPORT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxParameterSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_PARAMETER_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxSamplers</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_SAMPLERS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MemBaseAddrAlign</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MEM_BASE_ADDR_ALIGN</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MinDataTypeAlignSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">SingleFpConfig</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_SINGLE_FP_CONFIG</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlobalMemCacheType</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_GLOBAL_MEM_CACHE_TYPE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlobalMemCachelineSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlobalMemCacheSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_GLOBAL_MEM_CACHE_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlobalMemSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_GLOBAL_MEM_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxConstantBufferSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MaxConstantArgs</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_MAX_CONSTANT_ARGS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">LocalMemType</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_LOCAL_MEM_TYPE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">LocalMemSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_LOCAL_MEM_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ErrorCorrectionSupport</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_ERROR_CORRECTION_SUPPORT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ProfilingTimerResolution</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PROFILING_TIMER_RESOLUTION</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">EndianLittle</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_ENDIAN_LITTLE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Available</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_AVAILABLE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CompilerAvailable</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_COMPILER_AVAILABLE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ExecutionCapabilities</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_EXECUTION_CAPABILITIES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">QueueProperties</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_QUEUE_PROPERTIES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Name</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_NAME</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Vendor</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_VENDOR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">DriverVersion</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DRIVER_VERSION</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Profile</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PROFILE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Version</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_VERSION</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Extensions</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_EXTENSIONS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Platform</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PLATFORM</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">DoubleFpConfig</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_DOUBLE_FP_CONFIG</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">HalfFpConfig</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_HALF_FP_CONFIG</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredVectorWidthHalf</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">HostUnifiedMemory</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_HOST_UNIFIED_MEMORY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NativeVectorWidthChar</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NativeVectorWidthShort</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NativeVectorWidthInt</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_NATIVE_VECTOR_WIDTH_INT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NativeVectorWidthLong</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NativeVectorWidthFloat</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NativeVectorWidthDouble</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NativeVectorWidthHalf</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">OpenclCVersion</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_OPENCL_C_VERSION</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">LinkerAvailable</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_LINKER_AVAILABLE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">BuiltInKernels</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_BUILT_IN_KERNELS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ImageMaxBufferSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE_MAX_BUFFER_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ImageMaxArraySize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE_MAX_ARRAY_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ParentDevice</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARENT_DEVICE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PartitionMaxSubDevices</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARTITION_MAX_SUB_DEVICES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PartitionProperties</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARTITION_PROPERTIES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PartitionAffinityDomain</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARTITION_AFFINITY_DOMAIN</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PartitionType</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARTITION_TYPE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReferenceCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_REFERENCE_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredInteropUserSync</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PREFERRED_INTEROP_USER_SYNC</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PrintfBufferSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PRINTF_BUFFER_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ImagePitchAlignment</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE_PITCH_ALIGNMENT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ImageBaseAddressAlignment</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_mem_cache_type</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">DeviceMemCacheType</span> { <span class="prelude-val">None</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_NONE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReadOnlyCache</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_READ_ONLY_CACHE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReadWriteCache</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_READ_WRITE_CACHE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_device_local_mem_type</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">DeviceLocalMemType</span> { <span class="prelude-val">None</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_NONE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Local</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_LOCAL</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Global</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GLOBAL</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_context_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ContextInfo</span> { <span class="ident">ReferenceCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_REFERENCE_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Devices</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_DEVICES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Properties</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_PROPERTIES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NumDevices</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_NUM_DEVICES</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_gl_context_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">GlContextInfo</span> { <span class="comment">// Return the CL device currently associated with the specified OpenGL context.</span> <span class="ident">CurrentDevice</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="comment">// List of all CL devices which may be associated with the specified OpenGL context.</span> <span class="ident">Devices</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICES_FOR_GL_CONTEXT_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="comment">// [TODO]: Do proper auto-detection of available OpenGL context type.</span> <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">target_os</span> <span class="op">=</span> <span class="string">"macos"</span>)]</span> <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">CL_CGL_SHAREGROUP_KHR_OS_SPECIFIC</span>: <span class="ident">isize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE</span>; <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">target_os</span> <span class="op">=</span> <span class="string">"macos"</span>))]</span> <span class="kw">pub</span> <span class="kw">const</span> <span class="ident">CL_CGL_SHAREGROUP_KHR_OS_SPECIFIC</span>: <span class="ident">isize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CGL_SHAREGROUP_KHR</span>; <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_context_info + cl_context_properties</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ContextProperty</span> { <span class="ident">Platform</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_PLATFORM</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">InteropUserSync</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_INTEROP_USER_SYNC</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">D3d10DeviceKhr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_D3D10_DEVICE_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlContextKhr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GL_CONTEXT_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">EglDisplayKhr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_EGL_DISPLAY_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlxDisplayKhr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_GLX_DISPLAY_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CglSharegroupKhr</span> <span class="op">=</span> <span class="ident">CL_CGL_SHAREGROUP_KHR_OS_SPECIFIC</span>, <span class="ident">WglHdcKhr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_WGL_HDC_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">AdapterD3d9Khr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_ADAPTER_D3D9_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">AdapterD3d9exKhr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_ADAPTER_D3D9EX_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">AdapterDxvaKhr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_ADAPTER_DXVA_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">D3d11DeviceKhr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_D3D11_DEVICE_KHR</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_context_info + cl_context_properties</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ContextInfoOrPropertiesPointerType</span> { <span class="ident">Platform</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_PLATFORM</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">InteropUserSync</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_CONTEXT_INTEROP_USER_SYNC</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// [INCOMPLETE] cl_device_partition_property</span> <span class="doccomment">///</span> <span class="doccomment">/// [FIXME]: This types variants should also contain data described in:</span> <span class="doccomment">/// [https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateSubDevices.html]</span> <span class="doccomment">/// (https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateSubDevices.html)</span> <span class="doccomment">///</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">DevicePartitionProperty</span> { <span class="ident">Equally</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARTITION_EQUALLY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ByCounts</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARTITION_BY_COUNTS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ByCountsListEnd</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARTITION_BY_COUNTS_LIST_END</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ByAffinityDomain</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_command_queue_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">CommandQueueInfo</span> { <span class="ident">Context</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_QUEUE_CONTEXT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Device</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_QUEUE_DEVICE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReferenceCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_QUEUE_REFERENCE_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Properties</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_QUEUE_PROPERTIES</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_channel_type</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ChannelType</span> { <span class="ident">SnormInt8</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SNORM_INT8</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">SnormInt16</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SNORM_INT16</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnormInt8</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_INT8</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnormInt16</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_INT16</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnormShort565</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_SHORT_565</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnormShort555</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_SHORT_555</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnormInt101010</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_INT_101010</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">SignedInt8</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SIGNED_INT8</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">SignedInt16</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SIGNED_INT16</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">SignedInt32</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SIGNED_INT32</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnsignedInt8</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNSIGNED_INT8</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnsignedInt16</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNSIGNED_INT16</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnsignedInt32</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNSIGNED_INT32</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">HalfFloat</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_HALF_FLOAT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Float</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_FLOAT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnormInt24</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_UNORM_INT24</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_mem_object_type</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">MemObjectType</span> { <span class="ident">Buffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_OBJECT_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image2d</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_OBJECT_IMAGE2D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image3d</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_OBJECT_IMAGE3D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image2dArray</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_OBJECT_IMAGE2D_ARRAY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image1d</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_OBJECT_IMAGE1D</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image1dArray</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_OBJECT_IMAGE1D_ARRAY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Image1dBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_OBJECT_IMAGE1D_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_mem_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">MemInfo</span> { <span class="ident">Type</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_TYPE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Flags</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_FLAGS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Size</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">HostPtr</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_HOST_PTR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MapCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_MAP_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReferenceCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_REFERENCE_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Context</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_CONTEXT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">AssociatedMemobject</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_ASSOCIATED_MEMOBJECT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Offset</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_MEM_OFFSET</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_image_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ImageInfo</span> { <span class="ident">Format</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_FORMAT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ElementSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_ELEMENT_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">RowPitch</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_ROW_PITCH</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">SlicePitch</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_SLICE_PITCH</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Width</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_WIDTH</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Height</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_HEIGHT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Depth</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_DEPTH</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ArraySize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_ARRAY_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Buffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NumMipLevels</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_NUM_MIP_LEVELS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NumSamples</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_IMAGE_NUM_SAMPLES</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_addressing_mode</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">AddressingMode</span> { <span class="prelude-val">None</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_ADDRESS_NONE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ClampToEdge</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_ADDRESS_CLAMP_TO_EDGE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Clamp</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_ADDRESS_CLAMP</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Repeat</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_ADDRESS_REPEAT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MirroredRepeat</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_ADDRESS_MIRRORED_REPEAT</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_filter_mode</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">FilterMode</span> { <span class="ident">Nearest</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_FILTER_NEAREST</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Linear</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_FILTER_LINEAR</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_sampler_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">SamplerInfo</span> { <span class="ident">ReferenceCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SAMPLER_REFERENCE_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Context</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SAMPLER_CONTEXT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NormalizedCoords</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SAMPLER_NORMALIZED_COORDS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">AddressingMode</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SAMPLER_ADDRESSING_MODE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">FilterMode</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SAMPLER_FILTER_MODE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_program_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ProgramInfo</span> { <span class="ident">ReferenceCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_REFERENCE_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Context</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_CONTEXT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NumDevices</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_NUM_DEVICES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Devices</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_DEVICES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Source</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_SOURCE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">BinarySizes</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_BINARY_SIZES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Binaries</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_BINARIES</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NumKernels</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_NUM_KERNELS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">KernelNames</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_KERNEL_NAMES</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_program_build_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ProgramBuildInfo</span> { <span class="ident">BuildStatus</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_BUILD_STATUS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">BuildOptions</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_BUILD_OPTIONS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">BuildLog</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_BUILD_LOG</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">BinaryType</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROGRAM_BINARY_TYPE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_build_status</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ProgramBuildStatus</span> { <span class="ident">Success</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_BUILD_SUCCESS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="prelude-val">None</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_BUILD_NONE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Error</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_BUILD_ERROR</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">InProgress</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_BUILD_IN_PROGRESS</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_kernel_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">KernelInfo</span> { <span class="ident">FunctionName</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_FUNCTION_NAME</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NumArgs</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_NUM_ARGS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReferenceCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_REFERENCE_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Context</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_CONTEXT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Program</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_PROGRAM</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Attributes</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ATTRIBUTES</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_kernel_arg_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">KernelArgInfo</span> { <span class="ident">AddressQualifier</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ADDRESS_QUALIFIER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">AccessQualifier</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ACCESS_QUALIFIER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">TypeName</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_TYPE_NAME</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">TypeQualifier</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_TYPE_QUALIFIER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Name</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_NAME</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_kernel_arg_address_qualifier</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">KernelArgAddressQualifier</span> { <span class="ident">Global</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ADDRESS_GLOBAL</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Local</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ADDRESS_LOCAL</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Constant</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ADDRESS_CONSTANT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Private</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ADDRESS_PRIVATE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_kernel_arg_access_qualifier</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">KernelArgAccessQualifier</span> { <span class="ident">ReadOnly</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ACCESS_READ_ONLY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">WriteOnly</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ACCESS_WRITE_ONLY</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReadWrite</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ACCESS_READ_WRITE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="prelude-val">None</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_ARG_ACCESS_NONE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_kernel_work_group_info</span> <span class="doccomment">///</span> <span class="doccomment">/// [NOTE] PrivateMemSize: If device is not a custom device or kernel is not a built-in</span> <span class="doccomment">/// kernel, clGetKernelArgInfo returns the error CL_INVALID_VALUE:</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">KernelWorkGroupInfo</span> { <span class="ident">WorkGroupSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_WORK_GROUP_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CompileWorkGroupSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_COMPILE_WORK_GROUP_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">LocalMemSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_LOCAL_MEM_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PreferredWorkGroupSizeMultiple</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">PrivateMemSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_PRIVATE_MEM_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">GlobalWorkSize</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_KERNEL_GLOBAL_WORK_SIZE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_event_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">EventInfo</span> { <span class="ident">CommandQueue</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_EVENT_COMMAND_QUEUE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CommandType</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_EVENT_COMMAND_TYPE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReferenceCount</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_EVENT_REFERENCE_COUNT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CommandExecutionStatus</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_EVENT_COMMAND_EXECUTION_STATUS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Context</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_EVENT_CONTEXT</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_command_type</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">CommandType</span> { <span class="ident">NdrangeKernel</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_NDRANGE_KERNEL</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Task</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_TASK</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">NativeKernel</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_NATIVE_KERNEL</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReadBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_READ_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">WriteBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_WRITE_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CopyBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_COPY_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReadImage</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_READ_IMAGE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">WriteImage</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_WRITE_IMAGE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CopyImage</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_COPY_IMAGE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CopyImageToBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_COPY_IMAGE_TO_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CopyBufferToImage</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_COPY_BUFFER_TO_IMAGE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MapBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_MAP_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MapImage</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_MAP_IMAGE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">UnmapMemObject</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_UNMAP_MEM_OBJECT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Marker</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_MARKER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">AcquireGlObjects</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_ACQUIRE_GL_OBJECTS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReleaseGlObjects</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_RELEASE_GL_OBJECTS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">ReadBufferRect</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_READ_BUFFER_RECT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">WriteBufferRect</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_WRITE_BUFFER_RECT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">CopyBufferRect</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_COPY_BUFFER_RECT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">User</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_USER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Barrier</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_BARRIER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">MigrateMemObjects</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_MIGRATE_MEM_OBJECTS</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">FillBuffer</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_FILL_BUFFER</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">FillImage</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMMAND_FILL_IMAGE</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// command execution status</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">CommandExecutionStatus</span> { <span class="ident">Complete</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_COMPLETE</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Running</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_RUNNING</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Submitted</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_SUBMITTED</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Queued</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_QUEUED</span> <span class="kw">as</span> <span class="ident">isize</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_buffer_create_type</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">BufferCreateType</span> { <span class="ident">Region</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_BUFFER_CREATE_TYPE_REGION</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">__DUMMY</span>, } } <span class="macro">enum_from_primitive</span><span class="macro">!</span> { <span class="doccomment">/// cl_profiling_info</span> <span class="attribute">#[<span class="ident">repr</span>(<span class="ident">C</span>)]</span> <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>, <span class="ident">Eq</span>, <span class="ident">Hash</span>)]</span> <span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ProfilingInfo</span> { <span class="ident">Queued</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROFILING_COMMAND_QUEUED</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Submit</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROFILING_COMMAND_SUBMIT</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">Start</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROFILING_COMMAND_START</span> <span class="kw">as</span> <span class="ident">isize</span>, <span class="ident">End</span> <span class="op">=</span> <span class="ident">ffi</span>::<span class="ident">CL_PROFILING_COMMAND_END</span> <span class="kw">as</span> <span class="ident">isize</span>, } } </pre> </section> <section id='search' class="content hidden"></section> <section class="footer"></section> <aside id="help" class="hidden"> <div> <h1 class="hidden">Help</h1> <div class="shortcuts"> <h2>Keyboard Shortcuts</h2> <dl> <dt><kbd>?</kbd></dt> <dd>Show this help dialog</dd> <dt><kbd>S</kbd></dt> <dd>Focus the search field</dd> <dt><kbd>↑</kbd></dt> <dd>Move up in search results</dd> <dt><kbd>↓</kbd></dt> <dd>Move down in search results</dd> <dt><kbd>↹</kbd></dt> <dd>Switch tab</dd> <dt><kbd>⏎</kbd></dt> <dd>Go to active search result</dd> <dt><kbd>+</kbd></dt> <dd>Expand all sections</dd> <dt><kbd>-</kbd></dt> <dd>Collapse all sections</dd> </dl> </div> <div class="infos"> <h2>Search Tricks</h2> <p> Prefix searches with a type followed by a colon (e.g. <code>fn:</code>) to restrict the search to a given type. </p> <p> Accepted types are: <code>fn</code>, <code>mod</code>, <code>struct</code>, <code>enum</code>, <code>trait</code>, <code>type</code>, <code>macro</code>, and <code>const</code>. </p> <p> Search functions by type signature (e.g. <code>vec -> usize</code> or <code>* -> vec</code>) </p> </div> </div> </aside> <script> window.rootPath = "../../"; window.currentCrate = "ocl_core"; </script> <script src="../../main.js"></script> <script defer src="../../search-index.js"></script> </body> </html>