私はVULKAN料理とVULKAN学んでいる、と私は今、行き詰まりで自分自身を見つける:vkCreateDevice()が失敗する理由は何ですか?
私は拡張子をパスしようとした場合、すなわち、VK_KHR_SURFACE_EXTENSION_NAME
と私はに送信VkDeviceCreateInfo
構造の拡張子のリストでVK_KHR_WIN32_SURFACE_EXTENSION_NAME
vkCreateDevice
、機能がエラーなしで失敗しました(VK_SUCCESS
を返すことはありません)
私はグラフィックスカードが私が通過しようとしているすべての拡張機能をサポートしていることを確認しました。バリデーションレイヤーから出力を読み込もうとしましたが、失敗の理由をキャッチしていないようです(VK_LAYER_LUNARG_api_dump
と標準検証レイヤーを有効にしました)。論理デバイスを作成するための
My機能はthis-
bool create_logical_device(VkPhysicalDevice &physDev, VkDevice &device,
std::vector<char const *> &desExts,
std::vector<queueInfo> &qInfos,
VkPhysicalDeviceFeatures &physDevFtrs)
{
std::vector<VkDeviceQueueCreateInfo> qCreateInfo;
std::vector<VkExtensionProperties> physDevExtProps;
if (!get_avl_phys_dev_exts(physDev, physDevExtProps))
return false;
for (auto &ext : desExts)
{
if (!is_ext_available(physDevExtProps, ext))
return false;
}
for (auto &i : qInfos)
{
qCreateInfo.push_back(
{VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
nullptr,
0,
i.FamilyIndex,
(uint32_t)i.Priorities.size(),
i.Priorities.size() > 0 ? i.Priorities.data() : nullptr
});
}
VkDeviceCreateInfo devCreateInfo =
{
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
nullptr,
0,
(uint32_t)qCreateInfo.size(),
qCreateInfo.size() > 0 ? qCreateInfo.data() : nullptr,
0,
nullptr,
(uint32_t)desExts.size(),
desExts.size() > 0 ? desExts.data() : nullptr,
&physDevFtrs
};
#ifdef ENABLE_VALIDATION
devCreateInfo.enabledLayerCount = (uint32_t)valLayers.size();
devCreateInfo.ppEnabledLayerNames = valLayers.data();
#endif
if (vkCreateDevice(physDev, &devCreateInfo, nullptr, &device) != VK_SUCCESS)
{
std::cout << "Could not create logical device!" << std::endl;
return false;
}
std::cout << "Succesfully created logical device" << std::endl;
return true;
}
valLayers
ように見えるグローバルスコープで定数ベクトルです。
このエラーは、WindowsとLinuxの両方で発生するため、私の側では問題になる可能性があります。デバッガでコードを実行しても、私には何も明らかにされませんでした。私は何が間違っていますか?
VK_SUCCESSが返されない場合は、代わりに何が返されますか? – Surt
有効な拡張名を指定してもよろしいですか? VK_KHR_SURFACE_EXTENSION_NAMEはインスタンス拡張であるため、デバイスの作成時には提供しないでください。 – Ekzuzy
私は起こっているものでなければならないと思います....私はチェックします。 –