初識Vulkun(5) 建立邏輯裝置和繫結佇列族

2021-10-08 16:50:00 字數 2716 閱讀 6013

08/02/2020

知識補充

總結使用物理裝置建立邏輯裝置,佇列家族建立佇列。邏輯裝置由vkdevice宣告,如果要建立邏輯裝置,首先需要確認佇列資訊,邏輯裝置代表處於初始化狀態的裝置,在建立邏輯裝置時,可以選擇可選特性,開啟需要的擴充套件。

物理裝置可以查詢支援的不同的佇列族,找到相關索引的佇列族,就可以建立佇列族。

邏輯裝置需要兩個佇列,乙個關於圖形的另乙個關於呈現的佇列族。可以先繫結乙個佇列族。

queuefamilyindices indices =

findqueuefamilies

(physicaldevice)

;std::vector queuecreateinfos;

std::set<

uint32_t

> uniquequeuefamilies =

;float queuepriority =

1.0f

;for

(uint32_t queuefamily : uniquequeuefamilies)

; queuecreateinfo.stype = vk_structure_type_device_queue_create_info;

queuecreateinfo.queuefamilyindex = queuefamily;

//以索引的方式儲存者佇列族

queuecreateinfo.queuecount =1;

queuecreateinfo.pqueuepriorities =

&queuepriority;

queuecreateinfos.

push_back

(queuecreateinfo)

;}

vkphysicaldevicefeatures devicefeatures

;vkdevicecreateinfo createinfo

;createinfo.stype = vk_structure_type_device_create_info;

//繫結佇列族 <---- 可以是1個或者多個

createinfo.queuecreateinfocount =

static_cast

<

uint32_t

>

(queuecreateinfos.

size()

);createinfo.pqueuecreateinfos = queuecreateinfos.

data()

;//繫結物理裝置特性

createinfo.penabledfeatures =

&devicefeatures;

//擴充套件內容

createinfo.enabledextensioncount =0;

//繫結驗證層

if(enablevalidationlayers)

else

//通過物理裝置建立邏輯裝置if(

vkcreatedevice

(physicaldevice,

&createinfo,

nullptr

,&device)

!= vk_success)

//建立了佇列族,相當於自動建立了相對應的佇列,可以同個下面函式提取建立好的佇列

vkgetdevicequeue

(device, indices.graphicsfamily.

value()

,0,&graphicsqueue)

;vkgetdevicequeue

(device, indices.presentfamily.

value()

,0,&presentqueue)

;

當建立好邏輯裝置後,將會自動建立佇列,可以從佇列家族中儲存下來方便以後使用

//先宣告:

vkqueue graphicsqueue;

vkqueue presentqueue;

vkgetdevicequeue

(device, indices.graphicsfamily.

value()

,0,&graphicsqueue)

;vkgetdevicequeue

(device, indices.presentfamily.

value()

,0,&presentqueue)

;

對於任何跨平台的開放式api,擴充套件都是最根本的特性。這些擴充套件允許實現者不斷試驗,建立並且推動技術進步。

擴充套件分為兩類:例項擴充套件(vkinstance)和裝置(vkdevice)擴充套件。例項擴充套件用於在某個平台上整體增強vulkan系統。裝置擴充套件用於擴充套件系統裡乙個或者多個裝置的能力。擴充套件必須在建立vulkan例項與裝置時啟用。

使用vkenumerateinstanceproperties()來查詢所有支援的例項擴充套件。使用vkenumeratedeviceproperties()來查詢是吃的裝置擴充套件

vkdevicewaitidle()

;//等待邏輯裝置空閒

vkdestroydevice()

;//銷毀裝置

vkdestroyinstance()

;//銷毀例項

初識Vulkun(23) 載入模型

08 13 2020 vulkan 載入模型 loading models 應用程式現在已經可以渲染紋理3d模型,但是 vertices 頂點和 indices 索引陣列中的幾何體不是很有趣。在本章節我們擴充套件程式,從實際的模型檔案衝載入頂點和索引資料,並使圖形卡實際做一些工作。void load...

5 初識線性表

線性表,從名字上你就能感覺到,是具有像線一樣的性質,像剛才提到的那樣,乙個班級的小朋友,乙個跟著乙個排著隊,有乙個打頭,有乙個收尾,當中的小朋友每乙個都知道他前面乙個是誰,他後面乙個是誰,這樣如同有一根線把他們串聯起來了。就可以稱之為線性表 由n n o 個資料特性相同的元素構成的有限序列稱為線性表...

初識5G網路

技術指標 列出一張與4g網路的對比更為直觀 技術指標 流量密度 連線數密度 時延 移動性 能效 使用者體驗速率 頻譜速率 峰值速率 4g 0.1tbps km 10萬 km 10ms 350km h 1b倍10mbps 1倍1gbps 5g 10tbps km 100萬 km 1ms500km h ...