温馨提示:本文翻译自stackoverflow.com,查看原文请点击:vulkan - Getting access violation while creating logical devices
vulkan

vulkan - 创建逻辑设备时遇到访问冲突

发布于 2020-05-02 21:44:34

我收到以下错误:

在VkLayer_khronos_validation.dll上引发的异常在0x00007FFA5252DD05(VkLayer_khronos_validation.dll)上引发的异常访问冲突读取位置0xFFFFFFFFFFFFFFFFFF。

我的代码:

void LogicalDevice::createLogicalDevice(VkPhysicalDevice pDevice){
VkDeviceQueueCreateInfo qcreateInfo;
qcreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
QueueFamiliesIndices indices = PhysicalDevice::findQueueFamilies(pDevice);
qcreateInfo.queueFamilyIndex = indices.graphicsFamily.value();
qcreateInfo.queueCount = 1;
float queuePriority = 1.0f;
qcreateInfo.pQueuePriorities = &queuePriority;

VkPhysicalDeviceFeatures deviceFeatures = {};

VkDeviceCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
createInfo.pQueueCreateInfos = &qcreateInfo;
createInfo.queueCreateInfoCount = 1;
createInfo.pEnabledFeatures = &deviceFeatures;

createInfo.enabledExtensionCount = 0;

if (ValidationLayers::enableValidationLayers){
     createInfo.enabledLayerCount = static_cast<uint32_t>(ValidationLayers::validationLayers.size());
     createInfo.ppEnabledLayerNames = ValidationLayers::validationLayers.data();

}
else{
     createInfo.enabledLayerCount = 0;
     createInfo.pNext = nullptr;
}
createInfo.flags = 0;

if (vkCreateDevice(pDevice, &createInfo ,nullptr, &device) != VK_SUCCESS){
    std::cout << "Failed to create Logical Device";
}

}

查看更多

提问者
Subash Tiwari
被浏览
18
krOoze 2020-02-14 00:13

未初始化VkDeviceQueueCreateInfo统一的指针(pNext)会导致错误的指针取消引用。它在调试模式下发生,因为它使用调试内存模式。在发布模式下,未初始化的值通常恰好为0。

其中一个典型的方式来处理这福尔康的C绑定是零初始化structS采用{}例如VkDeviceQueueCreateInfo dqci = {};或者在C99和C ++ 20中指定了初始化程序。零是大多数Vulkan参数的不错的默认值。