Bug 81706 - dri3: chrome/chromium gpu acceleration (and therefore webgl) doesn't work
Summary: dri3: chrome/chromium gpu acceleration (and therefore webgl) doesn't work
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/DRI/i965 (show other bugs)
Version: git
Hardware: x86-64 (AMD64) Linux (All)
: medium normal
Assignee: Ian Romanick
QA Contact: Intel 3D Bugs Mailing List
: 82793 (view as bug list)
Depends on:
Reported: 2014-07-24 07:51 UTC by Christoph Haag
Modified: 2015-02-05 01:18 UTC (History)
6 users (show)

See Also:
i915 platform:
i915 features:


Description Christoph Haag 2014-07-24 07:51:43 UTC
In current stable you have to override the blacklist for it to enable gpu acceleration anyway, so this is more of a feature request to investigate why this happens with dri3 but not with dri2. For non-working webgl this is probably a little bit more serious.

On current google-chrome-unstable on a fresh profile with default settings gpu acceleration is enabled.
When it is manually enabled via chrome://flags and checking "Override software rendering list", this has happened at least since one or two stable versions, probably always.


$ google-chrome-unstable
ATTENTION: default value of option force_s3tc_enable overridden by environment.
ATTENTION: option value of option force_s3tc_enable ignored.
[20081:20081:0724/093124:ERROR:command_buffer_proxy_impl.cc(153)] Could not send GpuCommandBufferMsg_Initialize.
[20081:20081:0724/093124:ERROR:webgraphicscontext3d_command_buffer_impl.cc(236)] CommandBufferProxy::Initialize failed.
[20081:20081:0724/093124:ERROR:webgraphicscontext3d_command_buffer_impl.cc(256)] Failed to initialize command buffer.

this is repeated two times and chrome://gpu has these Log Messages:

GpuProcessHostUIShim: The GPU process crashed!
GpuProcessHostUIShim: The GPU process crashed!
GpuProcessHostUIShim: The GPU process crashed!

But with LIBGL_DRI3_DISABLE=1 google-chrome-unstable it works without issues.

Ivy Bridge, xorg 1.16, xf86-video-intel with sna and mesa both from recent git.
Comment 1 Christoph Haag 2014-08-10 00:10:49 UTC
It's more or less intel specific. With (dri3) offloading to a radeonsi GPU all the gpu stuff works. But directly running it on intel doesn't.
Comment 2 naelphin 2014-08-11 01:05:22 UTC
On different intel hardware I can confirm this bug. LIBGL_DRI3_DISABLE=1 fixed the problem, thanks to Haag for the fix.

OpenSUSE Factory AMD64	
Information	[    31.368] Current Operating System: Linux OpenSUSE.Linux 3.16.0-rc7-2-desktop #1 SMP PREEMPT Wed Jul 30 09:38:03 UTC 2014 (9b5a5f0) x86_64
	Information	[    31.462] 	compiled for 1.16.0, module version = 2.99.914
	Information	X.Org X Server 1.16.0
GPU: Intel GM45 CPU: Pentium(R) Dual-Core CPU       T4200  @ 2.00GHz
Comment 3 JS 2014-09-08 14:45:50 UTC
Chrome 38 beta crashes on start-up in i965_dri.so if dri3 is enabled with:
sandy bridge, xserver 1.16, driver 2.99.916, mesa 10.2.7
Comment 4 JS 2014-09-08 15:19:02 UTC
Core was generated by `/usr/lib64/chromium-browser/chrome --type=gpu-process --channel=85383.0.1648497'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000032b4096f237 in brw_workaround_depthstencil_alignment () from /usr/lib64/dri/i965_dri.so
(gdb) bt
#0  0x0000032b4096f237 in brw_workaround_depthstencil_alignment () from /usr/lib64/dri/i965_dri.so
#1  0x0000032b40911888 in brw_clear () from /usr/lib64/dri/i965_dri.so
#2  0x0000007c4e294af9 in gpu::gles2::GLES2DecoderImpl::Initialize(scoped_refptr<gfx::GLSurface> const&, scoped_refptr<gfx::GLContext> const&, bool, gfx::Size const&, gpu::gles2::DisallowedFeatures const&, std::vector<int, std::allocator<int> > const&) ()
#3  0x0000007c4e2491ce in content::GpuCommandBufferStub::OnInitialize(base::FileDescriptor, IPC::Message*) ()
#4  0x0000007c4e24ab4e in content::GpuCommandBufferStub::OnMessageReceived(IPC::Message const&) ()
#5  0x0000007c4e236c15 in content::MessageRouter::RouteMessage(IPC::Message const&) ()
#6  0x0000007c4e243c9a in content::GpuChannel::HandleMessage() ()
#7  0x0000007c4b5cb0f3 in base::debug::TaskAnnotator::RunTask(char const*, char const*, base::PendingTask const&) ()
#8  0x0000007c4b58ab18 in base::MessageLoop::RunTask(base::PendingTask const&) ()
#9  0x0000007c4b58ada9 in base::MessageLoop::DeferOrRunPendingTask(base::PendingTask const&) ()
#10 0x0000007c4b58c56e in base::MessageLoop::DoWork() ()
#11 0x0000007c4b5c35eb in base::MessagePumpGlib::Run(base::MessagePump::Delegate*) ()
#12 0x0000007c4b59d9a4 in base::RunLoop::Run() ()
#13 0x0000007c4b5890cc in base::MessageLoop::Run() ()
#14 0x0000007c4e11bd3d in content::GpuMain(content::MainFunctionParams const&) ()
#15 0x0000007c4b538f97 in content::ContentMainRunnerImpl::Run() ()
#16 0x0000007c4b537a2b in content::ContentMain(content::ContentMainParams const&) ()
#17 0x0000007c4aff31fb in ChromeMain ()
#18 0x0000032b46b03f1b in __libc_start_main () from /lib64/libc.so.6
#19 0x0000007c4aff3079 in _start ()
Comment 5 Christoph Haag 2014-09-08 15:30:13 UTC
Oh right, I had noticed that the gpu threads are segfaulting, but totally forgot that it could be relevant here.

Ivy Bridge here:

Core was generated by `/opt/google/chrome-unstable/chrome --type=gpu-process --channel=21942.4.5215851'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f84164044b8 in get_stencil_miptree (irb=0xf09fc2270b0) at brw_misc_state.c:225
225        if (irb->mt->stencil_mt)
(gdb) bt full
#0  0x00007f84164044b8 in get_stencil_miptree (irb=0xf09fc2270b0) at brw_misc_state.c:225                                                                                                                                                                                                                       
No locals.                                                                                                                                                                                                                                                                                                      
#1  0x00007f8416404551 in brw_workaround_depthstencil_alignment (brw=0xf09fd940030, clear_mask=50) at brw_misc_state.c:241                                                                                                                                                                                      
        ctx = 0xf09fd940030                                                                                                                                                                                                                                                                                     
        fb = 0xf09fea11200                                                                                                                                                                                                                                                                                      
        rebase_depth = false                                                                                                                                                                                                                                                                                    
        rebase_stencil = false                                                                                                                                                                                                                                                                                  
        depth_irb = 0xf09fc22af20                                                                                                                                                                                                                                                                               
        stencil_irb = 0xf09fc2270b0                                                                                                                                                                                                                                                                             
        depth_mt = 0x0                                                                                                                                                                                                                                                                                          
        stencil_mt = 0xf09fd9717c0                                                                                                                                                                                                                                                                              
        tile_x = 32767                                                                                                                                                                                                                                                                                          
        tile_y = 2049073776                                                                                                                                                                                                                                                                                     
        stencil_tile_x = 3849                                                                                                                                                                                                                                                                                   
        stencil_tile_y = 4254335024                                                                                                                                                                                                                                                                             
        stencil_draw_x = 4271968768                                                                                                                                                                                                                                                                             
        stencil_draw_y = 3849                                                                                                                                                                                                                                                                                   
        invalidate_depth = 255                                                                                                                                                                                                                                                                                  
        invalidate_stencil = false                                                                                                                                                                                                                                                                              
        tile_mask_x = 4254335024                                                                                                                                                                                                                                                                                
        tile_mask_y = 3849                                                                                                                                                                                                                                                                                      
#2  0x00007f84163a6ff3 in brw_clear (ctx=0xf09fd940030, mask=50) at brw_clear.c:235                                                                                                                                                                                                                             
        brw = 0xf09fd940030                                                                                                                                                                                                                                                                                     
        fb = 0xf09fea11200                                                                                                                                                                                                                                                                                      
        partial_clear = false                                                                                                                                                                                                                                                                                   
        tri_mask = 4254335024                                                                                                                                                                                                                                                                                   
#3  0x00007f841603028b in _mesa_Clear (mask=17664) at ../../src/mesa/main/clear.c:226                                                                                                                                                                                                                           
        bufferMask = 50                                                                                                                                                                                                                                                                                         
        ctx = 0xf09fd940030                                                                                                                                                                                                                                                                                     
        __func__ = "_mesa_Clear"                                                                                                                                                                                                                                                                                
        __PRETTY_FUNCTION__ = "_mesa_Clear"                                                                                                                                                                                                                                                                     
#4  0x00007f842933836a in ?? ()                                                                                                                                                                                                                                                                                 
No symbol table info available.                                                                                                                                                                                                                                                                                 
#5  0x0000000000000000 in ?? ()                                                                                                                                                                                                                                                                                 
No symbol table info available.
Comment 6 Christoph Haag 2014-10-02 19:39:37 UTC
For the people only reading this bug report:

In IRC keithp found the cause.
With dri3 temporary files are created with O_TMPFILE.
The chromium sandbox does not allow creating temporary files with O_TMPFILE.

So another workaround for now is to use chromium/chrome with the --no-sandbox option (which will possibly reduce security).

There's a corresponding bugreport at chromium that was not publicly visible before, but now is:

Close this with NOTOURBUG/WONTFIX?
Comment 7 Christoph Haag 2014-11-14 22:34:44 UTC
It's getting fixed in chromium, so no action is necessary for mesa:

"who has the long-term fix almost ready."

I suggest keeping this here open until chromium is actually fixed and then closing it.
Comment 8 Christoph Haag 2014-12-23 00:00:59 UTC
Resolved upstream - their sandbox allows the creation of the necessary files now (at least in testing releases).
Comment 9 Chris Bainbridge 2015-02-05 01:18:38 UTC
*** Bug 82793 has been marked as a duplicate of this bug. ***

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.