Entropy
Entropy

Reputation: 11

BGFX Init results in segmentation fault

I am trying to learn bgfx and I have a little project for fooling around a bit with some debugging/logging macros, so that I can just copy this code over to "real" projects:

#include <cstdio>
#include <bx/bx.h>
#include <bgfx/bgfx.h>
#include <bgfx/platform.h>
#include <GLFW/glfw3.h>



#ifdef DEBUG
    #define BLACK_TEXT "\033[30m"
    #define RED_TEXT "\033[31m"
    #define GREEN_TEXT "\033[32m"
    #define YELLOW_TEXT "\033[33m"
    #define BLUE_TEXT "\033[34m"
    #define MAGENTA_TEXT "\033[35m"
    #define CYAN_TEXT "\033[36m"
    #define WHITE_TEXT "\033[37m"
    #define RESET_TEXT "\033[0m"
    #define NEWLINE "\n"
    #define VERBOSE
#endif

#ifdef VERBOSE
    #define LOG_INFO(...) printf(GREEN_TEXT "INFO: " RESET_TEXT __VA_ARGS__ NEWLINE);
    #define LOG_WARN(...) printf(YELLOW_TEXT "WARN: " RESET_TEXT __VA_ARGS__ NEWLINE);
    #define LOG_ERROR(...) printf(RED_TEXT "ERROR: " RESET_TEXT __VA_ARGS__ NEWLINE);
#else
    #define LOG_INFO(...);
    #define LOG_WARN(...);
    #define LOG_ERROR(...);
#endif

#if BX_PLATFORM_LINUX
    #if defined(__has_include) && __has_include(<wayland-client.h>)
        #define GLFW_EXPOSE_NATIVE_WAYLAND
    #else
        #define GLFW_EXPOSE_NATIVE_X11
    #endif
#elif BX_PLATFORM_WINDOWS
    #define GLFW_EXPOSE_NATIVE_WIN32
#elif BX_PLATFORM_OSX
    #define GLFW_EXPOSE_NATIVE_COCOA
#endif
#include <iostream>
#include <GLFW/glfw3native.h>

//#define FULLSCREEN

#define WNDW_WIDTH 1600
#define WNDW_HEIGHT 900

int main(void)
{
    glfwInit();
#ifdef FULLSCREEN
    int* count = new int;
    GLFWmonitor** monitors = glfwGetMonitors(count);
    GLFWmonitor* default_monitor = monitors[0];
#else
    GLFWmonitor* default_monitor = NULL;
#endif
    GLFWwindow* window = glfwCreateWindow(WNDW_WIDTH, WNDW_HEIGHT, "Hello, bgfx!", default_monitor, NULL);

    if (!window)
    {
        glfwTerminate();
        LOG_ERROR("Failed to create GLFW window")
        return -1;
    }
    
    bgfx::PlatformData pd;
    pd.context = glfwGetCurrentContext();
#if defined(GLFW_EXPOSE_NATIVE_WAYLAND)
    LOG_INFO("Starting Wayland-Environment")
    pd.nwh = glfwGetWaylandWindow(window);
    pd.ndt = glfwGetWaylandDisplay();
#elif defined(GLFW_EXPOSE_NATIVE_X11)
    LOG_INFO("Starting X11-Environment")
    pd.nwh = (void*)(uintptr_t)glfwGetX11Window(window);
    pd.ndt = glfwGetX11Display();
#elif defined(GLFW_EXPOSE_NATIVE_WIN32)
    LOG_INFO("Starting Win32-Environment")
    pd.nwh = glfwGetWin32Window(window);
    pd.ndt = nullptr;
#elif defined(GLFW_EXPOSE_NATIVE_COCOA)
    LOG_INFO("Starting Cocoa-Environment")
    pd.nwh = glfwGetCocoaWindow(window);
    pd.ndt = nullptr;
#endif

    if (!pd.nwh)
    {
        glfwDestroyWindow(window);
        glfwTerminate();
        LOG_ERROR("Failed to get native window handle")
        return -1;
    }

    LOG_INFO("Initialized GLFW window")
    
    bgfx::Init bgfxInit;
    bgfxInit.type = bgfx::RendererType::Vulkan; // Automatically choose a renderer.
    bgfxInit.resolution.width = WNDW_WIDTH;
    bgfxInit.resolution.height = WNDW_HEIGHT;
    bgfxInit.resolution.reset = BGFX_RESET_VSYNC;
    bgfxInit.platformData = pd;
    bgfx::init(bgfxInit);

    LOG_INFO("BGFX initialized")

    bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x443355FF, 1.0f, 0);
    bgfx::setViewRect(0, 0, 0, WNDW_WIDTH, WNDW_HEIGHT);

    unsigned int counter = 0;
    while (!glfwWindowShouldClose(window))
    {   
        bgfx::touch(0);
        bgfx::frame();
        counter++;
        glfwPollEvents();
    }

    LOG_INFO("Exiting main loop, Shutting Down...")

    bgfx::shutdown();
    glfwDestroyWindow(window);
    glfwTerminate();

#ifdef FULLSCREEN
    delete count;
#endif
    return 0;
}

The issue I am currently facing is, as implied by the title, that calling bgfx::init(bgfxInit) (found in the lower third of the code) results in a SIGSEGV. Sadly guides for bgfx are largely deprecated and the documentation is, as expected, not really useful to someone who has very little experience with similar libraries.

In case this helps, here is the console output when executing the debug build:

/home/entropy/CLionProjects/BGFX_Testing/cmake-build-debug/BGFX_Testing
INFO: Starting Wayland-Environment
INFO: Initialized GLFW window
../../../src/bgfx.cpp (3559): BGFX Init...
../../../src/bgfx.cpp (3566): BGFX Version 1.128.8775 (commit: a476c5b9a42d3779af59a0099d4d222fa8898d36)
../../../src/bgfx.cpp (1736): BGFX Reset back-buffer swap chain:
../../../src/bgfx.cpp (1737): BGFX  1600x900, format: RGBA8, numBackBuffers: 2, maxFrameLatency: 0
../../../src/bgfx.cpp (1747): BGFX  [ ] MSAAx1
../../../src/bgfx.cpp (1748): BGFX  [ ] Fullscreen
../../../src/bgfx.cpp (1749): BGFX  [x] V-sync
../../../src/bgfx.cpp (1750): BGFX  [ ] Max Anisotropy
../../../src/bgfx.cpp (1751): BGFX  [ ] Capture
../../../src/bgfx.cpp (1752): BGFX  [ ] Flush After Render
../../../src/bgfx.cpp (1753): BGFX  [ ] Flip After Render
../../../src/bgfx.cpp (1754): BGFX  [ ] sRGB Back Buffer
../../../src/bgfx.cpp (1755): BGFX  [ ] Transparent Back Buffer
../../../src/bgfx.cpp (1756): BGFX  [ ] HDR10
../../../src/bgfx.cpp (1757): BGFX  [ ] Hi-DPI
../../../src/bgfx.cpp (1758): BGFX  [ ] Depth Clamp
../../../src/bgfx.cpp (1759): BGFX  [ ] Suspend
../../../src/bgfx.cpp (1939): BGFX Creating rendering thread.
../../../src/bgfx.cpp (1948): BGFX Running in multi-threaded mode
../../../src/bgfx_p.h (3162): BGFX render thread start
../../../../bx/src/os.cpp(176): BX WARN dlopen failed: "librenderdoc.so: cannot open shared object file: No such file or directory".
../../../src/bgfx.cpp (419): BGFX Graphics debugger is not present.
../../../src/renderer_vk.cpp (1195): BGFX Shared library functions:
../../../src/renderer_vk.cpp (1202): BGFX   0x51ab3340 vkCreateInstance
../../../src/renderer_vk.cpp (1202): BGFX   0x51aaf870 vkGetInstanceProcAddr
../../../src/renderer_vk.cpp (1202): BGFX   0x51aaf5c0 vkGetDeviceProcAddr
../../../src/renderer_vk.cpp (1202): BGFX   0x51ab2a40 vkEnumerateInstanceExtensionProperties
../../../src/renderer_vk.cpp (1202): BGFX   0x51ab2e30 vkEnumerateInstanceLayerProperties
../../../src/renderer_vk.cpp (1202): BGFX   0x51ab2650 vkEnumerateInstanceVersion
../../../src/renderer_vk.cpp (734): BGFX Global extensions (24):
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_device_group_creation
../../../src/renderer_vk.cpp (747): BGFX    v23  VK_KHR_display
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_external_fence_capabilities
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_external_memory_capabilities
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_external_semaphore_capabilities
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_get_display_properties2
../../../src/renderer_vk.cpp (747): BGFX    v2   VK_KHR_get_physical_device_properties2 (supported)
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_get_surface_capabilities2
../../../src/renderer_vk.cpp (747): BGFX    v25  VK_KHR_surface
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_surface_protected_capabilities
../../../src/renderer_vk.cpp (747): BGFX    v6   VK_KHR_wayland_surface
../../../src/renderer_vk.cpp (747): BGFX    v6   VK_KHR_xcb_surface
../../../src/renderer_vk.cpp (747): BGFX    v6   VK_KHR_xlib_surface
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_EXT_acquire_drm_display
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_EXT_acquire_xlib_display
../../../src/renderer_vk.cpp (747): BGFX    v10  VK_EXT_debug_report (supported)
../../../src/renderer_vk.cpp (747): BGFX    v2   VK_EXT_debug_utils (supported)
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_EXT_direct_mode_display
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_EXT_display_surface_counter
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_EXT_headless_surface
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_EXT_surface_maintenance1
../../../src/renderer_vk.cpp (747): BGFX    v4   VK_EXT_swapchain_colorspace
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_portability_enumeration
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_LUNARG_direct_driver_loading
../../../src/renderer_vk.cpp (773): BGFX Layer extensions (7):
../../../src/renderer_vk.cpp (785): BGFX    VK_LAYER_VALVE_steam_overlay_32 (s: 0x004030cf, i: 0x00000001), Steam Overlay Layer
../../../src/renderer_vk.cpp (785): BGFX    VK_LAYER_VALVE_steam_overlay_64 (s: 0x004030cf, i: 0x00000001), Steam Overlay Layer
../../../src/renderer_vk.cpp (785): BGFX    VK_LAYER_VALVE_steam_fossilize_32 (s: 0x004030cf, i: 0x00000001), Steam Pipeline Caching Layer
../../../src/renderer_vk.cpp (785): BGFX    VK_LAYER_VALVE_steam_fossilize_64 (s: 0x004030cf, i: 0x00000001), Steam Pipeline Caching Layer
../../../src/renderer_vk.cpp (785): BGFX    VK_LAYER_MANGOHUD_overlay_x86_64 (s: 0x00403000, i: 0x00000001), Vulkan Hud Overlay
../../../src/renderer_vk.cpp (785): BGFX    VK_LAYER_MANGOAPP_overlay (s: 0x00403000, i: 0x00000001), Mangoapp Layer
../../../src/renderer_vk.cpp (785): BGFX    VK_LAYER_FROG_gamescope_wsi_x86_64 (s: 0x004030dd, i: 0x00000001), Gamescope WSI (XWayland Bypass) Layer (x86_64)
../../../src/renderer_vk.cpp (1236): BGFX Enabled instance layers:
../../../src/renderer_vk.cpp (1277): BGFX Enabled instance extensions:
../../../src/renderer_vk.cpp (1281): BGFX   VK_KHR_surface
../../../src/renderer_vk.cpp (1281): BGFX   VK_KHR_xcb_surface
../../../src/renderer_vk.cpp (1281): BGFX   VK_EXT_debug_report
../../../src/renderer_vk.cpp (1281): BGFX   VK_EXT_debug_utils
../../../src/renderer_vk.cpp (1281): BGFX   VK_KHR_get_physical_device_properties2
../../../src/renderer_vk.cpp (1354): BGFX Instance API version: 1.3.279
../../../src/renderer_vk.cpp (1359): BGFX Instance variant: 0
../../../src/renderer_vk.cpp (1364): BGFX Instance functions:
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab2140 vkDestroyInstance
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab5e00 vkEnumeratePhysicalDevices
../../../src/renderer_vk.cpp (1370): BGFX   0x51aaf340 vkEnumerateDeviceExtensionProperties
../../../src/renderer_vk.cpp (1370): BGFX   0x51aaf3e0 vkEnumerateDeviceLayerProperties
../../../src/renderer_vk.cpp (1370): BGFX   0x51aabf60 vkGetPhysicalDeviceProperties
../../../src/renderer_vk.cpp (1370): BGFX   0x51aabea0 vkGetPhysicalDeviceFormatProperties
../../../src/renderer_vk.cpp (1370): BGFX   0x51aabe40 vkGetPhysicalDeviceFeatures
../../../src/renderer_vk.cpp (1370): BGFX   0x51aabf00 vkGetPhysicalDeviceImageFormatProperties
../../../src/renderer_vk.cpp (1370): BGFX   0x51aac020 vkGetPhysicalDeviceMemoryProperties
../../../src/renderer_vk.cpp (1370): BGFX   0x51aabfc0 vkGetPhysicalDeviceQueueFamilyProperties
../../../src/renderer_vk.cpp (1370): BGFX   0x51aaf520 vkCreateDevice
../../../src/renderer_vk.cpp (1370): BGFX   0x51aaf7e0 vkDestroyDevice
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab8250 vkGetPhysicalDeviceSurfaceCapabilitiesKHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab82b0 vkGetPhysicalDeviceSurfaceFormatsKHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab8310 vkGetPhysicalDeviceSurfacePresentModesKHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab81f0 vkGetPhysicalDeviceSurfaceSupportKHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab8c70 vkDestroySurfaceKHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51aaed20 vkGetPhysicalDeviceFeatures2KHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51aaefa0 vkGetPhysicalDeviceMemoryProperties2KHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51a84350 vkCreateDebugReportCallbackEXT
../../../src/renderer_vk.cpp (1370): BGFX   0x51a84420 vkDestroyDebugReportCallbackEXT
../../../src/renderer_vk.cpp (1370): BGFX   0x0 vkCreateXlibSurfaceKHR
../../../src/renderer_vk.cpp (1370): BGFX   0x0 vkGetPhysicalDeviceXlibPresentationSupportKHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab8e10 vkCreateXcbSurfaceKHR
../../../src/renderer_vk.cpp (1370): BGFX   0x51ab8550 vkGetPhysicalDeviceXcbPresentationSupportKHR
../../../src/renderer_vk.cpp (1401): BGFX ---
../../../src/renderer_vk.cpp (1438): BGFX Physical device 0:
../../../src/renderer_vk.cpp (1439): BGFX             Name: AMD Radeon RX 6700 XT (RADV NAVI22)
../../../src/renderer_vk.cpp (1440): BGFX      API version: 1.3.278
../../../src/renderer_vk.cpp (1445): BGFX      API variant: 0
../../../src/renderer_vk.cpp (1446): BGFX   Driver version: 6001003
../../../src/renderer_vk.cpp (1447): BGFX         VendorId: 1002
../../../src/renderer_vk.cpp (1448): BGFX         DeviceId: 73df
../../../src/renderer_vk.cpp (1449): BGFX             Type: 2
../../../src/renderer_vk.cpp (1487): BGFX   Memory type count: 11
../../../src/renderer_vk.cpp (1490): BGFX     0: flags 0x00000001, index 0
../../../src/renderer_vk.cpp (1490): BGFX     1: flags 0x00000001, index 0
../../../src/renderer_vk.cpp (1490): BGFX     2: flags 0x00000006, index 1
../../../src/renderer_vk.cpp (1490): BGFX     3: flags 0x00000007, index 2
../../../src/renderer_vk.cpp (1490): BGFX     4: flags 0x00000007, index 2
../../../src/renderer_vk.cpp (1490): BGFX     5: flags 0x0000000e, index 1
../../../src/renderer_vk.cpp (1490): BGFX     6: flags 0x0000000e, index 1
../../../src/renderer_vk.cpp (1490): BGFX     7: flags 0x000000c1, index 0
../../../src/renderer_vk.cpp (1490): BGFX     8: flags 0x000000c6, index 1
../../../src/renderer_vk.cpp (1490): BGFX     9: flags 0x000000c7, index 2
../../../src/renderer_vk.cpp (1490): BGFX    10: flags 0x000000ce, index 1
../../../src/renderer_vk.cpp (1497): BGFX   Memory heap count: 3
../../../src/renderer_vk.cpp (1502): BGFX     0: flags 0x00000001, size  11.75 GiB
../../../src/renderer_vk.cpp (1502): BGFX     1: flags 0x00000000, size  15.63 GiB
../../../src/renderer_vk.cpp (1502): BGFX     2: flags 0x00000001, size 256.00 MiB
../../../src/renderer_vk.cpp (734): BGFX Global extensions (189):
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_KHR_8bit_storage
(Lines omitted)
../../../src/renderer_vk.cpp (747): BGFX    v1   VK_VALVE_mutable_descriptor_type
../../../src/renderer_vk.cpp (1529): BGFX Using physical device 0: AMD Radeon RX 6700 XT (RADV NAVI22)
../../../src/renderer_vk.cpp (1728): BGFX ---
../../../src/renderer_vk.cpp (1748): BGFX Queue family property 0:
../../../src/renderer_vk.cpp (1749): BGFX     Queue flags: 0x00000007
../../../src/renderer_vk.cpp (1750): BGFX     Queue count: 1
../../../src/renderer_vk.cpp (1751): BGFX   TS valid bits: 0x00000040
../../../src/renderer_vk.cpp (1752): BGFX       Min image: 1 x 1 x 1
../../../src/renderer_vk.cpp (1748): BGFX Queue family property 1:
../../../src/renderer_vk.cpp (1749): BGFX     Queue flags: 0x00000006
../../../src/renderer_vk.cpp (1750): BGFX     Queue count: 4
../../../src/renderer_vk.cpp (1751): BGFX   TS valid bits: 0x00000040
../../../src/renderer_vk.cpp (1752): BGFX       Min image: 1 x 1 x 1
../../../src/renderer_vk.cpp (1748): BGFX Queue family property 2:
../../../src/renderer_vk.cpp (1749): BGFX     Queue flags: 0x00000008
../../../src/renderer_vk.cpp (1750): BGFX     Queue count: 1
../../../src/renderer_vk.cpp (1751): BGFX   TS valid bits: 0x00000040
../../../src/renderer_vk.cpp (1752): BGFX       Min image: 1 x 1 x 1
../../../src/renderer_vk.cpp (1780): BGFX Enabled device layers:
../../../src/renderer_vk.cpp (1826): BGFX Enabled device extensions:
../../../src/renderer_vk.cpp (1830): BGFX   VK_KHR_maintenance1
(Lines omitted)
../../../src/renderer_vk.cpp (1830): BGFX   VK_KHR_draw_indirect_count
../../../src/renderer_vk.cpp (1870): BGFX Device functions:
../../../src/renderer_vk.cpp (1875): BGFX   0x51aac080 vkGetDeviceQueue
(Lines omitted)
../../../src/renderer_vk.cpp (1875): BGFX   0x1d50b250 vkCmdDrawIndexedIndirectCountKHR

Process finished with exit code 139 (interrupted by signal 11:SIGSEGV)

Note: Some Lines of the console log have been removed because of high character count, marked with (Lines omitted). If needed, I can add them in a "Solution" since they don't fit in the question itself

Upvotes: 0

Views: 103

Answers (0)

Related Questions