Vulkanを習得し始めました。 Graham Sellersの本「Vulkan Programming Guide」と私のシステムのAMDGPUプロドライバを搭載したRX 480があります。私はArch Linuxを実行しています。私は自分のシステムでVulkanのデモを実行することができました。vkCreateInstanceによってセグメント違反が発生しました
私はセグメント化エラーを引き起こす最小のコードブロックを持っています。奇妙なことに、この疑問を提起するためにこのブロックを生成する途中で、vkCreateInstance()がコンストラクタから呼び出されて実行され、最初にコードにtry/catchを追加したときにセグメント化エラーが発生しました。
#include <iostream>
#include <vulkan/vulkan.h>
int main(int argv, char* argc[])
{
VkInstance* instance;
VkApplicationInfo appInfo = { .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pNext = NULL,
.pApplicationName = "Step 1",
.applicationVersion = 1,
.pEngineName = NULL,
.engineVersion = 0,
.apiVersion = VK_MAKE_VERSION(1, 0, 26) }; //This is what vulkanCapsViewer says my API version is.
VkInstanceCreateInfo createInfo = { .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = NULL,
.flags = 0 };
createInfo.pApplicationInfo = &appInfo;
createInfo.enabledExtensionCount = 0;
createInfo.ppEnabledExtensionNames = NULL;
createInfo.enabledLayerCount = 0;
createInfo.ppEnabledLayerNames = NULL;
std::cout << "1\n";
VkResult result = vkCreateInstance(&createInfo, NULL, instance);
std::cout << "2\n";
if(result != VK_SUCCESS) std::cout << "Failed to create a Vulkan instance: " << result << std::endl;
std::cout << "3\n";
return 0;
}
出力は次のとおりです:
さて、/キャッチしようとさえすることなく、これがセグメンテーションフォールトを起こし
93> ./create_seg_fault
1
Segmentation fault (core dumped)
指定された初期化子は(まだ)C++の機能ではありません。つまり、あなたのコードはCとC++のハイブリッドを使用しています。 –