1. 程式人生 > >Vulkan程式設計指南翻譯 第六章 著色器和管線 第4節 執行工作

Vulkan程式設計指南翻譯 第六章 著色器和管線 第4節 執行工作

6.4  執行工作

在前一節,你看到了如何使用vkCreateComputePipelines()構造一個計算管線並把大繫結到一個命令緩衝區。一旦管線被繫結,你可以用它來執行工作。

計算著色器作為計算管線的一部分,以分組的形式來執行,分組成為本地工作組。這些工作邏輯上速度一致的執行,在著色器裡被指定了固定的大小。本地工作組最大個數一般比較小,但是至少是128呼叫 × 128 呼叫× 64 呼叫。還有,在單一一個本地工作組裡最大呼叫個數也比總容量較小,且要求只能是128呼叫。因此原因,本地工作組從較大的組開始,優勢被稱為全域性工作組或者分發大小。從計算著色器中開始任務因此被稱為分發任務,或者分發。本地工作組邏輯上是一個三維結構,或者呼叫立體,計算一個或兩個溫度可以是單個呼叫,以保持工作組在該方向上扁平。同樣,這些本地工作組在三維上一起被分發,即使一個或多個維度是一個工作組深度。

用計算管線可用來分發任務的命令是vkCmdDispatch(),其原型如下:

         voidvkCmdDispatch (

VkCommandBuffer commandBuffer,

uint32_t x,

uint32_t y,

uint32_t z);

將要執行任務的命令緩衝區通過commandBuffer傳遞。x,y,z每一個維度中的本地工作組數量通過x,y,z引數傳遞。一個有效的計算管線必須繫結到命令緩衝區的VK_PIPELINE_BIND_POINT_COMPUTE繫結點。當命令被裝置執行是,一個x × y× z大小的全域性工作組開始執行所繫結管線的著色器。

極有可能一個本地工作組在有效維度上與全域性工作組不同。例如,可以存在一個32 × 32 × 1分發64 × 1 × 1的本地工作組。

在vkCmdDispatch()中能用引數指定工作組的個數之外,也可能做到間接分發,在工作組中分發的個數來自緩衝區物件。這允許分發大小在使用一個緩衝區來間接分發構造命令緩衝區 然後把緩衝區內容寫入主機端之後計算。緩衝區的內容可被裝置更新,來給裝置提供工作。

vkCmdDispatchIndirect()的原型如下:

         voidvkCmdDispatchIndirect (

VkCommandBuffer commandBuffer,

VkBuffer buffer,

VkDeviceSize offset);

包含該命令的命令緩衝區通過commandBuffer傳遞。和vkCmdDispatch()中傳遞的分發個數不一樣,工作組中每一個維度的大小被儲存在三個連續的uint32_t的變數裡,其在緩衝區物件buffer中起始偏移位置是offset。緩衝區中引數基本上代表了一個VkDispatchIndirectCommand型別的資料,定義為:

         typedefstruct VkDispatchIndirectCommand {

uint32_t x;

uint32_t y;

uint32_t z;

}VkDispatchIndirectCommand;

緩衝區中的內容在裝置執行的命令緩衝區中vkCmdDispatchIndirect()命令到達之前不會被讀取。

工作組每一個維度的最大個數可通過檢查vkGetPhysicalDeviceProperties()呼叫得來的裝置的VkPhysicalDeviceLimits型別資料的maxComputeWorkGroupCount成員來獲知,在第一章“Vulkan簡介”中獎結果。在vkCmdDispatch()呼叫中超過了這個限制或者在vkCmdDispatchIndirect()裡使用了超出限定值的將會導致為定義(很有可能是壞的)的行為。

相關推薦

Vulkan程式設計指南翻譯 著色管線 2 SPIR-V 概述

6.2  SPIR-V 概述 SPIR-V著色器嵌入在module裡。每一個module都可以包含一個或多個著色器。每一個著色器都有一個固定名字入口點和著色器型別,這用來定義著色器在哪個著色階段來使用。入口點之著色器開始執行時的起始位置。一個SPIR-Vmodule都隨著

Vulkan程式設計指南翻譯 著色管線 4 執行工作

6.4  執行工作 在前一節,你看到了如何使用vkCreateComputePipelines()構造一個計算管線並把大繫結到一個命令緩衝區。一旦管線被繫結,你可以用它來執行工作。 計算著色器作為計算管線的一部分,以分組的形式來執行,分組成為本地工作組。這些工作邏輯上速度一

Vulkan程式設計指南翻譯 著色管線 3 管線

6.3  管線 如你在前面小節所讀到的,Vulkan使用著色器module來表示一系列的著色器程式通過把module 程式碼交給vkCreateShaderModule()可以建立著色器module,但是,在它們可以在裝置上被用來工作之前,你需要建立管線。在Vulkan中有

作用域記憶體問題 第二執行環境及作用域

1、執行環境的型別有什麼? 2、全域性執行環境是怎麼樣的? 3、全域性執行環境是何時銷燬? 4、程式中的執行流是由什麼機制控制的?

Vulkan程式設計指南翻譯 圖形管線 4 建立簡單的圖形管線(下)

這一節實在太長了,拖了好久。還是分開發吧。 7.4.3  輸入組裝 圖形管線的輸入組裝階段接受頂點資料,並把它們分組,組成圖元,以供管線接下來的部分處理。它是通過一個VkPipelineInputAssemblyStateCreateInfo型別的資料描述的,通過V

編譯原理 屬性文法語法制導翻譯

一、知識總結        首先學習了屬性文法,屬性文法是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的“值”,稱為“屬性”。屬性分為綜合屬性和繼承屬性。綜合屬性用於“自下而上”傳遞資訊,在語法樹中,一個結點的綜合屬性的值,由其子結點的屬性值確定。

編譯原理-屬性文法語法制導翻譯

      第六章主要講了屬性文法、語義規則、基於屬性文法的處理、S屬性的自下而上計算、L-屬性文法的自頂向下翻譯等內容。一些基本的概念:屬性文法:是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的“值”(稱為屬性)。屬性:代表與文法符號相關的資訊,

初始繼承多態

機制 但是 就是 概念 base 類的設計 類重寫 結構 冗余 1.繼承的概念 其實生活中有很多繼承的例子。例如,在馬路上跑的卡車,我們每天都乘坐的公共汽車,它們都是汽車。卡車有自己的特征:有貨艙,有額定載重,行為都是可以拉貨、卸貨。而公共汽車的特征和行為:有客艙,有載客量

R語言編程藝術__因子

女性 案例 子列 認識 改變 posit 程序實現 style 各類 一、因子與水平 1、簡單直接的認識因子和水平   因子可以簡單的理解為包含了更多信息的向量。即因子=向量 + 水平。(當然實際上它們內部機理不同)。水平是對於向量中不同值的記錄,以下面代碼為例: >

函數調試

如果 怎麽辦 調試工具 將在 工具 argument real special one   在本章中,你將學習以下兩方面的基本知識: 函數 使用Python調試包pdb   函數是程序重要的組成部分,你將在第七章中使用它們,並學習如何使用隨機化

類型成員基礎

frame 相同 vision 特殊 可見 要求 沒有 發送通知 操作符重載 目錄: 6.1 類型的各種成員 6.2 類型的可見性 6.3 成員的可見性 6.4 靜態類 6.5 分部類,結構和接口 6.6 組件,多態和版本控制 6.1 類型的各種成員 常量:數據值恒定不

【資料庫視訊】 資料查詢管理

一、簡單的SELECT語句 語法格式: SELECT [ALL|DISTINCT] select_list [INTO new_table] FROM table_source [WHERE search_conditions] [GROUP

玩轉資料結構——:集合對映

集合(Set) 什麼是集合? 集合是承載元素的容器; 特點:每個元素只能存在一次 優點:去重 二分搜尋樹的新增操作add:不能盛放重複元素 是非常好的實現“集合”的底層資料結構 /** * 集合的介面 */ public interface Set<

《C++ Primer Plus》學習筆記—— 分支語句邏輯運算子(一)

本章內容包括: if 語句 if else 語句 邏輯運算子 &&、||和! cctype字元函式庫 條件運算子: ? : switch 語句 continue和break語句 讀取數字的迴圈 基本檔案輸入和輸出 if 語句 if (tes

第二篇 建築裝修保溫系統檢查(二)

alt 系統 第二篇 等級 分享圖片 img 裝修 image 分享 裝修材料分4個等級, 保溫材料分3個等級 第二篇 第六章建築裝修和保溫系統檢查(二)

分支語句邏輯操作符

if 語句 if( test-condition ) statement 通常情況下,測試條件都是關係表示式。 if else 語句 if( test-condition ) stat

EffectiveJava:列舉註解

討論列舉和註解的最佳實踐。 30. 用enum代替int常量 列舉型別(enum type)是指由一組固定的常量組成合法值得型別,在程式語言還沒有引入列舉之前,表示列舉型別的常用模式是宣告一組具名的int常量,稱作int列舉模式。 int列舉模式的不

[] 深入理解計算機系統三版 家庭作業參考答案

6.22 磁軌數 d 與 r - x * r 成正比 設 d = k(r - x * r) = kr(1 - x) 總容量 c = 2πxk(r^2)(1 - x) = 2πk(r^2)(x - x^2) 上式實際上是關於 x 的二次式,其對稱軸為 1/2,即當

Atitit 現代資訊檢索 Atitit 重要章節 息檢索建模 檢索評價 8 文字分類 Line 210: 9 索引搜尋 11 Web檢索 13 結構化文字檢索 目錄 L

Atitit 現代資訊檢索   Atitit 重要章節 息檢索建模 檢索評價  第8章 文字分類 Line 210: 第9章 索引和搜尋 第11章 Web檢索 第13章 結構化文字檢索   目錄   Line 1

Netty原始碼分析7(編碼寫資料)---->2: MessageToByteEncoder

  Netty原始碼分析第七章: Netty原始碼分析   第二節: MessageToByteEncoder   同解碼器一樣, 編碼器中也有一個抽象類叫MessageToByteEncoder, 其中定義了編碼器的骨架方法, 具體編碼邏輯交給子類實現 解碼器同樣也