-
Anonymous
Нарушение доступа при вызове vkcreateinstance ()?
Сообщение
Anonymous »
Я написал простую программу Vulkan: < /p>
Код: Выделить всё
VkResult GetLayersAndExtensions() {
#ifndef NDEBUG
GraphicsBase::GetInstance().AddInstanceLayer("VK_LAYER_KHRONOS_validation");
GraphicsBase::GetInstance().AddInstanceExtension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
#endif
uint32_t instanceExtensionCount = 0;
const char **instanceExtensionNames = nullptr;
instanceExtensionNames = glfwGetRequiredInstanceExtensions(&instanceExtensionCount);
if (!instanceExtensionNames) {
LOGE(TAG_GLFW, "get instance extensions failed");
glfwTerminate();
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
for (uint32_t index = 0; index < instanceExtensionCount; ++index) {
LOGI(TAG_GLFW, "instance extension {}: {}", index, instanceExtensionNames[index]);
GraphicsBase::GetInstance().AddInstanceExtension(instanceExtensionNames[index]);
}
GraphicsBase::GetInstance().AddDeviceExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
return VK_SUCCESS;
}
VkResult CreateInstance() {
VkApplicationInfo applicationInfo = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.apiVersion = _apiVersion
};
VkInstanceCreateInfo createInfo = {
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pApplicationInfo = &applicationInfo,
.enabledLayerCount = static_cast(_instanceLayers.size()),
.ppEnabledLayerNames = _instanceLayers.data(),
.enabledExtensionCount = static_cast(_instanceExtensions.size()),
.ppEnabledExtensionNames = _instanceExtensions.data()
};
VkResult result = vkCreateInstance(&createInfo, nullptr, &_instance);
if (result) {
LOGE(TAG_COMMON, "create vulkan instance failed, result is {}", std::to_string(result));
return result;
}
return VK_SUCCESS;
}
... но он сбои, когда я вызываю vkcreateinstance () :
Код: Выделить всё
Exception thrown at 0x00007FFA10473741 (VkLayer_khronos_validation.dll) in learnvulkan.exe: 0xC0000005: Access violation writing location 0x00000000040D20A0.
< /code>
Стек вызовов выглядит следующим образом: < /p>
VkLayer_khronos_validation.dll!mi_page_map_set_range(mi_page_s * idx, unsigned __int64 sub_idx, unsigned __int64 slice_count, unsigned __int64) Line 266 C++
VkLayer_khronos_validation.dll!_mi_page_map_register(mi_page_s * page) Line 294 C++
VkLayer_khronos_validation.dll!mi_arenas_page_alloc_fresh(mi_subproc_s * subproc, unsigned __int64 slice_count, unsigned __int64 block_size, unsigned __int64 block_alignment, mi_arena_s * req_arena, unsigned __int64 tseq, int numa_node, bool commit) Line 709 C++
VkLayer_khronos_validation.dll!mi_arenas_page_regular_alloc(mi_heap_s * heap, unsigned __int64 slice_count, unsigned __int64 block_size) Line 727 C++
VkLayer_khronos_validation.dll!mi_page_fresh_alloc(mi_heap_s * heap, mi_page_queue_s * pq, unsigned __int64 block_size, unsigned __int64 page_alignment) Line 305 C++
VkLayer_khronos_validation.dll!mi_page_queue_find_free_ex(mi_heap_s * heap, mi_page_queue_s * pq, bool first_try) Line 809 C++
VkLayer_khronos_validation.dll!mi_find_page(mi_heap_s * heap, unsigned __int64 size, unsigned __int64 huge_alignment) Line 929 C++
VkLayer_khronos_validation.dll!_mi_malloc_generic(mi_heap_s * heap, unsigned __int64 size, bool zero, unsigned __int64 huge_alignment) Line 965 C++
VkLayer_khronos_validation.dll!mi_heap_alloc_new(mi_heap_s * heap, unsigned __int64 size) Line 531 C++
Я пробовал удалить Vulkan, но это не работает.
Подробнее здесь:
https://stackoverflow.com/questions/797 ... teinstance
1756341517
Anonymous
Я написал простую программу Vulkan: < /p>
[code]VkResult GetLayersAndExtensions() {
#ifndef NDEBUG
GraphicsBase::GetInstance().AddInstanceLayer("VK_LAYER_KHRONOS_validation");
GraphicsBase::GetInstance().AddInstanceExtension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
#endif
uint32_t instanceExtensionCount = 0;
const char **instanceExtensionNames = nullptr;
instanceExtensionNames = glfwGetRequiredInstanceExtensions(&instanceExtensionCount);
if (!instanceExtensionNames) {
LOGE(TAG_GLFW, "get instance extensions failed");
glfwTerminate();
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
for (uint32_t index = 0; index < instanceExtensionCount; ++index) {
LOGI(TAG_GLFW, "instance extension {}: {}", index, instanceExtensionNames[index]);
GraphicsBase::GetInstance().AddInstanceExtension(instanceExtensionNames[index]);
}
GraphicsBase::GetInstance().AddDeviceExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
return VK_SUCCESS;
}
VkResult CreateInstance() {
VkApplicationInfo applicationInfo = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.apiVersion = _apiVersion
};
VkInstanceCreateInfo createInfo = {
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pApplicationInfo = &applicationInfo,
.enabledLayerCount = static_cast(_instanceLayers.size()),
.ppEnabledLayerNames = _instanceLayers.data(),
.enabledExtensionCount = static_cast(_instanceExtensions.size()),
.ppEnabledExtensionNames = _instanceExtensions.data()
};
VkResult result = vkCreateInstance(&createInfo, nullptr, &_instance);
if (result) {
LOGE(TAG_COMMON, "create vulkan instance failed, result is {}", std::to_string(result));
return result;
}
return VK_SUCCESS;
}
[/code]
... но он сбои, когда я вызываю vkcreateinstance () :
[code]Exception thrown at 0x00007FFA10473741 (VkLayer_khronos_validation.dll) in learnvulkan.exe: 0xC0000005: Access violation writing location 0x00000000040D20A0.
< /code>
Стек вызовов выглядит следующим образом: < /p>
VkLayer_khronos_validation.dll!mi_page_map_set_range(mi_page_s * idx, unsigned __int64 sub_idx, unsigned __int64 slice_count, unsigned __int64) Line 266 C++
VkLayer_khronos_validation.dll!_mi_page_map_register(mi_page_s * page) Line 294 C++
VkLayer_khronos_validation.dll!mi_arenas_page_alloc_fresh(mi_subproc_s * subproc, unsigned __int64 slice_count, unsigned __int64 block_size, unsigned __int64 block_alignment, mi_arena_s * req_arena, unsigned __int64 tseq, int numa_node, bool commit) Line 709 C++
VkLayer_khronos_validation.dll!mi_arenas_page_regular_alloc(mi_heap_s * heap, unsigned __int64 slice_count, unsigned __int64 block_size) Line 727 C++
VkLayer_khronos_validation.dll!mi_page_fresh_alloc(mi_heap_s * heap, mi_page_queue_s * pq, unsigned __int64 block_size, unsigned __int64 page_alignment) Line 305 C++
VkLayer_khronos_validation.dll!mi_page_queue_find_free_ex(mi_heap_s * heap, mi_page_queue_s * pq, bool first_try) Line 809 C++
VkLayer_khronos_validation.dll!mi_find_page(mi_heap_s * heap, unsigned __int64 size, unsigned __int64 huge_alignment) Line 929 C++
VkLayer_khronos_validation.dll!_mi_malloc_generic(mi_heap_s * heap, unsigned __int64 size, bool zero, unsigned __int64 huge_alignment) Line 965 C++
VkLayer_khronos_validation.dll!mi_heap_alloc_new(mi_heap_s * heap, unsigned __int64 size) Line 531 C++
[/code]
Я пробовал удалить Vulkan, но это не работает.
Подробнее здесь: [url]https://stackoverflow.com/questions/79748558/access-violation-when-calling-vkcreateinstance[/url]