Use a later OpenGL version than 3.0 on Linux Intel, stop blacklisting ARB_timer_query |
|||||||
Issue descriptionThis continuous integration bot is running a fairly recent GPU (Intel HD 630) and a fairly recent Mesa version (17.1.4): https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Linux%20FYI%20Release%20(Intel%20HD%20630) but digging into the logs of any recent run, the OpenGL context version being provided by Mesa is still 3.0. Per Issue, 540543, Issue 576991 , and Issue 583656 , this prevents using the ARB_timer_query extension in Chromium's implementation. Could the Intel folks please help us figure out what OpenGL context creation flags need to be changed in order to get these machines (and more recent Mesa drivers) to return an OpenGL context more recent than 3.0? We don't have this hardware at our desks so it's difficult to debug and experiment on them. Thanks.
,
Jul 26
This is important, and we will try to solve this soon.
,
Jul 27
,
Jul 27
@kbr, I had investigated this issue, if I understand your problem incorrectly, please point out a mistake. When we open chrome, mesa APIs had already created two opengl contexts. The first context is OpenGL3.0 Compatibility, and is used to collect graphics information, so when we access "chrome://gpu", find that GL version is 3.0. The second context is OpenGL 4.5 Core, and is used for WebGL context(or real render context), the reason why WebGL could work correctly on mesa, although GL version displays "3.0" in "chrome://gpu". I had checked mesa and chromium code, found that there was no problem in mesa, chromium had a bug when creating the first context, OpenGL 4.5 Core context is expectd here. The call stack is as below: #0 0x00007fffa608e310 in _mesa_compute_version (ctx=ctx@entry=0x19bbc0a3c050) at main/version.c:615 #1 0x00007fffa6325512 in brwCreateContext (api=<optimized out>, mesaVis=<optimized out>, driContextPriv=<optimized out>, ctx_config=0x7fffbab89d50, dri_ctx_error=0x7fffbab89e7c, sharedContextPrivate=<optimized out>) at brw_context.c:1075 #2 0x00007fffa63176ff in driCreateContextAttribs (screen=0x19bbc0272d40, api=<optimized out>, config=0x19bbc08de020, shared=<optimized out>, num_attribs=<optimized out>, attribs=<optimized out>, error=0x7fffbab89e7c, data=0x19bbbfb82820) at dri_util.c:471 #3 0x00007fffa7bad758 in dri3_create_context_attribs (base=0x19bbc0058da0, config_base=0x19bbc02a3c80, shareList=<optimized out>, num_attribs=num_attribs@entry=1, attribs=attribs@entry=0x7fffbab89e80, error=error@entry=0x7fffbab89e7c) at dri3_glx.c:309 #4 0x00007fffa7bad7f4 in dri3_create_context (base=<optimized out>, config_base=<optimized out>, shareList=<optimized out>, renderType=<optimized out>) at dri3_glx.c:340 #5 0x00007fffa7b7a7bb in CreateContext (dpy=dpy@entry=0x19bbbf41c820, generic_id=106, config=config@entry=0x19bbc02a3c80, shareList_user=shareList_user@entry=0x0, allowDirect=allowDirect@entry=1, code=code@entry=24, renderType=32788, screen=0) at glxcmds.c:305 #6 0x00007fffa7b7acb7 in glXCreateNewContext (dpy=0x19bbbf41c820, fbconfig=0x19bbc02a3c80, renderType=32788, shareList=0x0, allowDirect=1) at glxcmds.c:1638 #7 0x00007fffe9d13310 in (anonymous namespace)::GLXApiBase::glXCreateNewContextFn(Display*, GLXFBConfig, int, GLXContext, int) (this=0x19bbc0094c20, dpy=0x19bbbf41c820, config=0x19bbc02a3c80, renderType=32788, shareList=0x0, direct=1) at ../../ui/gl/gl_bindings_autogen_glx.cc:249 #8 0x00007fffe9d1b746 in (anonymous namespace)::GLContextGLX::Initialize((anonymous namespace)::GLSurface*, (anonymous namespace)::GLContextAttribs const&) (this=0x19bbc0511860, compatible_surface=0x19bbc09a42e0, attribs=...) at ../../ui/gl/gl_context_glx.cc:183 #9 0x00007fffe9c986c7 in (anonymous namespace)::InitializeGLContext(scoped_refptr<gl::GLContext>, (anonymous namespace)::GLSurface*, (anonymous namespace)::GLContextAttribs const&) (context=..., compatible_surface=0x19bbc09a42e0, attribs=...) at ../../ui/gl/gl_context.cc:404 #10 0x00007fffe408e7b3 in (anonymous namespace)::(anonymous namespace)::CreateGLContext((anonymous namespace)::GLShareGroup*, (anonymous namespace)::GLSurface*, (anonymous namespace)::GLContextAttribs const&) (share_group=0x0, compatible_surface=0x19bbc09a42e0, attribs=...) at ../../ui/gl/init/gl_factory_x11.cc:58 #11 0x00007fffee0b2b57 in (anonymous namespace)::InitializeGLContext((anonymous namespace)::GLSurface*) (surface=0x19bbc09a42e0) at ../../gpu/config/gpu_info_collector.cc:56 #12 0x00007fffee0afedc in (anonymous namespace)::CollectGraphicsInfoGL((anonymous namespace)::GPUInfo*) (gpu_info=0x19bbbff9f830) at ../../gpu/config/gpu_info_collector.cc:151 #13 0x00007fffee0b7e9d in (anonymous namespace)::CollectContextGraphicsInfo((anonymous namespace)::GPUInfo*) (gpu_info=0x19bbbff9f830) at ../../gpu/config/gpu_info_collector_linux.cc:16 #14 0x00007fffd5995046 in (anonymous namespace)::GpuInit::InitializeInProcess((anonymous namespace)::CommandLine*, (anonymous namespace)::GpuPreferences const&) (this=0x19bbbff9f820, command_line=0x19bbbf172b10, gpu_preferences=...) at ../../gpu/ipc/service/gpu_init.cc:373 #15 0x00007fffefe249ab in (anonymous namespace)::InProcessGpuThread::Init() (this=0x19bbbff931e0) at ../../content/gpu/in_process_gpu_thread.cc:51 #16 0x00007ffff783f14f in (anonymous namespace)::Thread::ThreadMain() (this=0x19bbbff931e0) at ../../base/threading/thread.cc:326 #17 0x00007ffff795495d in (anonymous namespace)::(anonymous namespace)::ThreadFunc(void*) (params=0x19bbbff8bd90) at ../../base/threading/platform_thread_posix.cc:76 #18 0x00007ffff7bbd7fc in start_thread (arg=0x7fffbab8e700) at pthread_create.c:465 #19 0x00007fffd6c94b5f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 In gl_context_glx.cc:183, chromium calls glXCreateNewContext to create a new context for "GLX_ARB_create_context is not supported", without specifying the context version, mesa creates an OpenGL 3.0 Compatibility context by default. Nvidia driver creates an OpenGL 4.5 context. In fact, mesa supports GLX_ARB_create_context extension on recent intel device, chromium does not get "GLX_ARB_create_context" extension status before creating the first context, in other word, had not initialized "gl_glx_context_create" variable. I had upload a patch for this issue, https://chromium-review.googlesource.com/c/chromium/src/+/1152701 This second context is OepnGL 4.5 and created correctly, call "CreateHighestVersionContext" to create the supported highest context. The call stack is as below, #0 0x00007fffa608e310 in _mesa_compute_version (ctx=ctx@entry=0x19bbc1005050) at main/version.c:615 #1 0x00007fffa6325512 in brwCreateContext (api=<optimized out>, mesaVis=<optimized out>, driContextPriv=<optimized out>, ctx_config=0x7fffbab84560, dri_ctx_error=0x7fffbab846a4, sharedContextPrivate=<optimized out>) at brw_context.c:1075 #2 0x00007fffa63176ff in driCreateContextAttribs (screen=0x19bbc0272d40, api=<optimized out>, config=0x19bbc08de020, shared=<optimized out>, num_attribs=<optimized out>, attribs=<optimized out>, error=0x7fffbab846a4, data=0x19bbc0fb0420) at dri_util.c:471 #3 0x00007fffa7bad758 in dri3_create_context_attribs (base=0x19bbc0058da0, config_base=0x19bbc02a3c80, shareList=<optimized out>, num_attribs=<optimized out>, attribs=<optimized out>, error=0x7fffbab846a4) at dri3_glx.c:309 #4 0x00007fffa7b79e29 in glXCreateContextAttribsARB (dpy=0x19bbbf41c820, config=0x19bbc02a3c80, share_context=0x0, direct=1, attrib_list=0x19bbbfca8bc0) at create_context.c:78 #5 0x00007fffe9d13271 in (anonymous namespace)::GLXApiBase::glXCreateContextAttribsARBFn(Display*, GLXFBConfig, GLXContext, int, int const*) (this=0x19bbc0094c20, dpy=0x19bbbf41c820, config=0x19bbc02a3c80, share_context=0x0, direct=1, attrib_list=0x19bbbfca8bc0) at ../../ui/gl/gl_bindings_autogen_glx.cc:234 #6 0x00007fffe9d21ef1 in (anonymous namespace)::(anonymous namespace)::CreateContextAttribs(Display*, GLXFBConfig, GLXContext, (anonymous namespace)::(anonymous namespace)::GLVersion, int) (display=0x19bbbf41c820, config=0x19bbc02a3c80, share=0x0, version=..., profile_mask=1) at ../../ui/gl/gl_context_glx.cc:62 #7 0x00007fffe9d202fa in (anonymous namespace)::(anonymous namespace)::CreateHighestVersionContext(Display*, GLXFBConfig, GLXContext) (display=0x19bbbf41c820, config=0x19bbc02a3c80, share=0x0) at ../../ui/gl/gl_context_glx.cc:138 #8 0x00007fffe9d1b555 in (anonymous namespace)::GLContextGLX::Initialize((anonymous namespace)::GLSurface*, (anonymous namespace)::GLContextAttribs const&) (this=0x19bbc07d02e0, compatible_surface=0x19bbc0bc2020, attribs=...) at ../../ui/gl/gl_context_glx.cc:173 #9 0x00007fffe9c986c7 in (anonymous namespace)::InitializeGLContext(scoped_refptr<gl::GLContext>, (anonymous namespace)::GLSurface*, (anonymous namespace)::GLContextAttribs const&) (context=..., compatible_surface=0x19bbc0bc2020, attribs=...) at ../../ui/gl/gl_context.cc:404 #10 0x00007fffe408e7b3 in (anonymous namespace)::(anonymous namespace)::CreateGLContext((anonymous namespace)::GLShareGroup*, (anonymous namespace)::GLSurface*, (anonymous namespace)::GLContextAttribs const&) (share_group=0x19bbc01551c0, compatible_surface=0x19bbc0bc2020, attribs=...) at ../../ui/gl/init/gl_factory_x11.cc:58 #11 0x00007fffd596fc2d in (anonymous namespace)::GLES2CommandBufferStub::Initialize((anonymous namespace)::CommandBufferStub*, GPUCreateCommandBufferConfig const&, (anonymous namespace)::(anonymous namespace)::unique_ptr<base::SharedMemory, std::__1::default_delete<base::SharedMemory> >) (this=0x19bbc0e0d920, share_command_buffer_stub=0x0, init_params=..., shared_state_shm=...) at ../../gpu/ipc/service/gles2_command_buffer_stub.cc:299 #12 0x00007fffd59797fc in (anonymous namespace)::GpuChannel::OnCreateCommandBuffer(GPUCreateCommandBufferConfig const&, int32_t, (anonymous namespace)::SharedMemoryHandle, (anonymous namespace)::ContextResult*, (anonymous namespace)::Capabilities*) (this=0x19bbc1eae020, init_params=..., route_id=1, shared_state_handle=..., result=0x7fffbab8b640, capabilities=0x7fffbab8b648) at ../../gpu/ipc/service/gpu_channel.cc:632 #13 0x00007fffd5986b48 in (anonymous namespace)::DispatchToMethodImpl<gpu::GpuChannel*, void (gpu::GpuChannel::*)(GPUCreateCommandBufferConfig const&, int, base::SharedMemoryHandle, gpu::ContextResult*, gpu::Capabilities*), std::__1::tuple<GPUCreateCommandBufferConfig, int, base::SharedMemoryHandle>, std::__1::tuple<gpu::ContextResult, gpu::Capabilities>, 0, 1, 2, 0, 1>((anonymous namespace)::GpuChannel * const&, void ((anonymous namespace)::GpuChannel::*)((anonymous namespace)::GpuChannel * const, const GPUCreateCommandBufferConfig &, int, (anonymous namespace)::SharedMemoryHandle, enum class (anonymous namespace)::ContextResult *, (anonymous namespace)::Capabilities *), (anonymous namespace)::(anonymous namespace)::tuple<GPUCreateCommandBufferConfig, int, base::SharedMemoryHandle> &&, (anonymous namespace)::(anonymous namespace)::tuple<gpu::ContextResult, gpu::Capabilities> *, (anonymous namespace)::(anonymous namespace)::index_sequence<0ul, 1ul, 2ul>, (anonymous namespace)::(anonymous namespace)::index_sequence<0ul, 1ul>) (obj=@0x7fffbab8b978: 0x19bbc1eae020, method= (void ((anonymous namespace)::GpuChannel::*)((anonymous namespace)::GpuChannel * const, const GPUCreateCommandBufferConfig &, int, (anonymous namespace)::SharedMemoryHandle, (anonymous namespace)::ContextResult *, (anonymous namespace)::Capabilities *)) 0x7fffd59784e0 <(anonymous namespace)::GpuChannel::OnCreateCommandBuffer(GPUCreateCommandBufferConfig const&, int32_t, (anonymous namespace)::SharedMemoryHandle, (anonymous namespace)::ContextResult*, (anonymous namespace)::Capabilities*)>, in=..., out=0x7fffbab8b640) at ../../base/tuple.h:94 #14 0x00007fffd598686b in (anonymous namespace)::DispatchToMethod<gpu::GpuChannel*, void (gpu::GpuChannel::*)(GPUCreateCommandBufferConfig const&, int, base::SharedMemoryHandle, gpu::ContextResult*, gpu::Capabilities*), std::__1::tuple<GPUCreateCommandBufferConfig, int, base::SharedMemoryHandle>, std::__1::tuple<gpu::ContextResult, gpu::Capabilities> >((anonymous namespace)::GpuChannel * const&, void ((anonymous namespace)::GpuChannel::*)((anonymous namespace)::GpuChannel * const, const GPUCreateCommandBufferConfig &, int, (anonymous namespace)::SharedMemoryHandle, enum class (anonymous namespace)::ContextResult *, (anonymous namespace)::Capabilities *), (anonymous namespace)::(anonymous namespace)::tuple<GPUCreateCommandBufferConfig, int, base::SharedMemoryHandle> &&, (anonymous namespace)::(anonymous namespace)::tuple<gpu::ContextResult, gpu::Capabilities> *) (obj=@0x7fffbab8b978: 0x19bbc1eae020, method= (void ((anonymous namespace)::GpuChannel::*)((anonymous namespace)::GpuChannel * const, const GPUCreateCommandBufferConfig &, int, (anonymous namespace)::SharedMemoryHandle, (anonymous namespace)::ContextResult *, (anonymous namespace)::Capabilities *)) 0x7fffd59784e0 <(anonymous namespace)::GpuChannel::OnCreateCommandBuffer(GPUCreateCommandBufferConfig const&, int32_t, (anonymous namespace)::SharedMemoryHandle, (anonymous namespace)::ContextResult*, (anonymous namespace)::Capabilities*)>, in=..., out=0x7fffbab8b640) at ../../base/tuple.h:105 #15 0x00007fffd597cc19 in (anonymous namespace)::MessageT<GpuChannelMsg_CreateCommandBuffer_Meta, std::__1::tuple<GPUCreateCommandBufferConfig, int, base::SharedMemoryHandle>, std::__1::tuple<gpu::ContextResult, gpu::Capabilities> >::Dispatch<gpu::GpuChannel, gpu::GpuChannel, void, void (gpu::GpuChannel::*)(GPUCreateCommandBufferConfig const&, int, base::SharedMemoryHandle, gpu::ContextResult*, gpu::Capabilities*)>((anonymous namespace)::Message const*, (anonymous namespace)::GpuChannel*, (anonymous namespace)::GpuChannel*, void*, void ((anonymous namespace)::GpuChannel::*)((anonymous namespace)::GpuChannel* const, GPUCreateCommandBufferConfig const&, int, (anonymous namespace)::SharedMemoryHandle, (anonymous namespace)::ContextResult*, (anonymous namespace)::Capabilities*)) (msg=0x19bbc1ef1ca0, obj=0x19bbc1eae020, sender=0x19bbc1eae020, func= (void ((anonymous namespace)::GpuChannel::*)((anonymous namespace)::GpuChannel * const, const GPUCreateCommandBufferConfig &, int, (anonymous namespace)::SharedMemoryHandle, (anonymous namespace)::ContextResult *, (anonymous namespace)::Capabilities *)) 0x7fffd59784e0 <(anonymous namespace)::GpuChannel::OnCreateCommandBuffer(GPUCreateCommandBufferConfig const&, int32_t, (anonymous namespace)::SharedMemoryHandle, (anonymous namespace)::ContextResult*, (anonymous namespace)::Capabilities*)>) at ../../ipc/ipc_message_templates.h:204 #16 0x00007fffd5978463 in (anonymous namespace)::GpuChannel::OnControlMessageReceived((anonymous namespace)::Message const&) (this=0x19bbc1eae020, msg=...) at ../../gpu/ipc/service/gpu_channel.cc:481 #17 0x00007fffd597a5d2 in (anonymous namespace)::GpuChannel::HandleMessageHelper((anonymous namespace)::Message const&) (this=0x19bbc1eae020, msg=...) at ../../gpu/ipc/service/gpu_channel.cc:521 #18 0x00007fffd5976b8d in (anonymous namespace)::GpuChannel::HandleOutOfOrderMessage((anonymous namespace)::Message const&) (this=0x19bbc1eae020, msg=...) at ../../gpu/ipc/service/gpu_channel.cc:538 ---Type <return> to continue, or q <return> to quit--- #19 0x00007fffd596c71f in (anonymous namespace)::(anonymous namespace)::FunctorTraits<void (gpu::CommandBufferStub::*)(gpu::SyncToken const&), void>::Invoke<void (gpu::CommandBufferStub::*)(gpu::SyncToken const&), base::WeakPtr<gpu::CommandBufferStub> const&, gpu::SyncToken const&>(void ((anonymous namespace)::CommandBufferStub::*)((anonymous namespace)::CommandBufferStub* const, (anonymous namespace)::SyncToken const&), (anonymous namespace)::WeakPtr<gpu::CommandBufferStub> const&, (anonymous namespace)::SyncToken const&) (method= (void ((anonymous namespace)::CommandBufferStub::*)((anonymous namespace)::CommandBufferStub * const, const (anonymous namespace)::SyncToken &)) 0x7fffd5976b70 <(anonymous namespace)::GpuChannel::HandleOutOfOrderMessage((anonymous namespace)::Message const&)>, receiver_ptr=..., args=...) at ../../base/bind_internal.h:447 #20 0x00007fffd596c685 in (anonymous namespace)::(anonymous namespace)::InvokeHelper<true, void>::MakeItSo<void (gpu::CommandBufferStub::* const&)(gpu::SyncToken const&), base::WeakPtr<gpu::CommandBufferStub> const&, gpu::SyncToken const&>(void ((anonymous namespace)::CommandBufferStub::*&)((anonymous namespace)::CommandBufferStub* const, (anonymous namespace)::SyncToken const&), (anonymous namespace)::WeakPtr<gpu::CommandBufferStub> const&, (anonymous namespace)::SyncToken const&) (functor= @0x19bbc1ef1c80: (void ((anonymous namespace)::CommandBufferStub::*)((anonymous namespace)::CommandBufferStub * const, const (anonymous namespace)::SyncToken &)) 0x7fffd5976b70 <(anonymous namespace)::GpuChannel::HandleOutOfOrderMessage((anonymous namespace)::Message const&)>, weak_ptr=..., args=...) at ../../base/bind_internal.h:567 #21 0x00007fffd596c5fd in (anonymous namespace)::(anonymous namespace)::Invoker<base::internal::BindState<void (gpu::CommandBufferStub::*)(const gpu::SyncToken &), base::WeakPtr<gpu::CommandBufferStub>, gpu::SyncToken>, void ()>::RunImpl<void (gpu::CommandBufferStub::* const&)(gpu::SyncToken const&), std::__1::tuple<base::WeakPtr<gpu::CommandBufferStub>, gpu::SyncToken> const&, 0, 1>(void ((anonymous namespace)::CommandBufferStub::*&)((anonymous namespace)::CommandBufferStub * const, const (anonymous namespace)::SyncToken &), const (anonymous namespace)::(anonymous namespace)::tuple<base::WeakPtr<gpu::CommandBufferStub>, gpu::SyncToken> &, (anonymous namespace)::(anonymous namespace)::index_sequence<0ul, 1ul>) (functor= @0x19bbc1ef1c80: (void ((anonymous namespace)::CommandBufferStub::*)((anonymous namespace)::CommandBufferStub * const, const (anonymous namespace)::SyncToken &)) 0x7fffd5976b70 <(anonymous namespace)::GpuChannel::HandleOutOfOrderMessage((anonymous namespace)::Message const&)>, bound=...) at ../../base/bind_internal.h:621 #22 0x00007fffd596c50c in (anonymous namespace)::(anonymous namespace)::Invoker<base::internal::BindState<void (gpu::CommandBufferStub::*)(const gpu::SyncToken &), base::WeakPtr<gpu::CommandBufferStub>, gpu::SyncToken>, void ()>::Run((anonymous namespace)::(anonymous namespace)::BindStateBase *) (base=0x19bbc1ef1c60) at ../../base/bind_internal.h:603 #23 0x00007ffff75f81ee in (anonymous namespace)::OnceCallback<void ()>::Run(void) (this=0x7fffbab8c508) at ../../base/callback.h:96 #24 0x00007ffff764a982 in (anonymous namespace)::(anonymous namespace)::TaskAnnotator::RunTask(char const*, (anonymous namespace)::PendingTask*) (this=0x19bbbfea1068, queue_function=0x7ffff74e9354 "MessageLoop::PostTask", pending_task=0x7fffbab8c508) at ../../base/debug/task_annotator.cc:101 #25 0x00007ffff76d7ab9 in (anonymous namespace)::(anonymous namespace)::IncomingTaskQueue::RunTask((anonymous namespace)::PendingTask*) (this=0x19bbbfea1020, pending_task=0x7fffbab8c508) at ../../base/message_loop/incoming_task_queue.cc:124 #26 0x00007ffff76e0b97 in (anonymous namespace)::MessageLoop::RunTask((anonymous namespace)::PendingTask*) (this=0x19bbbfeb5e20, pending_task=0x7fffbab8c508) at ../../base/message_loop/message_loop.cc:319 #27 0x00007ffff76e0e08 in (anonymous namespace)::MessageLoop::DeferOrRunPendingTask((anonymous namespace)::PendingTask) (this=0x19bbbfeb5e20, pending_task=...) at ../../base/message_loop/message_loop.cc:329 #28 0x00007ffff76e1139 in (anonymous namespace)::MessageLoop::DoWork() (this=0x19bbbfeb5e20) at ../../base/message_loop/message_loop.cc:373 #29 0x00007ffff76e4447 in (anonymous namespace)::MessagePumpDefault::Run((anonymous namespace)::MessagePump::Delegate*) (this=0x19bbbff4f020, delegate=0x19bbbfeb5e20) at ../../base/message_loop/message_pump_default.cc:37 #30 0x00007ffff76e038b in (anonymous namespace)::MessageLoop::Run(bool) (this=0x19bbbfeb5e20, application_tasks_allowed=true) at ../../base/message_loop/message_loop.cc:271 #31 0x00007ffff77895dd in (anonymous namespace)::RunLoop::Run() (this=0x7fffbab8d0b8) at ../../base/run_loop.cc:131 #32 0x00007ffff783e608 in (anonymous namespace)::Thread::Run((anonymous namespace)::RunLoop*) (this=0x19bbbff931e0, run_loop=0x7fffbab8d0b8) at ../../base/threading/thread.cc:255 #33 0x00007ffff783f1c8 in (anonymous namespace)::Thread::ThreadMain() (this=0x19bbbff931e0) at ../../base/threading/thread.cc:337 #34 0x00007ffff795495d in (anonymous namespace)::(anonymous namespace)::ThreadFunc(void*) (params=0x19bbbff8bd90) at ../../base/threading/platform_thread_posix.cc:76 #35 0x00007ffff7bbd7fc in start_thread (arg=0x7fffbab8e700) at pthread_create.c:465 #36 0x00007fffd6c94b5f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
,
Jul 27
CC'ing zmo@ and cwallez@ who know the state of this code better. CC'ing piman@ who has been involved in the blacklisting of platform OpenGL extensions (GLX, EGL, etc.) zmo@ reminded me that part of the issue is that Chromium has to be able to blacklist certain platform extensions, such as EGL_KHR_fence_sync and EGL_KHR_wait_sync. (See gpu_driver_bug_list.json.) In order to know whether those should be blacklisted, Chromium needs the GL_VENDOR and GL_RENDERER strings. In order to have those strings, the GL bindings need to be initialized. Once the bindings are initialized, it's difficult to blacklist extensions after the fact. There are unfortunately lots of global variables which currently prevent clean re-initialization of the GL bindings. I'm not 100% sure how the blacklisting of platform extensions works right now; would have to re-read the bindings code. Using the lowest context version for info collection rather than the highest one might have been left over from issues on Android. Requesting more recent context versions was unreliable, but requesting a GLES 2.0 context was reliable, and most Android drivers returned a more recent GLES context version even if explicitly requesting only 2.0. We probably don't want to change the info collection code on Android to avoid destabilizing Chrome, but are open to changes on other platforms, Linux in particular. zmo@ and others can help provide more guidance. Does https://chromium-review.googlesource.com/1152701 fix this problem on Intel GPUs on Linux?
,
Jul 27
Right, there's a bootstrapping problem. We could probably fix it by breaking down the initialization into more steps (get minimal context to query vendor/renderer strings -> figure out platform extension blacklist -> get context with highest version -> figure out rest of blacklist including GL extensions), at the cost of slower startup time. There's a bunch of variations on top of that (e.g. try with highest version first, and if crashes recover by trying from minimal version first), which add a bunch of complexity.
,
Jul 30
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/237ff499a8bc3abc3520dd85c03d13a1fd8ff09b commit 237ff499a8bc3abc3520dd85c03d13a1fd8ff09b Author: Kenneth Russell <kbr@chromium.org> Date: Mon Jul 30 23:33:24 2018 Suppress WebglExtension_EXT_disjoint_timer_query on Linux Intel. linux_optional_gpu_tests_tel doesn't run the WebGL 1.0 conformance tests on Linux/Intel on the CQ (it should) so this was missed. Bug: 820891 , 867675 Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel Change-Id: I77b898b4ddd83cc1e1ec8fcdcc19918c203433d7 Tbr: kainino@chromium.org Reviewed-on: https://chromium-review.googlesource.com/1155807 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Cr-Commit-Position: refs/heads/master@{#579233} [modify] https://crrev.com/237ff499a8bc3abc3520dd85c03d13a1fd8ff09b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
,
Aug 2
,
Aug 2
,
Oct 11
Here is my opinion: since on Linux we use core profile to create "real" contexts, then it seems to me a bug that we create a compatibility profile to do blacklist decision at all. Should we simply just create a core profile context on Linux for info collection purpose? In "gl_factory_x11.cc", CreateGLContext(), we need to find a way for the codepath to be kGLImplementationDesktopGLCoreProfile. Anyone sees potential issues of doing this?
,
Oct 11
Looking at https://chromium-review.googlesource.com/1247531 - actually, I think this is likely doing what we originally thought would be the safest / most compatible upgrade to Chromium's code. Basically, it uses the most basic context type only to figure out which platform extensions should be blacklisted, and then initializes the GL bindings in such a way that they can create the highest context version which is available from then on. It might be possible to create a core profile context for the bootstrap context, but that might also trigger more bugs in graphics drivers than otherwise.
,
Oct 11
OK, reading the related code again to refresh my memory, it seems the "GLX_ARB_create_context_profile" extension is the key to allow us to create core profile contexts after GLSurfaceGLX::InitializeExtensionSettingsOneOff(). If we decide to go down the two step path, can we limit it to Linux only? Reason 1: this has perf impact because it's the critical path (GPU process startup), and this path adds an extra context creation/destruction. Reason 2: now we create the highest version context in startup, which may trigger android crash increase on Lollypop. Originally we decided to create 2.0 context for info collection on Android because when we switch to the highest, we saw crash rate increase in the wildness, although we never repro in house or fully understand the root cause.
,
Oct 24
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/4867264268110f33a03ef49dcf9856c0bdf6565c commit 4867264268110f33a03ef49dcf9856c0bdf6565c Author: Xinghua Cao <xinghua.cao@intel.com> Date: Wed Oct 24 04:57:21 2018 Get correct GL context info on mesa Driver may create a compatibility profile context when collect graphics information on Linux platform, but command buffer service gets a core profile context when supports GLX_ARB_create_context, so make them identically. Try to collect graphics information based on core profile context after disabling platform extensions. BUG= 867675 Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel Change-Id: Ibf0abc1942532d6518fb7c65ebb857dc4d509171 Reviewed-on: https://chromium-review.googlesource.com/c/1247531 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Xinghua Cao <xinghua.cao@intel.com> Cr-Commit-Position: refs/heads/master@{#602254} [modify] https://crrev.com/4867264268110f33a03ef49dcf9856c0bdf6565c/gpu/ipc/service/gpu_init.cc
,
Oct 24
Thank you Xinghua for fixing this! It's working well. See for example this build on our Linux Intel bots: https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Linux%20FYI%20Release%20%28Intel%20HD%20630%29/6662 and this stdout: https://logs.chromium.org/logs/chromium/buildbucket/cr-buildbucket.appspot.com/8931763961260435952/+/steps/context_lost_tests_on_Intel_GPU_on_Linux_on_Ubuntu/0/stdout We now correctly detect that OpenGL 4.5 is supported: (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:115 GPU device 0: VENDOR = 0x8086 (Intel Open Source Technology Center), DEVICE = 0x5912 (Mesa DRI Intel(R) HD Graphics 630 (Kaby Lake GT2) ) (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:117 GPU Attributes: (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 amd_switchable : False (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 can_support_threaded_texture_mailbox: False (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 direct_rendering : True (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 gl_extensions : GL_3DFX_texture_compression_FXT1 GL_AMD_conservative_depth GL_AMD_draw_buffers_blend GL_AMD_seamless_cubemap_per_texture GL_AMD_shader_stencil_export GL_AMD_shader_trinary_minmax GL_AMD_vertex_shader_layer GL_AMD_vertex_shader_viewport_index GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_APPLE_object_purgeable GL_ARB_ES2_compatibility GL_ARB_ES3_1_compatibility GL_ARB_ES3_2_compatibility GL_ARB_ES3_compatibility GL_ARB_arrays_of_arrays GL_ARB_base_instance GL_ARB_blend_func_extended GL_ARB_buffer_storage GL_ARB_clear_buffer_object GL_ARB_clear_texture GL_ARB_clip_control GL_ARB_compressed_texture_pixel_storage GL_ARB_compute_shader GL_ARB_conditional_render_inverted GL_ARB_conservative_depth GL_ARB_copy_buffer GL_ARB_copy_image GL_ARB_cull_distance GL_ARB_debug_output GL_ARB_depth_buffer_float GL_ARB_depth_clamp GL_ARB_derivative_control GL_ARB_direct_state_access GL_ARB_draw_buffers GL_ARB_draw_buffers_blend GL_ARB_draw_elements_base_vertex GL_ARB_draw_indirect GL_ARB_draw_instanced GL_ARB_enhanced_layouts GL_ARB_explicit_attrib_location GL_ARB_explicit_uniform_location GL_ARB_fragment_coord_conventions GL_ARB_fragment_layer_viewport GL_ARB_fragment_shader GL_ARB_framebuffer_no_attachments GL_ARB_framebuffer_object GL_ARB_framebuffer_sRGB GL_ARB_get_program_binary GL_ARB_get_texture_sub_image GL_ARB_gpu_shader5 GL_ARB_gpu_shader_fp64 GL_ARB_gpu_shader_int64 GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_instanced_arrays GL_ARB_internalformat_query GL_ARB_internalformat_query2 GL_ARB_invalidate_subdata GL_ARB_map_buffer_alignment GL_ARB_map_buffer_range GL_ARB_multi_bind GL_ARB_multi_draw_indirect GL_ARB_occlusion_query2 GL_ARB_pipeline_statistics_query GL_ARB_pixel_buffer_object GL_ARB_point_sprite GL_ARB_post_depth_coverage GL_ARB_program_interface_query GL_ARB_provoking_vertex GL_ARB_query_buffer_object GL_ARB_robust_buffer_access_behavior GL_ARB_robustness GL_ARB_sample_shading GL_ARB_sampler_objects GL_ARB_seamless_cube_map GL_ARB_seamless_cubemap_per_texture GL_ARB_separate_shader_objects GL_ARB_shader_atomic_counter_ops GL_ARB_shader_atomic_counters GL_ARB_shader_bit_encoding GL_ARB_shader_clock GL_ARB_shader_draw_parameters GL_ARB_shader_image_load_store GL_ARB_shader_image_size GL_ARB_shader_objects GL_ARB_shader_precision GL_ARB_shader_stencil_export GL_ARB_shader_storage_buffer_object GL_ARB_shader_subroutine GL_ARB_shader_texture_image_samples GL_ARB_shader_texture_lod GL_ARB_shader_viewport_layer_array GL_ARB_shading_language_420pack GL_ARB_shading_language_packing GL_ARB_stencil_texturing GL_ARB_sync GL_ARB_tessellation_shader GL_ARB_texture_barrier GL_ARB_texture_buffer_object GL_ARB_texture_buffer_object_rgb32 GL_ARB_texture_buffer_range GL_ARB_texture_compression_bptc GL_ARB_texture_compression_rgtc GL_ARB_texture_cube_map_array GL_ARB_texture_float GL_ARB_texture_gather GL_ARB_texture_mirror_clamp_to_edge GL_ARB_texture_multisample GL_ARB_texture_non_power_of_two GL_ARB_texture_query_levels GL_ARB_texture_query_lod GL_ARB_texture_rectangle GL_ARB_texture_rg GL_ARB_texture_rgb10_a2ui GL_ARB_texture_stencil8 GL_ARB_texture_storage GL_ARB_texture_storage_multisample GL_ARB_texture_swizzle GL_ARB_texture_view GL_ARB_timer_query GL_ARB_transform_feedback2 GL_ARB_transform_feedback3 GL_ARB_transform_feedback_instanced GL_ARB_transform_feedback_overflow_query GL_ARB_uniform_buffer_object GL_ARB_vertex_array_bgra GL_ARB_vertex_array_object GL_ARB_vertex_attrib_64bit GL_ARB_vertex_attrib_binding GL_ARB_vertex_shader GL_ARB_vertex_type_10f_11f_11f_rev GL_ARB_vertex_type_2_10_10_10_rev GL_ARB_viewport_array GL_ATI_blend_equation_separate GL_ATI_texture_float GL_EXT_abgr GL_EXT_blend_equation_separate GL_EXT_draw_buffers2 GL_EXT_draw_instanced GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_multisample_blit_scaled GL_EXT_framebuffer_sRGB GL_EXT_packed_depth_stencil GL_EXT_packed_float GL_EXT_pixel_buffer_object GL_EXT_polygon_offset_clamp GL_EXT_provoking_vertex GL_EXT_shader_integer_mix GL_EXT_shader_samples_identical GL_EXT_texture_array GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc GL_EXT_texture_filter_anisotropic GL_EXT_texture_integer GL_EXT_texture_sRGB GL_EXT_texture_sRGB_decode GL_EXT_texture_shared_exponent GL_EXT_texture_snorm GL_EXT_texture_swizzle GL_EXT_timer_query GL_EXT_transform_feedback GL_EXT_vertex_array_bgra GL_IBM_multimode_draw_arrays GL_INTEL_conservative_rasterization GL_INTEL_performance_query GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_KHR_context_flush_control GL_KHR_debug GL_KHR_robust_buffer_access_behavior GL_KHR_robustness GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_sliced_3d GL_MESA_pack_invert GL_MESA_shader_integer_functions GL_MESA_texture_signed_rgba GL_NV_conditional_render GL_NV_depth_clamp GL_NV_packed_depth_stencil GL_NV_texture_barrier GL_OES_EGL_image GL_S3_s3tc (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 gl_renderer : Mesa DRI Intel(R) HD Graphics 630 (Kaby Lake GT2) (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 gl_reset_notification_strategy: 33362 (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 gl_vendor : Intel Open Source Technology Center (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 gl_version : 4.5 (Core Profile) Mesa 17.1.4 (INFO) 2018-10-24 10:57:26,353 browser._LogBrowserInfo:119 gl_ws_extensions : GLX_ARB_create_context GLX_ARB_create_context_profile GLX_ARB_create_context_robustness GLX_ARB_fbconfig_float GLX_ARB_framebuffer_sRGB GLX_ARB_multisample GLX_EXT_create_context_es_profile GLX_EXT_create_context_es2_profile GLX_EXT_fbconfig_packed_float GLX_EXT_framebuffer_sRGB GLX_EXT_import_context GLX_EXT_libglvnd GLX_EXT_texture_from_pixmap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_copy_sub_buffer GLX_OML_swap_method GLX_SGI_make_current_read GLX_SGI_swap_control GLX_SGIS_multisample GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGIX_visual_select_group GLX_INTEL_swap_event Xinghua, could you now please follow up and un-blacklist ARB_timer_query for Linux Intel? Thank you!
,
Oct 26
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/ef584b26adc280868efa81fa8ebc0835615447d6 commit ef584b26adc280868efa81fa8ebc0835615447d6 Author: Xinghua Cao <xinghua.cao@intel.com> Date: Fri Oct 26 01:29:27 2018 Cancel to blacklist ARB_timer_query for linux intel BUG= 867675 TEST=conformance2/extensions/ext-disjoint-timer-query-webgl2.html Change-Id: I138a046e8ac6cb3bee4b34d59b3fa4e7b0c4231f Reviewed-on: https://chromium-review.googlesource.com/c/1298757 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Antoine Labour <piman@chromium.org> Commit-Queue: Xinghua Cao <xinghua.cao@intel.com> Cr-Commit-Position: refs/heads/master@{#602967} [modify] https://crrev.com/ef584b26adc280868efa81fa8ebc0835615447d6/gpu/config/gpu_driver_bug_list.json
,
Dec 19
This issue was fixed. Just close it.
,
Dec 19
Thank you Xinghua for fixing this and Yang for having the team take this on!
,
Jan 4
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/6f8fb3d2f0f570871e00c9b1ec73caf58401f5df commit 6f8fb3d2f0f570871e00c9b1ec73caf58401f5df Author: Lin Sun <lin.sun@intel.com> Date: Fri Jan 04 04:06:29 2019 Cleaning up WebGL conformance expectations for Linux Intel Remove intel flag from faiure expectations for fixed cases. Comment fixed mesa version for Linux driver bugs. Bug: 483282 , 905006, 686075 , 666384, 905011 Bug: 680276 , 867675 Change-Id: Ib54f28397bdd073778bea7294870516bb19d1ce6 Reviewed-on: https://chromium-review.googlesource.com/c/1390765 Commit-Queue: Lin Sun <lin.sun@intel.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Cr-Commit-Position: refs/heads/master@{#619880} [modify] https://crrev.com/6f8fb3d2f0f570871e00c9b1ec73caf58401f5df/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py [modify] https://crrev.com/6f8fb3d2f0f570871e00c9b1ec73caf58401f5df/content/test/gpu/gpu_tests/webgl_conformance_expectations.py |
|||||||
►
Sign in to add a comment |
|||||||
Comment 1 by kbr@chromium.org
, Jul 25