/** Ċ Ġ* ĠCopyright Ġ[ 2 0 1 9 ] Ġ[ Dom in ic ĠF is cher ] Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . k gl . v ulkan . handles Ċ Ċ import Ġcom . k gl . core .* Ċ import Ġcom . k gl . v ulkan . dsl s .* Ċ import Ġcom . k gl . v ulkan . utils .* Ċ import Ġcv ulkan .* Ċ import Ġkotlinx . c interop .* Ċ Ċ actual Ġclass ĠF ence ( override Ġval Ġptr : ĠVk Fence , Ġactual Ġval Ġdevice : ĠDevice ) Ġ: ĠVk Handle Native < Vk Fence >(), ĠVk Handle Ġ{ Ċ ĉ internal Ġval Ġdispatch Table Ġ= Ġdevice . dispatch Table ĊĊ ĉ override Ġfun Ġclose () Ġ{ Ċĉ ĉ val Ġf ence Ġ= Ġthis Ċĉ ĉ val Ġdevice Ġ= Ġf ence . device Ċĉ ĉ Virtual Stack . push () Ċĉ ĉ try Ġ{ Ċĉĉ ĉ dispatch Table . vk Destroy Fence ( device . to Vk Type (), Ġf ence . to Vk Type (), Ġnull ) Ċĉ ĉ } Ġfinally Ġ{ Ċĉĉ ĉ Virtual Stack . pop () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ actual Ġval Ġis Sign alled : ĠBoolean Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ val Ġf ence Ġ= Ġthis Ċĉĉ ĉ val Ġdevice Ġ= Ġf ence . device Ċĉĉ ĉ Virtual Stack . push () Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ val Ġresult Ġ= Ġdispatch Table . vkGet Fence Status ( device . to Vk Type (), Ġf ence . to Vk Type ()) Ċĉĉĉ ĉ return Ġwhen Ġ( result ) Ġ{ Ċĉĉĉĉ ĉ VK _ SUCCESS Ġ-> Ġtrue Ċĉĉĉĉ ĉ VK _ NOT _ READY Ġ-> Ġfalse Ċĉĉĉĉ ĉ else Ġ-> Ġhandle Vk Result ( result ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġfinally Ġ{ Ċĉĉĉ ĉ Virtual Stack . pop () Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ actual Ġfun Ġget Fd KHR ( block : ĠF ence Get Fd Info KHR Builder . () Ġ-> ĠUnit ): ĠInt Ġ{ Ċĉ ĉ val Ġf ence Ġ= Ġthis Ċĉ ĉ val Ġdevice Ġ= Ġf ence . device Ċĉ ĉ Virtual Stack . push () Ċĉ ĉ try Ġ{ Ċĉĉ ĉ val Ġtarget Ġ= ĠVirtual Stack . alloc < Vk Fence Get Fd Info KHR >(). ptr Ċĉĉ ĉ val Ġbuilder Ġ= ĠF ence Get Fd Info KHR Builder ( target . point ed ) Ċĉĉ ĉ builder . init ( fence ) Ċĉĉ ĉ builder . apply ( block ) Ċĉĉ ĉ val Ġoutput Var Ġ= ĠVirtual Stack . alloc < Int Var >() Ċĉĉ ĉ val Ġoutput Ptr Ġ= Ġoutput Var . ptr Ċĉĉ ĉ val Ġresult Ġ= Ġdispatch Table . vkGet Fence Fd KHR !! ( device . to Vk Type (), Ġtarget , Ġoutput Ptr ) Ċĉĉ ĉ if Ġ( result Ġ!= ĠVK _ SUCCESS ) Ġhandle Vk Result ( result ) Ċĉĉ ĉ return Ġoutput Var . value Ċĉ ĉ } Ġfinally Ġ{ Ċĉĉ ĉ Virtual Stack . pop () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ actual Ġfun Ġimport Fd KHR ( block : ĠImport Fence Fd Info KHR Builder . () Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ val Ġf ence Ġ= Ġthis Ċĉ ĉ val Ġdevice Ġ= Ġf ence . device Ċĉ ĉ Virtual Stack . push () Ċĉ ĉ try Ġ{ Ċĉĉ ĉ val Ġtarget Ġ= ĠVirtual Stack . alloc < Vk Import Fence Fd Info KHR >(). ptr Ċĉĉ ĉ val Ġbuilder Ġ= ĠImport Fence Fd Info KHR Builder ( target . point ed ) Ċĉĉ ĉ builder . init ( fence ) Ċĉĉ ĉ builder . apply ( block ) Ċĉĉ ĉ val Ġresult Ġ= Ġdispatch Table . vk Import Fence Fd KHR !! ( device . to Vk Type (), Ġtarget ) Ċĉĉ ĉ if Ġ( result Ġ!= ĠVK _ SUCCESS ) Ġhandle Vk Result ( result ) Ċĉ ĉ } Ġfinally Ġ{ Ċĉĉ ĉ Virtual Stack . pop () Ċĉ ĉ } Ċ ĉ } Ċ } Ċ