package Ġv ulkan . api Ċ Ċ import Ġorg . lwjgl . system . Memory Stack Ċ import Ġorg . lwjgl . system . Memory Util . mem Alloc Long Ċ import Ġorg . lwjgl . system . Memory Util . mem Free Ċ import Ġorg . lwjgl . v ulkan . VK 1 0 .* Ċ import Ġorg . lwjgl . v ulkan . Vk CommandBuffer Ċ import Ġorg . lwjgl . v ulkan . Vk CommandBuffer Allocate Info Ċ import Ġorg . lwjgl . v ulkan . Vk Command Pool CreateInfo Ċ import Ġorg . lwjgl . v ulkan . VkDevice Ċ import Ġv ulkan . misc . Queue Family Ċ import Ġv ulkan . misc . check Ċ import Ġv ulkan . misc . toList Ċ Ċ class ĠVk Command Pool ( private Ġval Ġdevice : VkDevice , Ġval Ġhandle : Long , Ġval Ġflags : Int ) Ġ{ ĊĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġvk Destroy Command Pool ( device , Ġhandle , Ġnull ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġalloc (): ĠVk CommandBuffer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . alloc ( 1 , ĠVK _ COMMAND _ BUFFER _ LEVEL _ PRIMARY ). first () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġalloc Secondary (): ĠVk CommandBuffer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . alloc ( 1 , ĠVK _ COMMAND _ BUFFER _ LEVEL _ SECOND ARY ). first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfree ( buffer : Vk CommandBuffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMemory Stack . stack Push (). use Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġstack . malloc Pointer ( 1 ). put ( buffer . address ()). flip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Free Command Buffers ( device , Ġhandle , Ġp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġfree ( buffers : List < Vk CommandBuffer >) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( buffers . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠ ĠMemory Stack . stack Push (). use Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġstack . malloc Pointer ( buffers . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffers . forEach Ġ{ Ġp . put ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . flip () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Free Command Buffers ( device , Ġhandle , Ġp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ================================================================================ ======= ĊĠĠĠ Ġprivate Ġfun Ġalloc ( num : Int , Ġlevel : Int ): ĠList < Vk CommandBuffer > Ġ{ ĊĠĠĠĠĠĠĠ ĠMemory Stack . stack Push (). use Ġ{ Ġstack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠVk CommandBuffer Allocate Info . calloc Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sType ( VK _ STRUCTURE _ TYPE _ COMMAND _ BUFFER _ ALLOC ATE _ INFO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. command Pool ( handle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. level ( level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commandBuffer Count ( num ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Buffer Ġ= Ġstack . malloc Pointer ( num ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Allocate Command Buffers ( device , Ġinfo , Ġp Buffer ). check () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp Buffer . toList Ġ{ ĠVk CommandBuffer ( it , Ġdevice ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ param Ġflags ĠVK _ COMMAND _ POOL _ CREATE _ RESET _ COMMAND _ BUFFER _ BIT Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVK _ COMMAND _ POOL _ CREATE _ TRAN SI ENT _ BIT Ċ Ġ*/ Ċ fun ĠVk Device . create Command Pool ( family : ĠQueue Family , Ġflags : Int ) Ġ: ĠVk Command Pool Ġ{ ĊĊĠĠĠ Ġval Ġinfo Ġ= ĠVk Command Pool CreateInfo . calloc () ĊĠĠĠĠĠĠĠ Ġ. sType ( VK _ STRUCTURE _ TYPE _ COMMAND _ POOL _ CREATE _ INFO ) ĊĠĠĠĠĠĠĠ Ġ. queue Family Index ( family . index ) ĊĠĠĠĠĠĠĠ Ġ. flags ( flags ) ĊĊĠĠĠ Ġval Ġp Pool Ġ= Ġmem Alloc Long ( 1 ) ĊĠĠĠ Ġvk Create Command Pool ( this , Ġinfo , Ġnull , Ġp Pool ). check () ĊĊĠĠĠ Ġval Ġpool Ġ= ĠVk Command Pool ( this , Ġp Pool . get ( 0 ), Ġflags ) ĊĊĠĠĠ Ġinfo . free () ĊĠĠĠ Ġmem Free ( p Pool ) ĊĊĠĠĠ Ġreturn Ġpool Ċ } Ċ /** Ċ Ġ* Ġ ĠAllocate Ġa Ġbuffer Ġand Ġallow Ġclient Ġto Ġuse Ġand Ġsubmit Ġit Ċ Ġ* Ġ Ġbefore Ġautomatically Ġfree ing Ġafter Ġuse . Ċ Ġ* Ġ ĠThis Ġis Ġexpected Ġto Ġbe Ġused Ġfor Ġthrow - away Ġbuffers Ġonly . Ġie . Ġtransient Ġbut Ġnot Ġreset - able Ċ Ġ* Ċ Ġ* Ġ Ġeg . Ċ Ġ* Ċ Ġ* Ġ Ġpool . begin One Time Submit () Ġ{ Ġb -> Ċ Ġ* ĠĠĠĠĠ Ġ// Ġdo Ġsomething Ġwith Ġbuffer Ċ Ġ* ĠĠĠĠĠ Ġb . end (); Ċ Ġ* ĠĠĠĠĠ Ġsubmit ( b ) Ċ Ġ* Ġ Ġ} Ċ Ġ*/ Ċ fun ĠVk Command Pool . begin One Time Submit ( f :( Vk CommandBuffer )-> Unit ) Ġ{ ĊĠĠĠ Ġassert ( this . flags Ġ== ĠVK _ COMMAND _ POOL _ CREATE _ TRAN SI ENT _ BIT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Expecting Ġto Ġbe Ġused Ġon Ġa Ġcommand Ġpool Ġwith ĠTRAN SI ENT Ġbit Ġset " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthis . alloc (). let Ġ{ Ġb -> ĊĠĠĠĠĠĠĠ Ġb . begin One Time Submit () ĊĠĠĠĠĠĠĠ Ġf ( b ) ĊĠĠĠĠĠĠĠ Ġthis . free ( b ) ĊĠĠĠ Ġ} Ċ } Ċ