New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 671217 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Jan 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 2
Type: Bug


Sign in to add a comment

Use one GLApi per context instead of one global GLApi

Project Member Reported by geoffl...@chromium.org, Dec 5 2016

Issue description

Currently Chrome uses one global RealGLApi object holding all entry points and filtered extensions, initialized when the first GL context is created.  This causes problems if Chrome creates more than one context with different versions or extensions exposed, functionality will either be hidden or used when it is not available.  This issue currently manifests with the Passthrough command buffer which creates webgl compatibility contexts but cannot detect that they are enabled.

In the future, this will only get worse if we attempt to create an ES2 or ES3 context based on what was requested.

Refactor the gl bindings:
 * All entry points are loaded without extension or version checks when the first context is created.
 * When a new context is created, create a new GLApi object and assign entry points to it based on the native context's extensions.
 * Store the GLApi object in GLContext and set it when MakeCurrent is called.
 
Project Member

Comment 1 by bugdroid1@chromium.org, Jan 13 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1bf1c346a7c2967e70d05d2c93f1d33775482bff

commit 1bf1c346a7c2967e70d05d2c93f1d33775482bff
Author: geofflang <geofflang@chromium.org>
Date: Fri Jan 13 22:39:15 2017

Use --disable-es3-apis when running WebGL tests on the passthrough cmd decoder.

Chrome always creates ES3 contexts which cause some WebGL validation
failures.  Disable ES3 contexts so that WebGL 1 testing works as expected
until the GL bindings are refactored.

BUG= 668223 
BUG= 671217 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2621163007
Cr-Commit-Position: refs/heads/master@{#443705}

[modify] https://crrev.com/1bf1c346a7c2967e70d05d2c93f1d33775482bff/content/test/gpu/generate_buildbot_json.py
[modify] https://crrev.com/1bf1c346a7c2967e70d05d2c93f1d33775482bff/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
[modify] https://crrev.com/1bf1c346a7c2967e70d05d2c93f1d33775482bff/testing/buildbot/chromium.gpu.fyi.json

Project Member

Comment 2 by bugdroid1@chromium.org, Jan 18 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/7f9221d1ecab82d39682d564dd989dd0205144e9

commit 7f9221d1ecab82d39682d564dd989dd0205144e9
Author: geofflang <geofflang@chromium.org>
Date: Wed Jan 18 18:58:53 2017

Supress passthrough decoder WebGL failures.

TBR=zmo@chromium.org

BUG= 671217 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2639343002
Cr-Commit-Position: refs/heads/master@{#444430}

[modify] https://crrev.com/7f9221d1ecab82d39682d564dd989dd0205144e9/content/test/gpu/gpu_tests/webgl_conformance_expectations.py

Blocking: angleproject:1720
Blocking: angleproject:1719
Blocking: angleproject:1718
Blocking: angleproject:1717
Blocking: angleproject:1716
Blocking: angleproject:1715
Blocking: angleproject:1714
Blocking: angleproject:1721
Blocking: angleproject:1722
Blocking: angleproject:1723
Blocking: angleproject:1726
Blocking: 682745
Project Member

Comment 15 by bugdroid1@chromium.org, Jan 30 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9

commit ceb64f73f7bf1e1ae1914970c9adc455f564a1e9
Author: Geoff Lang <geofflang@chromium.org>
Date: Mon Jan 30 17:02:53 2017

Refactor GL bindings so there is no global GLApi or DriverGL.

Having a single global API and Driver object doesn't mirror the real GL
context state that may have different entry points, extensions and version
numbers per context.  This can cause entry points to be called when they
are not loaded or extensions used when they are not present.

 * Refactored the GLApi and DriverGL objects to be owned by GLContext
   objects.
 * Moved all driver-level GL workarounds into RealGLApi so no swapping of
   function pointers in DriverGL is needed.
 * Instead of having separate debug function pointers in the drivers that
   call back to global variables, add new DebugApi objects that wrap the
   RealApi objects.

BUG= 671217 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
R=jbauman@chromium.org

Review-Url: https://codereview.chromium.org/2629633003 .
Cr-Commit-Position: refs/heads/master@{#447005}

[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/context_group.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gl_context_mock.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gl_context_virtual.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gl_context_virtual.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gles2_cmd_decoder.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gles2_cmd_decoder_unittest.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gpu_service_test.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/gpu_service_test.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/mailbox_manager_sync.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/memory_program_cache.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/program_manager.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/program_manager_unittest.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/service/texture_definition.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/command_buffer/tests/fuzzer_main.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/config/gpu_info_collector_unittest.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/ipc/in_process_command_buffer.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/ipc/service/gpu_channel_manager.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/ipc/service/gpu_channel_unittest.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/ipc/service/gpu_command_buffer_stub.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/ipc/service/image_transport_surface_android.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/ipc/service/image_transport_surface_mac.mm
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/ipc/service/image_transport_surface_overlay_mac.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/gpu/ipc/service/image_transport_surface_overlay_mac.mm
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/BUILD.gn
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/generate_bindings.py
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_api_unittest.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_bindings.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_bindings_autogen_egl.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_bindings_autogen_gl.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_bindings_autogen_glx.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_bindings_autogen_osmesa.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_bindings_autogen_wgl.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context_cgl.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context_egl.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context_glx.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context_osmesa.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context_stub.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context_stub.h
[delete] https://crrev.com/2d930bf540c443c992843ab4199af12b2e14848f/ui/gl/gl_context_stub_with_extensions.cc
[delete] https://crrev.com/2d930bf540c443c992843ab4199af12b2e14848f/ui/gl/gl_context_stub_with_extensions.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_context_wgl.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_egl_api_implementation.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_egl_api_implementation.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_fence.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_fence_arb.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_gl_api_implementation.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_gl_api_implementation.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_glx_api_implementation.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_glx_api_implementation.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_image_io_surface.mm
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_image_memory.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_implementation.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_implementation.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_osmesa_api_implementation.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_osmesa_api_implementation.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_stub_api.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_switches.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_switches.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_wgl_api_implementation.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gl_wgl_api_implementation.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/gpu_timing_unittest.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_factory_android.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_factory_mac.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_factory_ozone.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_factory_win.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_factory_x11.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_initializer_android.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_initializer_mac.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_initializer_ozone.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_initializer_win.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/init/gl_initializer_x11.cc
[delete] https://crrev.com/2d930bf540c443c992843ab4199af12b2e14848f/ui/gl/scoped_api.cc
[delete] https://crrev.com/2d930bf540c443c992843ab4199af12b2e14848f/ui/gl/scoped_api.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/test/gl_surface_test_support.cc
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/test/gl_surface_test_support.h
[modify] https://crrev.com/ceb64f73f7bf1e1ae1914970c9adc455f564a1e9/ui/gl/yuv_to_rgb_converter.cc

Status: Fixed (was: Assigned)
Project Member

Comment 17 by bugdroid1@chromium.org, Feb 6 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/cc462262940e863770555a7dba23072480d016df

commit cc462262940e863770555a7dba23072480d016df
Author: geofflang <geofflang@chromium.org>
Date: Mon Feb 06 21:52:46 2017

Check that the shader source exists before loading from the ProgramCache.

Now that the program cache is almost always created, the cache should only be
checked when the previously compile shader source exists.  This was hit by
the GPU fuzzer when testing without the program binary extensions enabled.

BUG= 688795 
BUG= 671217 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2674263003
Cr-Commit-Position: refs/heads/master@{#448404}

[modify] https://crrev.com/cc462262940e863770555a7dba23072480d016df/gpu/command_buffer/service/program_manager.cc

Sign in to add a comment