[英]Error creating Vulkan instance when using layers
I'm learning to use vulkan, when I don't use layers passing the parameter as nullptr
the instance is created without errors, if not, the following error occurs at vkCreateInstance
:我正在学习使用 vulkan,当我不使用将参数作为nullptr
传递的层时,实例创建时没有错误,如果没有,在vkCreateInstance
会出现以下错误:
(vulkan-1.dll) Access violation reading location
0xFFFFFFFFFFFFFFFF
. (vulkan-1.dll) 访问冲突读取位置0xFFFFFFFFFFFFFFFF
。
There is my code:有我的代码:
bool IEVkRenderer::CreateInstance()
{
...
std::vector<const char*> extensions;
extensions.push_back("VK_KHR_surface");
if (enableValidationLayers)
extensions.push_back("VK_EXT_debug_report");
extensions.push_back("VK_KHR_win32_surface");
VkInstanceCreateInfo createInfo;
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createInfo.pNext = nullptr;
createInfo.pApplicationInfo = &appInfo;
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
createInfo.ppEnabledExtensionNames = extensions.data();
if (enableValidationLayers) {
std::vector<const char*> layers;
layers.push_back("VK_LAYER_LUNARG_standard_validation");
if (!CheckValidationLayersSupport(layers)) {
lError("VK Renderer", "Validation layer not supported");
return false;
}
createInfo.enabledLayerCount = static_cast<uint32_t>(layers.size());
createInfo.ppEnabledLayerNames = layers.data();
}else {
createInfo.enabledLayerCount = 0;
createInfo.ppEnabledLayerNames = nullptr;
}
if (vkCreateInstance(&createInfo, nullptr, &m_Instance) != VK_SUCCESS)
return false;
return true;
}
You are using memory past delete
:您正在使用 memory 过去delete
:
if (enableValidationLayers) {
std::vector<const char*> layers;
createInfo.ppEnabledLayerNames = layers.data();
}
vkCreateInstance(&createInfo, nullptr, &m_Instance)
Furthermore, your createInfo.flags
is uninitialized value, which is invalid usage.此外,您的createInfo.flags
是未初始化的值,这是无效的使用。 Per spec it must be 0
.根据规范,它必须是0
。 The established practice when using C bindings of Vulkan in C++ is to preinitialize the struct like so:在 C++ 中使用 Vulkan 的 C 绑定时的既定做法是像这样预初始化结构:
VkInstanceCreateInfo createInfo = {};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.