SIGSEGV in intelCreateBuffer(intel_screen.c) when using EGL_KHR_gl_colorspace
Submitted by Elias Naur
Assigned to Tapani Pälli
Link to original bug (#107782)
Description
Created attachment 141413 test program
I'm running the attached example on Ubuntu 18.04.01 where I'm trying to create an OpenGL ES 3 context with EGL where the framebuffer supports sRGB. When using the EGL_KHR_gl_colorspace extension attributes for eglCreateWindowSurface, the call crashes.
Compiled with:
gcc -o test init_window.c -I. -lwayland-client -lwayland-server -lwayland-egl -lEGL -lGLESv2
The gdb backtrace:
Program received signal SIGSEGV, Segmentation fault.
intelCreateBuffer (dri_screen=0x5555557873e0, driDrawPriv=0x5555558a2950, mesaVis=0x0, isPixmap=0 '\000')
at ../../../../../../src/mesa/drivers/dri/i965/intel_screen.c:1615
1615 ../../../../../../src/mesa/drivers/dri/i965/intel_screen.c: No such file or directory.
=> 0x00007ffff367babb <intelCreateBuffer+27>: 8b 72 78 mov 0x78(%rdx),%esi
0x00007ffff367babe <intelCreateBuffer+30>: 48 89 ef mov %rbp,%rdi
0x00007ffff367bac1 <intelCreateBuffer+33>: e8 aa 83 ff ff callq 0x7ffff3673e70 <intel_quantize_num_samples>
(gdb) bt
#0 intelCreateBuffer (dri_screen=0x5555557873e0, driDrawPriv=0x5555558a2950, mesaVis=0x0, isPixmap=0 '\000')
at ../../../../../../src/mesa/drivers/dri/i965/intel_screen.c:1615
#1 0x00007ffff3611957 in driCreateNewDrawable (screen=0x5555557873e0, config=0x0, data=0x5555558a5ce0)
at ../../../../../../src/mesa/drivers/dri/common/dri_util.c:695
#2 0x00007ffff64a9c27 in ?? () from /usr/lib/x86_64-linux-gnu/libEGL_mesa.so.0
#3 0x00007ffff6496aa7 in ?? () from /usr/lib/x86_64-linux-gnu/libEGL_mesa.so.0
#4 0x00005555555557c0 in CreateEGLContext ()
#5 0x0000555555555931 in CreateWindowWithEGLContext ()
#6 0x0000555555555c27 in main ()
and the top of the disassembly:
(gdb) disas
Dump of assembler code for function intelCreateBuffer:
0x00007ffff367baa0 <+0>: push %r15
0x00007ffff367baa2 <+2>: push %r14
0x00007ffff367baa4 <+4>: push %r13
0x00007ffff367baa6 <+6>: push %r12
0x00007ffff367baa8 <+8>: mov %rsi,%r13
0x00007ffff367baab <+11>: push %rbp
0x00007ffff367baac <+12>: push %rbx
0x00007ffff367baad <+13>: mov %ecx,%r12d
0x00007ffff367bab0 <+16>: mov %rdx,%rbx
0x00007ffff367bab3 <+19>: sub $0x18,%rsp
0x00007ffff367bab7 <+23>: mov 0x10(%rdi),%rbp
=> 0x00007ffff367babb <+27>: mov 0x78(%rdx),%esi
0x00007ffff367babe <+30>: mov %rbp,%rdi
0x00007ffff367bac1 <+33>: callq 0x7ffff3673e70 <intel_quantize_num_samples>
...
The offending code is:
EGLint surfaceAttribs[] = { EGL_GL_COLORSPACE_KHR, EGL_GL_COLORSPACE_SRGB_KHR, EGL_NONE, EGL_NONE }; // Create a surface surface = eglCreateWindowSurface(display, config, ESContext.native_window, surfaceAttribs);
If I replace EGL_GL_COLORSPACE_SRGB_KHR with EGL_GL_COLORSPACE_LINEAR_KHR, a window is displayed with a clear color and no crashes.
My system details (a Lenovo X1 Carbon 1st gen.):
$ uname -a Linux elias-x1 4.15.0-33-generic #36 (closed)-Ubuntu SMP Wed Aug 15 16:00:05 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a Distributor ID: Ubuntu Description: Ubuntu 18.04.1 LTS Release: 18.04 Codename: bionic
The list of extensions as reported by eglGetString(EGL_EXTENSIONS). Note that EGL_KHR_gl_colorspace is included:
EGL_ANDROID_native_fence_sync EGL_CHROMIUM_sync_control EGL_EXT_buffer_age EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_NOK_texture_from_pixmap EGL_WL_bind_wayland_display
The reported EGL version is 1.4.
The display section from lshw:
*-display
description: VGA compatible controller
product: 3rd Gen Core processor Graphics Controller
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 09
width: 64 bits
clock: 33MHz
capabilities: vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:28 memory:f0000000-f03fffff memory:e0000000-efffffff ioport:5000(size=64) memory:c0000-dffff
I would expect that
(1) An error from eglCreateWindowSurface, not a crash (2) The EGL_KHR_gl_colorspace extension not be included in EGL_EXTENSIONS if it can't be supported.
and, if possible,
(3) Support for OpenGL surfaces with a sRGB framebuffer created through EGL on Wayland. Note that the hardware reports GLX_ARB_framebuffer_sRGB for GLX.
Attachment 141413, "test program":
init_window.c