package Ġde . fab max . k ool . platform . vk . pipeline Ċ Ċ import Ġde . fab max . k ool . pipeline . Pipeline Ċ import Ġde . fab max . k ool . pipeline . RenderPass Ċ import Ġde . fab max . k ool . platform . vk . Swap Chain Ċ import Ġde . fab max . k ool . platform . vk . Vk RenderPass Ċ import Ġde . fab max . k ool . platform . vk . Vk System Ċ import Ġde . fab max . k ool . util . log D Ċ Ċ class ĠPipeline Manager ( val Ġsys : ĠVk System ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġon Screen Pipeline Configs Ġ= Ġmutable Set Of < Pipeline And RenderPass >() ĊĊĠĠĠ Ġprivate Ġvar Ġswap Chain : ĠSwap Chain ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġcreated P ipelines Ġ= Ġmutable Map Of < UL ong , ĠCreated Pipeline >() ĊĊĠĠĠ Ġfun Ġon Swap chain Destroyed () Ġ{ ĊĠĠĠĠĠĠĠ Ġswap Chain Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcreated P ipelines . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Swap chain Created ( swap Chain : ĠSwap Chain ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . swap Chain Ġ= Ġswap Chain ĊĠĠĠĠĠĠĠ Ġon Screen Pipeline Configs . forEach Ġ{ Ġcreate On Screen Pipeline ( it . pipeline , Ġit . k ool RenderPass , Ġswap Chain . render Pass ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Pipeline ( pipeline : ĠPipeline , Ġrender Pass : ĠLong ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated P ipelines [ pipeline . pipeline Hash ]?. exists For RenderPass ( render Pass ) Ġ?: Ġfalse ĊĊĠĠĠ Ġfun Ġadd Pipeline Config ( pipeline : ĠPipeline , Ġn Images : ĠInt , Ġk ool RenderPass : ĠRender Pass , Ġrender Pass : ĠVk RenderPass , Ġdyn Vp : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( render Pass Ġ=== Ġswap Chain ?. render Pass ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Screen Pipeline Configs . add ( Pipeline And RenderPass ( pipeline , Ġk ool RenderPass ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog D Ġ{ Ġ" New Ġon Ġscreen Ġpipeline : Ġ${ pipeline . name }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate On Screen Pipeline ( pipeline , Ġk ool RenderPass , Ġrender Pass ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgp Ġ= ĠGraphics Pipeline ( sys , Ġk ool RenderPass , Ġrender Pass , Ġ 1 , Ġdyn Vp , Ġpipeline , Ġn Images ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsys . device . add Depend ing Resource ( gp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Pipeline Ġ= Ġcreated P ipelines . get Or Put ( pipeline . pipeline Hash ) Ġ{ ĠCreated Pipeline ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Pipeline . add RenderPass Pipeline ( render Pass , Ġgp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate On Screen Pipeline ( pipeline : ĠPipeline , Ġk ool RenderPass : ĠRender Pass , Ġrender Pass : ĠVk RenderPass ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġswap Chain Ġ= Ġthis . swap Chain Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġgp Ġ= ĠGraphics Pipeline ( sys , Ġk ool RenderPass , Ġrender Pass , Ġsys . physical Device . ms aa Samples , Ġtrue , Ġpipeline , Ġswap Chain . n Images ) ĊĠĠĠĠĠĠĠ Ġswap Chain . add Depend ing Resource ( gp ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Pipeline Ġ= Ġcreated P ipelines . get Or Put ( pipeline . pipeline Hash ) Ġ{ ĠCreated Pipeline ( true ) Ġ} ĊĠĠĠĠĠĠĠ Ġcreated Pipeline . add RenderPass Pipeline ( render Pass , Ġgp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Pipeline ( pipeline : ĠPipeline , Ġrender Pass : ĠLong ): ĠGraphics Pipeline Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreated P ipelines [ pipeline . pipeline Hash ]?. graphics P ipelines ?. get ( render Pass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠNoSuch ElementException (" Unknown Ġpipeline Ġconfig : Ġ${ pipeline . pipeline Hash }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Pipeline ( pipeline : ĠPipeline ): ĠCreated Pipeline ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreated P ipelines [ pipeline . pipeline Hash ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠCreated Pipeline ( private Ġval Ġis On Screen : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraphics P ipelines Ġ= Ġmutable Map Of < Long , ĠGraphics Pipeline >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġexists For RenderPass ( render Pass : ĠLong ) Ġ= Ġgraphics P ipelines . containsKey ( render Pass ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd RenderPass Pipeline ( render Pass : ĠVk RenderPass , Ġgraphics Pipeline : ĠGraphics Pipeline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics P ipelines [ render Pass . vk RenderPass ] Ġ= Ġgraphics Pipeline ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfree DescriptorSet Instance ( pipeline : ĠPipeline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfind ĠGraphics Pipeline Ġcontaining Ġpipeline Instance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġgraphics P ipelines . values . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( gp Ġin Ġiterator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gp . free DescriptorSet Instance ( pipeline ) Ġ&& Ġgp . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġdescriptor Ġset Ġinstances Ġof Ġthis Ġparticular Ġpipeline Ġare Ġfreed , Ġdestroy Ġit .. ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is On Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswap Chain ?. remove Depend ing Resource ( gp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsys . device . remove Depend ing Resource ( gp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgp . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( graphics P ipelines . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġpipelines Ġdestroyed , Ġremove ĠCreated Pipeline Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated P ipelines . remove ( pipeline . pipeline Hash ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Screen Pipeline Configs . remove If Ġ{ Ġit . pipeline Ġ== Ġpipeline Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠPipeline And RenderPass ( val Ġpipeline : ĠPipeline , Ġval Ġk ool RenderPass : ĠRender Pass ) Ċ }