| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Posting a runnable on the GPU thread's message loop and creating a GL
fence sync there assumes that there is a current GL context, and that
synchronizing with this context will make sure that we wait for all
GL context producing any of our consumed texture mailboxes.
This is however not always the case like when:
- The current GL context on the GPU thread is destroyed right before
our runnable is handled, displaying errors on the console that
glFlush needs a current context.
- The GL driver will do extra scheduling and let the scene graph
thread synchronize its GL command stream only with the GL context
in which the fence sync was created.
To remedy the situation, make sure that Chromium creates a fence sync
for every sync points associated with a mailbox that we consume and
do so directly in the GL context associated with the originating
glInsertSyncPointCHROMIUM call. Wait for all those syncs on the Qt
side afterward.
This might also help with a few erratic behaviors noticed on some
embedded GL drivers.
Change-Id: I5fc60fcf51497477b2e1b3a535d0a141954fc6e5
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
|
|
|
|
|
|
|
| |
Change-Id: Idbe0eafb51d77cc00e3a93179b81770724d5bfaa
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Reviewed-by: Tuukka Turunen <tuukka.turunen@digia.com>
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Most of the patch is about upstream classes/methods that changed.
Other important details:
- icu data files are now used by default
- cygwin is no longer required to build on Windows
- RenderFrameHost has been replacing RenderViewHost in a few places,
following the separate process iframes support in Chromium
- The user agent is accessed through ContentClient::GetUserAgent
instead of from the command line switches
Change-Id: I86cc93aff7ce31176a80b0b4a5d54025674a451c
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
|
|
|
|
|
|
|
| |
This is now possible through GLSurfaceQt, and GLContextHelper respectively.
Change-Id: I06e13ccdea9737dc41b034befb4f01aa08d72c2a
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
|
|
|
|
|
|
|
|
|
| |
QSGEngine was added in Qt 5.4 to allow using the scene graph
without QQuickWindow. Use it for our FBO as well as for the
QOpenGLWidget rendering.
Change-Id: If4665d4f33c9dad69d2d4269309163bb5ffbd8e3
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
|
|
|
|
|
|
|
|
| |
Use QSGSimpleRectNode and a custom QSGClipNode instead, which provide
the same funtionalities without using private API.
Change-Id: Ia62ddc9cf86240dbf85f69c088599b7ca8792e7c
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since all quads are already separated in non-intersecting geometries
and ordered according to their depth by Chromium, there is no need to
keep any z value once the perspective projection has been applied.
Avoid the useless computation and project the quads to z=0 the same
way that QMatrix4x4::toTransform() does when used to flatten
QQuickItem::transform().
Change-Id: I3ec5dc2da23cf431e2d8d0bb8b1ed48f2f2d2d8e
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On QNX platform, we implement video streaming via OpenGL
EGLStream streams. Changes were added to StreamVideo class
to support EGLStream objects. For non-QNX platforms, we
kept the StreamVideoNode class unchanged - assuming other
platforms will continue to support streaming via EGLImage
objects.
On QNX, cc::StreamVideoDrawQuad contains an
external OES texture that is associated with an
EGLStream. Before we draw with that texture, an
'acquire' is performed to grab latest video frame.
See EGL_KHR_stream specs from Khronos.
Change-Id: Ia3fe25e9047f475594a55591e3e11caa0eab1e6a
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Because of an uninvestigated reason, ImplSidePainting can cause more
than one quad to use the same resource_id in one delegated frame.
Fix the issue by first checking if m_data->mailboxTextures contains
a texture for the resource_id before overwriting it.
This also re-enables the feature on OS_ANDROID where it is enabled by
default.
Change-Id: Ie7842f958e1c049db71ffc2a0a768a5725102a3d
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Always check both EGL_EXTENSIONS and the validity of the returned
function pointers. Otherwise bad things happen on EGL implementations
that do not have the extension.
Fix also linking to EGL. CONFIG+=egl has to be in core_module.pro too.
Change-Id: I5e3dc54675d83123fc79e2d27a7af19fcc7f936a
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A compositor owns the resources it produces through its ResourceProvider.
A refcount for each resource is kept according to how many times it
is exported to parent compositors. If the same resource is sent more
than once to the parent, the resource needs to be returned as often
in CompositorFrameAck messages to make sure that it gets cleaned up.
Since we would overwrite any previous MailboxTexture with a new one
when receiving a TransferableResource, this would break the refcount
of the child compositor and keep the resource alive.
This would cause http://ie.microsoft.com/testdrive/performance/penguinmark/
to continuously allocate new textures in the GPU thread.
Fix the issue by counting how many times the resource was imported, as
ResourceProvider does itself, and populate ReturnedResource::count
according to that value.
Change-Id: I3a1f8da41338b5d431592f92fca8ef865ee2415c
Reviewed-by: Arvid Nilsson <anilsson@blackberry.com>
Reviewed-by: Michael Bruning <michael.bruning@digia.com>
|
|
|
|
|
|
|
|
| |
You cannot jump past a declaration with an initializer unless the
declaration is enclosed in a block. See MSDN compiler error C2360.
Change-Id: I692b0f256decf70b6153703ff59f74596cfc2861
Reviewed-by: Michael Bruning <michael.bruning@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The NVidia driver needs more than a glFlush to ensure that GL commands
consuming Chromium resources are run only when the resource is completely
produced by the Chromium GPU thread.
This produces artifacts and an uneven frame rate in WebGL examples
on this kind of hardware.
Use the same mechanism as used by gfx::GLFence, doing a few things
manually to cope with the fact that Chromium and Qt both have their
own GL function table and contexts.
Change-Id: I33eeb1068994dc4176038a74579ce768b2bccb9d
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This means that widgets application now need to setup the GL context
sharing as well. QWebEngineWidgets::initialize() must be called,
which has the same effect as QWebEngine::initialize().
The QtWebEngineWidgets now depends on the QtWebEngine module to make
this happen.
Since QOpenGLWidget is only available in Qt 5.3, this patch also
disables the webenginewidgets module completely when building using
Qt 5.2.
Change-Id: I0e99a779d1eb080f2ccf5a338ff0763ad64e6eba
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use the ratio given with the compositor frame instead of taking it
directly from the QWindow to make sure that we scale according to
the rasterizing of the tiles.
Set the scale directly on the DelegatedFrameNode by making it a
QSGTransformNode to avoid creating an extra QSGNode.
Change-Id: I95bd33c7c6d26e0d456d6df188779dc4e82f9d3b
Reviewed-by: Arvid Nilsson <anilsson@blackberry.com>
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
|
|
|
|
|
| |
Change-Id: I66541842650af4a2cc50cd0443eacde510df566f
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Created new StreamVideoNode & StreamVideoMaterial classes
for QSG renderer. These classes duplicate the logic of
chromium's direct renderer GLRenderer::DrawStreamVideoQuad.
Added support for new DrawQuad material in DelegatedFrameNode.
Added support for external textures in MailboxTexture.
Change-Id: If569b07dfef985f9833de7e64eeb3f952026bca4
Reviewed-by: Arvid Nilsson <anilsson@blackberry.com>
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
|
|
|
|
|
|
|
|
| |
Cleanup version ifdefs and v8-private dependencies.
Change-Id: Iac393c06dfba02499e60d713d9f4d04ef0c9e617
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
To support reparenting, we make the compositing surface independent of
the window by using gfx::TEXTURE_TRANSPORT. We also need to be able to
keep frame data across window changes so we can reconstruct the QSGNode
tree in a new context, so extract that data into DelegatedFrameNodeData
class. Any context-specific data is still stored in DelegatedFrameNode.
Also hook up window changes to WebContents::WasShown/Hidden for Quick.
Remove checking of Qt isVisible state, this mechanism is used to sync
Chromium with Qt, not the other way around. WasShown/Hidden is
orthogonal to Show/Hide, and can use different triggers. However for
Widgets it probably makes sense to hook both up to widget visibility.
Change-Id: I1ef4b50cd61b8e54b791e03f0b41929c42fec8bf
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
|
|
This only move files without adjusting any paths.
This moves:
- lib/quick -> src/webengine/api (API files)
lib/quick -> src/webengine (other files)
This contains the main QtWebEngine module library since
<ec7b2ee70a8b2db7fb87f50671a001ddd54697b0>.
- lib/widgets -> src/webenginewidgets
Also rename this directory to match its module name and rename Api to api.
- lib -> src/core
- process -> src/process
- resources -> src/core/resources
- tools/* -> tools/scripts/
The build directory is spread as follow:
- build/build.pro -> src/core/gyp_run.pro
- build/qmake_extras/* -> src/core/ (for the host and target .pro files)
- build/qmake -> tools/qmake
- Build related scripts -> tools/buildscripts
Change-Id: I0cded1de772c99c0c1da6536c9afea353236b4a1
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
|