🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Vulkan

Vulkanは、業界団体クロノスグループが規格化したグラフィックスAPI。主にゲームエンジンやゲームアプリケーション向けのグラフィックに最適化されており、ローレベル(low level)APIです。3Dオブジェクトを用いたアニメーションを使用するゲームで性能を最大限に発揮します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1181閲覧

vkCreateDeviceでの例外

Weapon

総合スコア106

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Vulkan

Vulkanは、業界団体クロノスグループが規格化したグラフィックスAPI。主にゲームエンジンやゲームアプリケーション向けのグラフィックに最適化されており、ローレベル(low level)APIです。3Dオブジェクトを用いたアニメーションを使用するゲームで性能を最大限に発揮します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/12/09 16:23

前提・実現したいこと

Vulkanの論理デバイスVkDevicevkCreateDeviceで作成しようとしているのですがvkCreateDeviceで例外が飛びます.
C++, vectorにはあまり慣れないですがこれ以前の同様の処理vkCreateInstanceは作成できています.
VkDeviceCreateInfo::ppEnabledExtensionNamesが問題だとは思いますがうまく動作しません.
何が間違っていますでしょうか?

該当のソースコード

outline

  • vkEnumerateDeviceExtensionPropertiesVkExtensionPropertiesを取得
  • VkExtensionPropertiesからextensionNameのpointerをリスト
  • vkCreateDevice

codes

C

1vector<VkExtensionProperties>dep; 2uint32_t DevExPropCount = 0; 3const char layerlist[] = { "VK_LAYER_KHRONOS_validation" }; 4vkEnumerateDeviceExtensionProperties(selectedPhysicalDevice, layerlist, &DevExPropCount, nullptr); 5dep.resize(DevExPropCount); 6vkEnumerateDeviceExtensionProperties(selectedPhysicalDevice, layerlist, &DevExPropCount, dep.data()); 7 8vector<const char*>lpdeplist(dep.size()); 9for (vector<const char*>::size_type i = 0; i < lpdeplist.size(); i++)lpdeplist[i] = dep[i].extensionName; 10 11VkDevice vkd = {}; 12const float prio = 1.0; 13VkDeviceQueueCreateInfo dqci = {VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, nullptr, 0, 1, graphicsqueue, &prio}; 14VkDeviceCreateInfo vkci = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, nullptr, VK_VERSION_1_0, 1, &dqci, 0, nullptr, lpdeplist.size(), lpdeplist.data(), nullptr }; 15 16VkResult res_cd = vkCreateDevice(selectedPhysicalDevice, &vkci, nullptr, &vkd);

selectedPhysicalDeviceは正常に初期化されています.

補足情報

Windows10 Pro
VisualStudio2019 Community
Vulkan SDK 1.1.121.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumetodo

2020/12/09 16:42

あとenabledLayerCount/ppEnabledLayerNames ってdeprecaedになってて単に無視される気がします https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation >The ppEnabledLayerNames and enabledLayerCount members of VkDeviceCreateInfo are deprecated and their values must be ignored by implementations. However, for compatibility, only an empty list of layers or a list that exactly matches the sequence enabled at instance creation time are valid, and validation layers should issue diagnostics for other cases.
guest

回答1

0

ベストアンサー

Vulkan専門家ではないのでリファレンスを読んだ限りでの回答となります。

VkDeviceQueueCreateInfoの初期化のgraphicsqueueとなっている部分ですが、これはpQueuePrioritiesの要素数なので1になるのが妥当ではないでしょうか?あるいはgraphicsqueue個の要素をもつfloat型配列の先頭要素へのポインタであるべきではないでしょうか?(というかその前の1graphicsqueueが逆なのか?もしかすると)

https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkDeviceQueueCreateInfo.html
pQueuePriorities is a pointer to an array of queueCount normalized floating point values, specifying priorities of work that will be submitted to each created queue. See Queue Priority for more information.

ちなみに
初めてのVulkanプログラミング step2 論理デバイスの生成 - Qiita
には

cpp

1float queue_priorities[]{ 1.0f }; 2//中略 3 device_queue_create_info.queueCount = 4; // TODO Check if this amount is valid 4 device_queue_create_info.pQueuePriorities = queue_priorities;

のように要素数と異なる4が入っているのでおやっ?と思うかもしれませんが、この人のgithubを見に行くときちんと1に修正されてます。
nakadasanda/vulkanAppaddcal2018@d8848fa

投稿2020/12/09 17:07

yumetodo

総合スコア5852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問