Получение нарушения доступа при создании логических устройств - PullRequest
0 голосов
/ 13 февраля 2020

Я получаю следующую ошибку:

Исключение, сгенерированное в VkLayer_khronos_validation.dll Исключение, сгенерированное в 0x00007FFA5252DD05 (VkLayer_khronos_validation.dll) Местоположение чтения нарушения доступа 0xFFFFFFFFFFFFFFFF.

1004 * * 1005 :
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";
}

}

1 Ответ

1 голос
/ 13 февраля 2020

Неинициализированный VkDeviceQueueCreateInfo. Унифицированный указатель (pNext) приводит к неправильному разыменованию указателя. Это происходит в режиме отладки, потому что используется шаблон отладочной памяти. В режиме Release неинициализированное значение часто оказывается равным 0.

Один из типичных способов справиться с этим в привязках Vulkan C состоит в инициализации нулями struct s с {}. Например, VkDeviceQueueCreateInfo dqci = {};. Или есть обозначенные инициализаторы в C99 и C ++ 20. Ноль - приличное значение по умолчанию для большинства параметров Vulkan.

...