bkaradzic / bgfx

Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.
https://bkaradzic.github.io/bgfx/overview.html
BSD 2-Clause "Simplified" License
15.02k stars 1.95k forks source link

Crash on linux (default backend - vulkan) with custom window handle and native display is NULL #3186

Closed alemuntoni closed 12 months ago

alemuntoni commented 1 year ago

I was trying to initialize and draw something with bgfx on Linux with Qt, and I encountered a crash when the bgfx::init function is called leaving platformData.ndt == NULL:

QWindow* w = new QWindow;

bgfx::Init init;
init.resolution.width = 640;
init.resolution.height = 480;
init.resolution.reset = BGFX_RESET_VSYNC;
init.platformData.nwh = reinterpret_cast<void*>(w->winId());
bgfx::setPlatformData(init.platformData);
bgfx::init(init);

At first, I thought that ndt was required, but then I noticed that setting init.type = bgfx::RendererType::OpenGL prevented the crash from happening. After some research, I found that a similar issue with OpenGL had been resolved in issue #1559, so I believe it can be resolved in a similar way for Vulkan.

The crash occurs here:

https://github.com/bkaradzic/bgfx/blob/448a42a8c6511725fa7ead0d1319b44577550d3a/src/renderer_vk.cpp#L6821

I tried to temporarily solve the problem in a way similar to what was done for issue #1559 by adding the following lines before the line that causes the crash:

if (NULL == g_platformData.ndt) {
    g_platformData.ndt = XOpenDisplay(NULL);
    BGFX_FATAL(g_platformData.ndt, Fatal::UnableToInitialize, "XOpenDisplay(NULL) : Failed to open default display");
}

and this fix seems to solve the crash and initializes everything correctly (although I am pretty sure that the same check is required also in some other places, e.g. for wayland).

Not being familiar with bgfx (I'm trying to use it for the first time), I'm not even sure if this approach is the right way to solve the problem. But could it be a solution to prevent ndt from being a mandatory requirement when using Vulkan?

Chris1AA commented 1 year ago

a) Check if the issue can be reproduced with a bgfx-example. b) Check on a full-stack dump and the according bgfx debug-log. c) Since Qt is used for the front-end, also check what kind of window is used: e.g. child-windows might not be supported by the underlaying vulkan-driver (*). d) See if the issue remains with another vulkan-driver, on another hardware (e.g. AMD vs. nVidia).

If it's an issue with the underlaying drivers, please help to find out what e.g. vulkan-attribut should be considered by the bgfx code, to avoid running into this particular crash (hence, stack dump and debug-logs).

*) I have seen buggy vulkan-drivers when it comes to unsupported or half-supported window-styles, in particular with AMD drivers on Linux, but even on Windows.

alemuntoni commented 12 months ago

a) Check if the issue can be reproduced with a bgfx-example.

I did some testing and it seems that Qt is not the cause. The behavior is consistent in the examples as well, even when using GLFW.

It can be reproduced in any BGFX example by setting init.platformData.ndt = nullptr. For example, here: https://github.com/bkaradzic/bgfx/blob/448a42a8c6511725fa7ead0d1319b44577550d3a/examples/00-helloworld/helloworld.cpp#L36

Please note that modifying (in any example):

init.type = bgfx::RendererType::OpenGL;
init.platformData.ndt  = nullptr;

makes it work. It appears that ndt is required under Vulkan, but not under OpenGL. Is it possible to make ndt optional, as it was done when #1559 was resolved?

I also created a small example using GLFW:

#include <bx/bx.h>
#include <bgfx/bgfx.h>
#include <bgfx/platform.h>
#include <GLFW/glfw3.h>
#if BX_PLATFORM_LINUX
#define GLFW_EXPOSE_NATIVE_X11
#elif BX_PLATFORM_WINDOWS
#define GLFW_EXPOSE_NATIVE_WIN32
#elif BX_PLATFORM_OSX
#define GLFW_EXPOSE_NATIVE_COCOA
#endif
#include <GLFW/glfw3native.h>

int main(int argc, char **argv)
{
    if (!glfwInit())
        return 1;
    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
    GLFWwindow *window = glfwCreateWindow(1024, 768, "helloworld", nullptr, nullptr);
    if (!window)
        return 1;
    bgfx::Init init;
#if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
    init.platformData.ndt = nullptr; // was glfwGetX11Display();
    init.platformData.nwh = (void*)(uintptr_t)glfwGetX11Window(window);
#elif BX_PLATFORM_OSX
    init.platformData.nwh = glfwGetCocoaWindow(window);
#elif BX_PLATFORM_WINDOWS
    init.platformData.nwh = glfwGetWin32Window(window);
#endif
    int width, height;
    glfwGetWindowSize(window, &width, &height);
    init.resolution.width = (uint32_t)width;
    init.resolution.height = (uint32_t)height;
    init.resolution.reset = BGFX_RESET_VSYNC;
    if (!bgfx::init(init))
        return 1;

    // clear and render loop here - omitting     

    bgfx::shutdown();
    glfwTerminate();
    return 0;
}

The behaviour is the same. It cashes with Vulkan when ndt is nullptr, it works with OpenGL.

b) Check on a full-stack dump and the according bgfx debug-log.

bgfx/src/bgfx.cpp (3559): BGFX Init...
bgfx/src/bgfx.cpp (3566): BGFX Version 1.122.8546 (commit: 878767e751e332309369beecb83e86494f90f8fa)
bgfx/src/bgfx.cpp (1745): BGFX Reset back-buffer swap chain:
bgfx/src/bgfx.cpp (1746): BGFX  1280x720, format: RGBA8, numBackBuffers: 2, maxFrameLatency: 0
bgfx/src/bgfx.cpp (1756): BGFX  [ ] MSAAx1
bgfx/src/bgfx.cpp (1757): BGFX  [ ] Fullscreen
bgfx/src/bgfx.cpp (1758): BGFX  [x] V-sync
bgfx/src/bgfx.cpp (1759): BGFX  [ ] Max Anisotropy
bgfx/src/bgfx.cpp (1760): BGFX  [ ] Capture
bgfx/src/bgfx.cpp (1761): BGFX  [ ] Flush After Render
bgfx/src/bgfx.cpp (1762): BGFX  [ ] Flip After Render
bgfx/src/bgfx.cpp (1763): BGFX  [ ] sRGB Back Buffer
bgfx/src/bgfx.cpp (1764): BGFX  [ ] Transparent Back Buffer
bgfx/src/bgfx.cpp (1765): BGFX  [ ] HDR10
bgfx/src/bgfx.cpp (1766): BGFX  [ ] Hi-DPI
bgfx/src/bgfx.cpp (1767): BGFX  [ ] Depth Clamp
bgfx/src/bgfx.cpp (1768): BGFX  [ ] Suspend
bgfx/src/bgfx.cpp (1948): BGFX Creating rendering thread.
bgfx/src/bgfx.cpp (1957): BGFX Running in multi-threaded mode
bgfx/src/bgfx_p.h (3148): BGFX render thread start
bx/src/os.cpp(189): BX WARN dlopen failed: "librenderdoc.so: cannot open shared object file: No such file or directory".
bgfx/src/bgfx.cpp (428): BGFX Graphics debugger is not present.
bgfx/src/renderer_vk.cpp (1178): BGFX Shared library functions:
bgfx/src/renderer_vk.cpp (1185): BGFX   0xc7cdfe50 vkCreateInstance
bgfx/src/renderer_vk.cpp (1185): BGFX   0xc7cd4450 vkGetInstanceProcAddr
bgfx/src/renderer_vk.cpp (1185): BGFX   0xc7cced50 vkGetDeviceProcAddr
bgfx/src/renderer_vk.cpp (1185): BGFX   0xc7cda3b0 vkEnumerateInstanceExtensionProperties
bgfx/src/renderer_vk.cpp (1185): BGFX   0xc7cda6b0 vkEnumerateInstanceLayerProperties
bgfx/src/renderer_vk.cpp (1185): BGFX   0xc7cda9b0 vkEnumerateInstanceVersion
bgfx/src/renderer_vk.cpp (719): BGFX Global extensions (20):
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_device_group_creation
bgfx/src/renderer_vk.cpp (732): BGFX    v23  VK_KHR_display
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_fence_capabilities
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_memory_capabilities
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_semaphore_capabilities
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_get_display_properties2
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_get_physical_device_properties2 (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_get_surface_capabilities2
bgfx/src/renderer_vk.cpp (732): BGFX    v25  VK_KHR_surface
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_surface_protected_capabilities
bgfx/src/renderer_vk.cpp (732): BGFX    v6   VK_KHR_wayland_surface
bgfx/src/renderer_vk.cpp (732): BGFX    v6   VK_KHR_xcb_surface
bgfx/src/renderer_vk.cpp (732): BGFX    v6   VK_KHR_xlib_surface
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_acquire_drm_display
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_acquire_xlib_display
bgfx/src/renderer_vk.cpp (732): BGFX    v10  VK_EXT_debug_report (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_debug_utils (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_direct_mode_display
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_display_surface_counter
bgfx/src/renderer_vk.cpp (732): BGFX    v4   VK_EXT_swapchain_colorspace
bgfx/src/renderer_vk.cpp (758): BGFX Layer extensions (4):
bgfx/src/renderer_vk.cpp (770): BGFX    VK_LAYER_MESA_device_select (s: 0x004030d3, i: 0x00000001), Linux device selection layer
bgfx/src/renderer_vk.cpp (770): BGFX    VK_LAYER_NV_optimus (s: 0x004030f2, i: 0x00000001), NVIDIA Optimus layer
bgfx/src/renderer_vk.cpp (770): BGFX    VK_LAYER_MESA_overlay (s: 0x004030d3, i: 0x00000001), Mesa Overlay layer
bgfx/src/renderer_vk.cpp (770): BGFX    VK_LAYER_INTEL_nullhw (s: 0x00401049, i: 0x00000001), INTEL NULL HW
bgfx/src/renderer_vk.cpp (1220): BGFX Enabled instance layers:
bgfx/src/renderer_vk.cpp (1269): BGFX Enabled instance extensions:
bgfx/src/renderer_vk.cpp (1273): BGFX   VK_KHR_surface
bgfx/src/renderer_vk.cpp (1273): BGFX   VK_KHR_xcb_surface
bgfx/src/renderer_vk.cpp (1273): BGFX   VK_EXT_debug_utils
bgfx/src/renderer_vk.cpp (1273): BGFX   VK_EXT_debug_report
bgfx/src/renderer_vk.cpp (1273): BGFX   VK_KHR_get_physical_device_properties2
bgfx/src/renderer_vk.cpp (1340): BGFX Instance API version: 1.3.204
bgfx/src/renderer_vk.cpp (1345): BGFX Instance variant: 0
bgfx/src/renderer_vk.cpp (1350): BGFX Instance functions:
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdb540 vkDestroyInstance
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdf510 vkEnumeratePhysicalDevices
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdbea0 vkEnumerateDeviceExtensionProperties
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdbf30 vkEnumerateDeviceLayerProperties
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdbdb0 vkGetPhysicalDeviceProperties
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdbd10 vkGetPhysicalDeviceFormatProperties
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdbcc0 vkGetPhysicalDeviceFeatures
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdbd60 vkGetPhysicalDeviceImageFormatProperties
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdbe50 vkGetPhysicalDeviceMemoryProperties
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdbe00 vkGetPhysicalDeviceQueueFamilyProperties
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdf6a0 vkCreateDevice
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdf740 vkDestroyDevice
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdeca0 vkGetPhysicalDeviceSurfaceCapabilitiesKHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdedb0 vkGetPhysicalDeviceSurfaceFormatsKHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdeec0 vkGetPhysicalDeviceSurfacePresentModesKHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdeb80 vkGetPhysicalDeviceSurfaceSupportKHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdeb10 vkDestroySurfaceKHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cddf50 vkGetPhysicalDeviceFeatures2KHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cde180 vkGetPhysicalDeviceMemoryProperties2KHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cbc560 vkCreateDebugReportCallbackEXT
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cbc600 vkDestroyDebugReportCallbackEXT
bgfx/src/renderer_vk.cpp (1356): BGFX   0x0 vkCreateXlibSurfaceKHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0x0 vkGetPhysicalDeviceXlibPresentationSupportKHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdf240 vkCreateXcbSurfaceKHR
bgfx/src/renderer_vk.cpp (1356): BGFX   0xc7cdf2b0 vkGetPhysicalDeviceXcbPresentationSupportKHR
bgfx/src/renderer_vk.cpp (1387): BGFX ---
bgfx/src/renderer_vk.cpp (1424): BGFX Physical device 0:
bgfx/src/renderer_vk.cpp (1425): BGFX             Name: NVIDIA GeForce GTX 1080
bgfx/src/renderer_vk.cpp (1426): BGFX      API version: 1.3.242
bgfx/src/renderer_vk.cpp (1431): BGFX      API variant: 0
bgfx/src/renderer_vk.cpp (1432): BGFX   Driver version: 85dc4040
bgfx/src/renderer_vk.cpp (1433): BGFX         VendorId: 10de
bgfx/src/renderer_vk.cpp (1434): BGFX         DeviceId: 1b80
bgfx/src/renderer_vk.cpp (1435): BGFX             Type: 2
bgfx/src/renderer_vk.cpp (1473): BGFX   Memory type count: 11
bgfx/src/renderer_vk.cpp (1476): BGFX     0: flags 0x00000000, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX     1: flags 0x00000000, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX     2: flags 0x00000000, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX     3: flags 0x00000000, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX     4: flags 0x00000000, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX     5: flags 0x00000000, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX     6: flags 0x00000000, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX     7: flags 0x00000001, index 0
bgfx/src/renderer_vk.cpp (1476): BGFX     8: flags 0x00000006, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX     9: flags 0x0000000e, index 1
bgfx/src/renderer_vk.cpp (1476): BGFX    10: flags 0x00000007, index 2
bgfx/src/renderer_vk.cpp (1483): BGFX   Memory heap count: 3
bgfx/src/renderer_vk.cpp (1488): BGFX     0: flags 0x00000001, size   8.00 GiB
bgfx/src/renderer_vk.cpp (1488): BGFX     1: flags 0x00000000, size  23.44 GiB
bgfx/src/renderer_vk.cpp (1488): BGFX     2: flags 0x00000001, size 246.00 MiB
bgfx/src/renderer_vk.cpp (719): BGFX Global extensions (164):
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_16bit_storage
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_8bit_storage
bgfx/src/renderer_vk.cpp (732): BGFX    v13  VK_KHR_acceleration_structure
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_bind_memory2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_buffer_device_address
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_copy_commands2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_create_renderpass2
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_KHR_dedicated_allocation
bgfx/src/renderer_vk.cpp (732): BGFX    v4   VK_KHR_deferred_host_operations
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_depth_stencil_resolve
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_descriptor_update_template
bgfx/src/renderer_vk.cpp (732): BGFX    v4   VK_KHR_device_group
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_draw_indirect_count (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_driver_properties
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_dynamic_rendering
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_fence
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_fence_fd
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_memory
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_memory_fd
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_semaphore
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_semaphore_fd
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_format_feature_flags2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_get_memory_requirements2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_global_priority
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_image_format_list
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_imageless_framebuffer
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_maintenance1
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_maintenance2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_maintenance3
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_maintenance4
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_multiview
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_pipeline_executable_properties
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_pipeline_library
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_present_id
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_present_wait
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_push_descriptor
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_ray_tracing_maintenance1
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_ray_tracing_pipeline
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_relaxed_block_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_KHR_sampler_mirror_clamp_to_edge
bgfx/src/renderer_vk.cpp (732): BGFX    v14  VK_KHR_sampler_ycbcr_conversion
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_separate_depth_stencil_layouts
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_atomic_int64
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_clock
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_draw_parameters
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_float16_int8
bgfx/src/renderer_vk.cpp (732): BGFX    v4   VK_KHR_shader_float_controls
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_integer_dot_product
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_non_semantic_info
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_subgroup_extended_types
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_terminate_invocation
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shared_presentable_image
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_spirv_1_4
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_storage_buffer_storage_class
bgfx/src/renderer_vk.cpp (732): BGFX    v70  VK_KHR_swapchain
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_swapchain_mutable_format
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_synchronization2
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_timeline_semaphore
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_uniform_buffer_standard_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_variable_pointers
bgfx/src/renderer_vk.cpp (732): BGFX    v8   VK_KHR_video_decode_h264
bgfx/src/renderer_vk.cpp (732): BGFX    v7   VK_KHR_video_decode_h265
bgfx/src/renderer_vk.cpp (732): BGFX    v7   VK_KHR_video_decode_queue
bgfx/src/renderer_vk.cpp (732): BGFX    v8   VK_KHR_video_queue
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_KHR_vulkan_memory_model
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_workgroup_memory_explicit_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_zero_initialize_workgroup_memory
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_4444_formats
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_attachment_feedback_loop_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_blend_operation_advanced
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_border_color_swizzle
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_buffer_device_address
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_calibrated_timestamps
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_color_write_enable
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_conditional_rendering
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_conservative_rasterization (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v12  VK_EXT_custom_border_color (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_depth_clamp_zero_one
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_depth_clip_control
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_depth_clip_enable
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_depth_range_unrestricted
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_descriptor_buffer
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_descriptor_indexing
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_discard_rectangles
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_display_control
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_extended_dynamic_state
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_extended_dynamic_state2
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_extended_dynamic_state3
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_external_memory_dma_buf
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_external_memory_host
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_fragment_shader_interlock
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_global_priority
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_global_priority_query
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_graphics_pipeline_library
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_host_query_reset
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_image_2d_view_of_3d
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_image_drm_format_modifier
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_image_robustness
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_image_sliced_view_of_3d
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_image_view_min_lod
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_index_type_uint8
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_inline_uniform_block
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_line_rasterization (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_load_store_op_none
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_memory_budget (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_multi_draw
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_non_seamless_cube_map
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_pci_bus_info
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_physical_device_drm
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_EXT_pipeline_creation_cache_control
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_pipeline_creation_feedback
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_pipeline_library_group_handles
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_pipeline_robustness
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_post_depth_coverage
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_primitive_topology_list_restart
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_primitives_generated_query
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_private_data
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_provoking_vertex
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_queue_family_foreign
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_robustness2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_sample_locations
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_sampler_filter_minmax
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_scalar_block_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_separate_stencil_usage
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_atomic_float
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_demote_to_helper_invocation
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_image_atomic_int64
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_module_identifier
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_object
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_subgroup_ballot
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_subgroup_vote
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_viewport_index_layer (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_subgroup_size_control
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_texel_buffer_alignment
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_tooling_info
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_transform_feedback
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_EXT_vertex_attribute_divisor
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_vertex_input_dynamic_state
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_ycbcr_2plane_444_formats
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_ycbcr_image_arrays
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_clip_space_w_scaling
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_copy_memory_indirect
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_coverage_reduction_mode
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_dedicated_allocation
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_dedicated_allocation_image_aliasing
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_NV_device_diagnostic_checkpoints
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_NV_device_diagnostics_config
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_NV_device_generated_commands
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_fill_rectangle
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_fragment_coverage_to_color
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_framebuffer_mixed_samples
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_geometry_shader_passthrough
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_inherited_viewport_scissor
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_linear_color_attachment
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_memory_decompression
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_NV_ray_tracing
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_ray_tracing_invocation_reorder
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_sample_mask_override_coverage
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_shader_sm_builtins
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_shader_subgroup_partitioned
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_viewport_array2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NV_viewport_swizzle
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_NVX_multiview_per_view_attributes
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_AMD_buffer_marker
bgfx/src/renderer_vk.cpp (758): BGFX    Layer extensions (1):
bgfx/src/renderer_vk.cpp (770): BGFX        VK_LAYER_MESA_device_select (s: 0x004030d3, i: 0x00000001), Linux device selection layer
bgfx/src/renderer_vk.cpp (1424): BGFX Physical device 1:
bgfx/src/renderer_vk.cpp (1425): BGFX             Name: llvmpipe (LLVM 15.0.7, 256 bits)
bgfx/src/renderer_vk.cpp (1426): BGFX      API version: 1.3.238
bgfx/src/renderer_vk.cpp (1431): BGFX      API variant: 0
bgfx/src/renderer_vk.cpp (1432): BGFX   Driver version: 1
bgfx/src/renderer_vk.cpp (1433): BGFX         VendorId: 10005
bgfx/src/renderer_vk.cpp (1434): BGFX         DeviceId: 0
bgfx/src/renderer_vk.cpp (1435): BGFX             Type: 4
bgfx/src/renderer_vk.cpp (1473): BGFX   Memory type count: 1
bgfx/src/renderer_vk.cpp (1476): BGFX     0: flags 0x0000000f, index 0
bgfx/src/renderer_vk.cpp (1483): BGFX   Memory heap count: 1
bgfx/src/renderer_vk.cpp (1488): BGFX     0: flags 0x00000001, size   2.00 GiB
bgfx/src/renderer_vk.cpp (719): BGFX Global extensions (102):
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_8bit_storage
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_16bit_storage
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_bind_memory2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_buffer_device_address
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_copy_commands2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_create_renderpass2
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_KHR_dedicated_allocation
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_depth_stencil_resolve
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_descriptor_update_template
bgfx/src/renderer_vk.cpp (732): BGFX    v4   VK_KHR_device_group
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_draw_indirect_count (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_driver_properties
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_dynamic_rendering
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_fence
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_memory
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_memory_fd
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_external_semaphore
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_format_feature_flags2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_get_memory_requirements2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_image_format_list
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_imageless_framebuffer
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_incremental_present
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_maintenance1
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_maintenance2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_maintenance3
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_maintenance4
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_multiview
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_pipeline_library
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_push_descriptor
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_relaxed_block_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_KHR_sampler_mirror_clamp_to_edge
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_separate_depth_stencil_layouts
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_atomic_int64
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_clock
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_draw_parameters
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_float16_int8
bgfx/src/renderer_vk.cpp (732): BGFX    v4   VK_KHR_shader_float_controls
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_integer_dot_product
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_non_semantic_info
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_subgroup_extended_types
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_shader_terminate_invocation
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_spirv_1_4
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_storage_buffer_storage_class
bgfx/src/renderer_vk.cpp (732): BGFX    v70  VK_KHR_swapchain
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_swapchain_mutable_format
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_synchronization2
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_KHR_timeline_semaphore
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_uniform_buffer_standard_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_variable_pointers
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_KHR_vulkan_memory_model
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_KHR_zero_initialize_workgroup_memory
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_4444_formats
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_attachment_feedback_loop_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_border_color_swizzle
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_calibrated_timestamps
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_color_write_enable
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_conditional_rendering
bgfx/src/renderer_vk.cpp (732): BGFX    v12  VK_EXT_custom_border_color (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_depth_clip_control
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_depth_clip_enable
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_depth_range_unrestricted
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_extended_dynamic_state
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_extended_dynamic_state2
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_extended_dynamic_state3
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_external_memory_host
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_graphics_pipeline_library
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_host_query_reset
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_image_2d_view_of_3d
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_image_robustness
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_index_type_uint8
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_inline_uniform_block
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_line_rasterization (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_multi_draw
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_multisampled_render_to_single_sampled
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_non_seamless_cube_map
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_EXT_pipeline_creation_cache_control
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_pipeline_creation_feedback
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_post_depth_coverage
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_primitive_topology_list_restart
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_primitives_generated_query
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_private_data
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_provoking_vertex
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_rasterization_order_attachment_access
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_robustness2
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_sampler_filter_minmax
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_scalar_block_layout
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_separate_stencil_usage
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_atomic_float
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_atomic_float2
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_demote_to_helper_invocation
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_stencil_export
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_subgroup_ballot
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_subgroup_vote
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_shader_viewport_index_layer (supported)
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_subgroup_size_control
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_texel_buffer_alignment
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_EXT_transform_feedback
bgfx/src/renderer_vk.cpp (732): BGFX    v3   VK_EXT_vertex_attribute_divisor
bgfx/src/renderer_vk.cpp (732): BGFX    v2   VK_EXT_vertex_input_dynamic_state
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_ARM_rasterization_order_attachment_access
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_GOOGLE_decorate_string
bgfx/src/renderer_vk.cpp (732): BGFX    v1   VK_GOOGLE_hlsl_functionality1
bgfx/src/renderer_vk.cpp (758): BGFX    Layer extensions (1):
bgfx/src/renderer_vk.cpp (770): BGFX        VK_LAYER_MESA_device_select (s: 0x004030d3, i: 0x00000001), Linux device selection layer
bgfx/src/renderer_vk.cpp (1515): BGFX Using physical device 0: NVIDIA GeForce GTX 1080
bgfx/src/renderer_vk.cpp (1734): BGFX ---
bgfx/src/renderer_vk.cpp (1754): BGFX Queue family property 0:
bgfx/src/renderer_vk.cpp (1755): BGFX     Queue flags: 0x0000000f
bgfx/src/renderer_vk.cpp (1756): BGFX     Queue count: 16
bgfx/src/renderer_vk.cpp (1757): BGFX   TS valid bits: 0x00000040
bgfx/src/renderer_vk.cpp (1758): BGFX       Min image: 1 x 1 x 1
bgfx/src/renderer_vk.cpp (1754): BGFX Queue family property 1:
bgfx/src/renderer_vk.cpp (1755): BGFX     Queue flags: 0x0000000c
bgfx/src/renderer_vk.cpp (1756): BGFX     Queue count: 2
bgfx/src/renderer_vk.cpp (1757): BGFX   TS valid bits: 0x00000040
bgfx/src/renderer_vk.cpp (1758): BGFX       Min image: 1 x 1 x 1
bgfx/src/renderer_vk.cpp (1754): BGFX Queue family property 2:
bgfx/src/renderer_vk.cpp (1755): BGFX     Queue flags: 0x0000000e
bgfx/src/renderer_vk.cpp (1756): BGFX     Queue count: 8
bgfx/src/renderer_vk.cpp (1757): BGFX   TS valid bits: 0x00000040
bgfx/src/renderer_vk.cpp (1758): BGFX       Min image: 1 x 1 x 1
bgfx/src/renderer_vk.cpp (1754): BGFX Queue family property 3:
bgfx/src/renderer_vk.cpp (1755): BGFX     Queue flags: 0x0000002c
bgfx/src/renderer_vk.cpp (1756): BGFX     Queue count: 1
bgfx/src/renderer_vk.cpp (1757): BGFX   TS valid bits: 0x00000020
bgfx/src/renderer_vk.cpp (1758): BGFX       Min image: 1 x 1 x 1
bgfx/src/renderer_vk.cpp (1787): BGFX Enabled device layers:
bgfx/src/renderer_vk.cpp (1834): BGFX Enabled device extensions:
bgfx/src/renderer_vk.cpp (1838): BGFX   VK_KHR_maintenance1
bgfx/src/renderer_vk.cpp (1838): BGFX   VK_KHR_swapchain
bgfx/src/renderer_vk.cpp (1838): BGFX   VK_EXT_memory_budget
bgfx/src/renderer_vk.cpp (1838): BGFX   VK_EXT_conservative_rasterization
bgfx/src/renderer_vk.cpp (1838): BGFX   VK_EXT_line_rasterization
bgfx/src/renderer_vk.cpp (1838): BGFX   VK_EXT_shader_viewport_index_layer
bgfx/src/renderer_vk.cpp (1838): BGFX   VK_EXT_custom_border_color
bgfx/src/renderer_vk.cpp (1838): BGFX   VK_KHR_draw_indirect_count
bgfx/src/renderer_vk.cpp (1878): BGFX Device functions:
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc7cdc0c0 vkGetDeviceQueue
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac835b10 vkCreateFence
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8517f0 vkDestroyFence
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac851190 vkCreateSemaphore
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac851870 vkDestroySemaphore
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8531c0 vkResetFences
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac824280 vkCreateCommandPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac851790 vkDestroyCommandPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8530a0 vkResetCommandPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc7cdd2c0 vkAllocateCommandBuffers
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac852380 vkFreeCommandBuffers
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac844ca0 vkGetBufferMemoryRequirements
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac852630 vkGetImageMemoryRequirements
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac852680 vkGetImageSubresourceLayout
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc44c9980 vkAllocateMemory
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac852430 vkFreeMemory
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac843110 vkCreateImage
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac851810 vkDestroyImage
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac835e90 vkCreateImageView
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac86d490 vkDestroyImageView
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac833bf0 vkCreateBuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac851770 vkDestroyBuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8243c0 vkCreateFramebuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac848070 vkDestroyFramebuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac84c890 vkCreateRenderPass
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac84c870 vkDestroyRenderPass
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8511b0 vkCreateShaderModule
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8482b0 vkDestroyShaderModule
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac844920 vkCreatePipelineCache
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac851850 vkDestroyPipelineCache
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac844e90 vkGetPipelineCacheData
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac844ec0 vkMergePipelineCaches
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8243d0 vkCreateGraphicsPipelines
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac824290 vkCreateComputePipelines
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac844bd0 vkDestroyPipeline
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac844a60 vkCreatePipelineLayout
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac848170 vkDestroyPipelineLayout
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac84d1a0 vkCreateSampler
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac84d0a0 vkDestroySampler
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8243a0 vkCreateDescriptorSetLayout
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac848dd0 vkDestroyDescriptorSetLayout
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac834e60 vkCreateDescriptorPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8517b0 vkDestroyDescriptorPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac853190 vkResetDescriptorPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac820ae0 vkAllocateDescriptorSets
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8523d0 vkFreeDescriptorSets
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8532a0 vkUpdateDescriptorSets
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac849fa0 vkCreateQueryPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac848210 vkDestroyQueryPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc44c99e0 vkQueueSubmit
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac844f20 vkQueueWaitIdle
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8520f0 vkDeviceWaitIdle
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8548b0 vkWaitForFences
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac821270 vkBeginCommandBuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac844c00 vkEndCommandBuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac821550 vkCmdPipelineBarrier
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac821310 vkCmdBeginRenderPass
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac822d60 vkCmdEndRenderPass
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80e180 vkCmdSetViewport
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80e050 vkCmdDraw
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80e070 vkCmdDrawIndexed
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80e0c0 vkCmdDrawIndirect
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80e090 vkCmdDrawIndexedIndirect
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80e000 vkCmdDispatch
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80e020 vkCmdDispatchIndirect
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80dde0 vkCmdBindPipeline
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac823c30 vkCmdSetStencilReference
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac815f90 vkCmdSetBlendConstants
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac823bc0 vkCmdSetScissor
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8178c0 vkCmdBindDescriptorSets
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac815d60 vkCmdBindIndexBuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac821330 vkCmdBindVertexBuffers
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80de70 vkCmdClearColorImage
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8214d0 vkCmdClearDepthStencilImage
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac8213a0 vkCmdClearAttachments
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80e120 vkCmdResolveImage
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80deb0 vkCmdCopyBuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80df00 vkCmdCopyBufferToImage
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80df50 vkCmdCopyImage
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80dfb0 vkCmdCopyImageToBuffer
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac80de10 vkCmdBlitImage
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac823720 vkCmdResetQueryPool
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac824200 vkCmdWriteTimestamp
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac821280 vkCmdBeginQuery
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac822ce0 vkCmdEndQuery
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac821570 vkCmdCopyQueryPoolResults
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac852f70 vkMapMemory
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac853270 vkUnmapMemory
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac852340 vkFlushMappedMemoryRanges
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac852360 vkInvalidateMappedMemoryRanges
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc44c9920 vkBindBufferMemory
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc44c98c0 vkBindImageMemory
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc7cdfa80 vkCreateSwapchainKHR
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc44c9a90 vkDestroySwapchainKHR
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac846580 vkGetSwapchainImagesKHR
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc44c9840 vkAcquireNextImageKHR
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc44c9a40 vkQueuePresentKHR
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc7cc1b10 vkSetDebugUtilsObjectNameEXT
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc7cbb370 vkCmdBeginDebugUtilsLabelEXT
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc7cbb450 vkCmdEndDebugUtilsLabelEXT
bgfx/src/renderer_vk.cpp (1883): BGFX   0xc7cbb530 vkCmdInsertDebugUtilsLabelEXT
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac846190 vkCmdDrawIndirectCountKHR
bgfx/src/renderer_vk.cpp (1883): BGFX   0xac846150 vkCmdDrawIndexedIndirectCountKHR
cmake/bgfx/example-00-helloworld crashed.

d) See if the issue remains with another vulkan-driver, on another hardware (e.g. AMD vs. nVidia).

I tested it on two NVIDIA GPUs. I don't have access to other hardware for testing, but it appears to me that implementing a check on the ndt value could potentially prevent the crash, similar to what is done with OpenGL #1559 .

Chris1AA commented 12 months ago

Hi alemuntoni, thanks for the log.

The debug log indicates that vkCreateXlibSurfaceKHR is not available (nullptr): bgfx/src/renderer_vk.cpp (1356): BGFX 0x0 vkCreateXlibSurfaceKHR

vkCreateXlibSurfaceKHR does require a valid ndt (dpy) handle (see VkXlibSurfaceCreateInfoKHR) used in SwapChainVK::createSurface() for a X11 driver platform. Thus, pointing out that a Wayland (vkCreateWaylandSurfaceKHR) driver platform is used, which would not require a valid ndt handle. To enable Wayland define the bgfx compiler flag WL_EGL_PLATFORM.

alemuntoni commented 12 months ago

Hi @Chris1AA, thank you!

I think that I am missing something: where is pointed out that a Wayland platform is used? I am trying to avoid it because Qt still does not support it well. Is there something on the log that points to Wayland instead of X?

Chris1AA commented 12 months ago

Search your log for vkCreateXlibSurfaceKHR and find _bgfx/src/renderervk.cpp (1356): BGFX 0x0 vkCreateXlibSurfaceKHR See SwapChainVK::createSurface() in renderer_vk.cpp.

Xlib is the default implementation for Linux, Wayland is an option. Since vkCreateXlibSurfaceKHR is not available (function pointer is 0x0) by the underlaying mesa/nvidia platform drivers, Wayland may be implemented (vkCreateWaylandSurfaceKHR).

Check what applies to your installed environment (what is supported by your mesa + nvidia backends).

alemuntoni commented 12 months ago

Oh, I see. Thanks, @Chris1AA, and I apologize for taking up your time. I genuinely thought there was the same bug as the old OpenGL issue, but it appears that my system is more messed up than I had realized. I'll check it and I'll ask for help in the discord channel, if needed.

Thank you very much for bgfx!