天天看點

VulkanAPI_基本類型_小結Vulkan 基本類型

Vulkan 基本類型

學而不思則罔,思而不學則殆!

Vulkan 基本類型,Vulkan 開發需要設計的類型非常多,整理其基本類型如下,主要包含裝置、隊列、指令緩沖、隊列家族、渲染通,管線等,具體内容如下所示:

Vulkan類型 功能說明
執行個體(VkInstance) 用于存儲Vulkan程式相關狀态的軟體結構,可以在邏輯上區分不同的Vulkan應用程式或者同一應用程式内部不同的Vulkan上下文
實體裝置(VkPhysicalDevice) 對系統中 GPU 硬體的抽象,每個 GPU 對應一個實體裝置。另外,每個執行個體下可以有多個實體裝置
裝置(VkDevice) 基于實體裝置建立的邏輯裝置,本質上是存儲資訊的軟體結構,其中主要保留了與對應實體裝置相關的資源。每個實體裝置可以對應多個邏輯裝置
指令池(VkCommandPool) 服務高效配置設定指令緩沖
指令緩沖(VkCommandBuffer) 用于記錄組成繪制或計算任務的各個指令,在指令池中配置設定。若執行的是不變的繪制指令,可以對記錄了指令的指令緩沖進行重用
指令緩沖啟動資訊(VkCommandBufferBeginInfo) 攜帶了指令緩沖啟動時必要資訊的對象
指令緩沖送出資訊(VkSubmitInfo) 攜帶了指令緩沖送出給隊列執行時必要資訊的對象,包括需要等待的資訊量數量、等待的信号量清單、指令緩沖數量、指令緩沖清單、觸發的信号量數量觸發的信号量清單等
清單家族屬性( VkQueueFamilyProperties) 攜帶了特定隊列家族屬性資訊的軟體結構,包括家族中隊列的數量、能力标志等。每一個隊列家族中可能含有多個能力相近的隊列,常用的隊列家族主要有支援圖形任務和計算任務的兩大類
隊列( VkQueue) 功能為接收送出的任務,将任務按序由所屬GPU硬體依次執行
格式(VkFormat) 一個枚舉類型,包含了Vulkan開發中用到的各種記憶體組織形式,如VK_FORMAT_R8G8B8A8_UNORM 就表示支援RGBA四個色彩通道,每個通道8個資料比特
2D尺寸(VkExtent2D) 用于記錄2D尺寸的結構體,有width和height兩個屬性
圖像(VkImage) 裝置記憶體的一種使用模式,這種模式下對應的記憶體用于存儲圖像像素資料,其中存儲的像素資料可能是來自于紋理圖像也可能是來自于繪制任務的結果等
圖像視圖(VkImageView) 配合圖像對象使用,其中攜帶了對應圖像的類型、格式、色彩通道交換設定等方面的資訊
交換鍊( VkSwapchainKHR) 将畫面呈現到特定目标平台(如windows, Android, Linux等)窗體或者表面的機制,通過它可以提供多個用于呈現的圖像。這些圖像與目标平台相關,可以看作目标平台呈現用KHR表面的抽象接口。持續換幀呈現時交替使用其中的多個圖形執行,避免使用者看到繪制過程中的畫面引起畫面撕裂。一般情況下,交換鍊中至少有兩個用于呈現的圖像,有些裝置中數量會更多
幀緩沖(VkFrameBuffer) 為繪制服務,其中可以包含顔色附件(用于記錄一幀畫面中各個像素的顔色值)、深度附件(用于記錄一幀畫面中各個像素的深度值)、模闆附件(用于記錄一幀畫面中各個像素的模闆值)等
緩沖( VkBuffer) 裝置記憶體的一種使用模式,這種模式下對應的記憶體用于存儲各種資料。比如:繪制用頂點資訊資料、繪制用一緻變量資料等
緩沖描述資訊( VkDescriptorBufferInfo) 攜帶了描述緩沖資訊的結構體,包含對應緩沖、記憶體偏移量、範圍等
渲染通道(VkRenderPass) 其中包含了一次繪制任務需要的各方面資訊,諸如顔色附件、深度附件情況,子通道清單、子通道互相依賴資訊等,用于向驅動描述繪制工作的結構、過程。一般來說,每個渲染通道從開始到結束将産生一幀完成的畫面
清除内容(VkClearValue) 包含了每次繪制前清除幀緩沖所用資料的相關值,主要有清除用顔色值,深度值、模闆值
渲染通道啟動資訊(VkRenderPassBeginInfo) 攜帶了啟動渲染通道時所需的資訊,包括對應的渲染通道、渲染區域的位置及尺寸、繪制前的清除資料值等
渲染子通道描述(VkSubpassDescription) 一個渲染通道由多個子通道組成,至少需要一個子通道。每個子通道用一個VkSubpassDescription執行個體描述,其中包含了此子通道的輸入附件,顔色附件,深度附件等方面的資訊
描述集布局(VkDescriptionSetLayout) 服務于描述集,給出布局接口。通俗講就是給出着色器中包含了哪些一緻變量、分别是什麼類型、綁定編号是什麼、對應于哪個管線階段(比如頂點着色器、片源着色器)等
描述集(VkDescriptorSet) 用于繪制前更新着色器所需的一緻變量等
寫入描述集( VkWriteDescriptorSet) 用于繪制前更新着色器所需的一緻變量等
描述集池( VkDescriptorPool) 用于高效地配置設定描述集
管線布局( VkPipelineLayout) 描述管線整體布局,包括哪些推送常量、有哪些描述集等
管線( VkPipeline) 包含了執行指定繪制工作對應管線的各方面資訊、諸如管線布局、頂點資料輸入情況、圖元組裝設定、光栅化設定、混合設定、視口于剪裁設定、深度及模闆測試設定、多重采樣設定等
着色器階段建立資訊(VkPipelineShaderStageCreateInfo) 攜帶了單個着色器階段資訊的對象,包括着色器的SPIR-V模闆、着色器主方法名稱、着色器對應階段(比如頂點着色器、片元着色器、幾何着色器、曲面細分着色器)等
頂點輸入綁定描述(VkVertexInputBindingDescription) 用于描述管線的頂點資料輸入情況,包括綁定點編号,資料資料頻率(比如每頂點一套資料)、資料間隔等
頂點輸入屬性描述(VkVertexInputAttributeDescription) 描述頂點輸入的某項資料資訊(比如頂點位置、頂點顔色),包括綁定點編号、位置編号、資料格式、偏移量等
管線緩沖(VkPipelineCache) 為高效地建立管線提供支援
格式屬性(VkFormatProperties) 用于存儲執行格式類型(比如 VK_FORMAT_D16_UNORM)的格式屬性,包括線性瓦片特征标志、最優化瓦片特征标志、緩沖特種标志等
實體裝置記憶體屬性(VkPhysicalDeviceMemoryProperties) 用于存儲擷取的基于指定GPU的裝置記憶體屬性,包括記憶體類型數量、記憶體類型清單、記憶體堆數量、記憶體堆清單等
裝置記憶體(VkDeviceMemory) 裝置記憶體的邏輯抽象,前面提到的緩沖(VuBuffer)、圖形(VkImage)都需要綁定裝置記憶體才能正常工作
信号量(VkSemaphore) 用于一個裝置(GPU)内部相同或不同隊列并發執行任務時的同步工作,一般與方法VkQueueSubmit配合使用,以確定通過VkQueueSubmit方法送出的任務在指定信号量未觸發前阻塞直至信号量觸發後才執行。要特别注意的是,若有多個送出的任務同時等待同一個信号量觸發,則此信号量的觸發僅僅會被一個等待的任務接收到,其他等待的任務還将繼續等待。這裡的“同步”指的是并發執行時解決沖突的一種政策,有興趣的讀者可以進一步查閱相關資料
栅欄(VkFence) 用于主機和裝置之間的同步,通俗地講就是用于CPU和GPU并發執行任務時的同步
KHR表面(VkSurfaceKHR) 此類對象服務于幀畫面的呈現
KHR表面能力(VkSurfaceCapabilitiesKHR) 攜帶了用于呈現畫面的表面相關呈現能力的資訊,比如畫面尺寸範圍、交換鍊中的圖像數量、是否支援螢幕交換等
呈現資訊(VkPresentInfoKHR) 攜帶了執行呈現時所需的一些資訊,包括需要等待的信号量數量、信号量清單、交換鍊的數量、交換鍊清單、此次呈現的圖像在交換鍊中的索引等