ソースコードは以下の場所に置いておきます。各自のバージョンに合わせたプロパティ設定をしてから自由にご利用ください。
github: VulknAppAdocal2018
使用する物理デバイスを選択したら、それとインターフェースをとるための論理デバイスを設定する必要があります。論理デバイス作成のプロセスは、インスタンス作成のプロセスに似ています。deviceに必要な情報,作成したキューをなどを論理デバイスの作成時に指定します。またさまざまな要件がある場合は、同じ物理デバイスから複数の論理デバイスを作成することができます。
##作成するキューを指定する
論理デバイスの作成には、queuefamilyを指定してあげる必要があります。現時点では、グラフィクス用途の機能しか考えていません。
float queue_priorities[]{ 1.0f };
VkDeviceQueueCreateInfo device_queue_create_info{};
device_queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
device_queue_create_info.queueFamilyIndex = 0;// TODO Choose correct queuefamily index
device_queue_create_info.queueCount = 4; // TODO Check if this amount is valid
device_queue_create_info.pQueuePriorities = queue_priorities;
vulkanでは、浮動小数点を利用してコマンドバッファのスケジューリングの優先度をキューに割り当てます。これは、単一のキューしかない場合にも必要です。
キューファミリーindexとキューカウントは、今回直接調べて代入していますが、動的にqueufamilyPropertiesを参考にして選択することができます。一例として自分は、以下のように設定します。
キューファミリーインデックス
queufamilyProperties[i].family_property[i].queueFlagsの中で自分の使いたいキューファミリー機能があるもの。
キューカウント
queue_family_property[i].queueCount
そして、vkCreateDevise関数を呼び出して、論理デバイスをインスタンス化する準備が整いました。
VkDeviceCreateInfo device_create_info{};
device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
device_create_info.queueCreateInfoCount = 1;
device_create_info.pQueueCreateInfos = &device_queue_create_info;
auto err = vkCreateDevice(_gpu, &device_create_info, nullptr, &_devise);
vkCreateDeviceのパラメータは、接続される物理デバイス、先ほど指定したキュー及び仕様情報、オプションの割り当てコールバックポインタ、作成した論理デバイスハンドルを格納する変数のポインタです。この関数の返り値を参照することで、作成が成功したかどうか確認することができます。
連絡先
tweeter: tositada_nakada
mail: nakadasanda@outlook.com
寄付
paypal: tositada_nakada
Amazon: 欲しいものリスト