Commit Graph

362 Commits

Author SHA1 Message Date
Ray Strode
865da1457a renderer: drop wayland client support 2016-04-22 16:39:35 +02:00
Ray Strode
b5648dc0cb renderer: drop android support 2016-04-18 19:12:23 +02:00
Ray Strode
ce8aa45fa4 renderer: drop MIR support 2016-04-18 19:12:23 +02:00
Ray Strode
639ef8e195 win32: drop support 2016-04-18 19:12:23 +02:00
Ray Strode
ed9f3fd50a renderer: drop support for SDL 2016-04-18 19:09:42 +02:00
Ray Strode
7e8e1dfc8f renderer: drop GDL support 2016-04-10 20:28:55 +02:00
Ray Strode
9246c9a505 renderer: drop PowerVR winsys 2016-04-10 20:25:06 +02:00
Ray Strode
1c1ad69f26 winsys-egl-kms: dont create 0x0 surface
commit 188752158 changed cogl to stop needlessly creating its own
monitor output configuration when mutter would just soon overwrite
it anyway.

Unfortunately, that commit is causing a crash in some cases because
cogl will now create and later draw to a 0x0 egl surface until mutter
sets the monitor layout.

This commit changes cogl to avoid creating and using a surface, before
it knows how big of a surface to create.

https://bugzilla.gnome.org/show_bug.cgi?id=758073
2016-02-22 13:39:04 -05:00
Ray Strode
1887521587 winsys-egl-kms: bypass initial output setup if kms fd passed in
if mutter is handling the output setup, then we shouldn't do it,
too.

https://bugzilla.gnome.org/show_bug.cgi?id=758073
2015-11-17 12:56:13 -05:00
Ray Strode
a583492ea2 kms-winsys: don't wait for a flip when page flipping fails
If we get EACCES from drmPageFlip we're not going to get
a flip event and shouldn't wait for one.

This commit changes the EACCES path to silently ignore the
failed flip request and just clean up the fb.

https://bugzilla.gnome.org/show_bug.cgi?id=756926
2015-10-21 16:00:45 -04:00
Lionel Landwerlin
00ea695ce2 winsys: glx: fix crash when inspecting onscreens
An unallocated onscreen might have a NULL winsys field.

https://bugzilla.gnome.org/show_bug.cgi?id=754888
2015-09-11 17:34:39 +02:00
Lionel Landwerlin
4cb750928e winsys: wayland: destroy eglsurface when destroying associated native window
On Wayland deinit() of an onscreen buffer is going to destroy the
associated native window of an EGLSurface. So we should destroy the
EGLSurface as well otherwise we might end up confusing the GL driver.

We also currently guard against setting a EGL_NO_SURFACE as current
EGLSurface, but this shouldn't be a problem if we have a surfaceless
context. So we allow surface destruction under that condition.

https://bugzilla.gnome.org/show_bug.cgi?id=754667
2015-09-07 17:27:50 +01:00
Ray Strode
6bd49c3dc8 kms-winsys: don't disable page flipping on EACCES
If the user switches VTs in the middle of a page flip, the
page flip operation may fail with EACCES. page flipping will
work next time the VT becomes active, so we shouldn't disable
page flipping in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=754540
2015-09-03 17:29:28 -04:00
Ray Strode
78c44ab132 kms-winsys: clean up error handling in _cogl_winsys_renderer_connect
If cogl fails to open the drm device, initialize gbm, or open the
egl display, then it closes the drm fd, uninitializes gbm, closes the
display and then calls _cogl_winsys_renderer_disconnect which does
most of those things again, on the, now deinitialized, members.

This commit removes the explicit failure handling in renderer_connect and
defers cleanup to disconnect.

https://bugzilla.gnome.org/show_bug.cgi?id=754540
2015-09-03 17:29:28 -04:00
Ray Strode
181176bdb1 kms-winsys: use correct surface format
gbm confusingly has two different format types, and cogl
is using the wrong one in some of its calls to gbm_surface_create

This commit fixes the calls that are wrong.

https://bugzilla.gnome.org/show_bug.cgi?id=754540
2015-09-03 17:29:27 -04:00
Marek Chalupa
e7f54e6e60 egl-kms: append output after we know we found it
Otherwise we just append NULL output which is wrong and can
break things

Signed-off-by: Emmanuele Bassi <ebassi@gnome.org>

https://bugzilla.gnome.org/show_bug.cgi?id=752406
2015-07-28 15:32:51 +01:00
Adel Gadllah
4f8254f1ae winsys-glx: Add error traps in create_context
Both create_gl3_context and glXCreateNewContext can fail with an X error.

https://bugzilla.gnome.org/show_bug.cgi?id=742678
2015-07-26 16:04:14 +02:00
Emmanuele Bassi
812aba31e7 winsys: Drop xlib_get_visual_info from the vtable
We don't need the hack any more; CoglRenderer has the appropriate API
for the Xlib-based winsys backends.
2015-07-22 20:28:19 +01:00
Emmanuele Bassi
e79d571453 Store the XVisualInfo in the X11-based winsys backends
Instead of freeing it after creating the relative GL contexts, store it
in the CoglXlibRenderer data.
2015-07-22 20:20:05 +01:00
Emmanuele Bassi
3290240600 egl-x11: Fix compiler warnings
Stereo mode changed two fields in the winsys vtable, so we need to
update the signature of the implementation in the EGL-X11 winsys.
2015-06-10 15:20:17 +01:00
Ray Strode
68d9ba3b65 kms-winsys: try to hobble along if driver doesn't support page flips
Some drivers ( like mgag200 ) don't yet support drmModePageFlip.

This commit forgoes waiting for vblank and flips right away
in those cases. That prevents the hardware from freezing up the screen,
but does mean there will be some visible tearing.

https://bugzilla.gnome.org/show_bug.cgi?id=746042
2015-03-23 10:11:46 -04:00
Rui Matos
f82e9e2d22 kms-winsys: Remove a few unused variables 2015-02-23 18:36:56 +00:00
Rui Matos
200c4032ac kms-winsys: Defer setting new surfaces until swap buffers
We can't just destroy and replace the EGL and gbm surfaces while
they are still in use i.e. while there is a pending flip. In fact, in
that case, we were calling gbm_surface_destroy() on a surface that
still had the front buffer locked and then, on the flip handler,
gbm_surface_release_buffer() for a buffer that didn't belong to the
new surface.

Instead, we still allocate new surfaces when requested but they only
replace the old ones on the next swap buffers when we're sure that the
previous flip has been handled and buffers properly released.
2015-02-23 18:36:56 +00:00
Chris Wilson
5ccd2825c7 glx: Precisely wait for the next vblank
Currently the code queries the current msc then tries to approximate the
value of the next msc satisfing the modulus 2 for when to wait. This
introduces some instability as the msc may tick over during the
roundtrip leading to a 32ms wait instead of a 16ms wait. This happens
often enough to cause jerky animations, and affect gnome-shell-perf-tool.

A simpler solution is just use a single roundtrip by using WaitForMsc to
ask the driver to compute the next vblank itself.

Cc: Owen W. Taylor <otaylor@fishsoup.net>
Cc: Robert Bragg <robert@linux.intel.com>
Reviewed-by: Robert Bragg <robert@sixbynine.org>
2015-02-04 19:31:40 +00:00
Rui Matos
b9640c091f wayland-winsys: Provide a wl_registry.global_remove callback
Otherwise libwayland-client will abort() when we get that event.

https://bugzilla.gnome.org/show_bug.cgi?id=743594
2015-01-30 16:05:41 +01:00
Rui Matos
c36e31401d kms-winsys: Mark the framebuffer to be bound when setting a new layout
We need to bind the context to the new EGL surface we just created.

https://bugzilla.gnome.org/show_bug.cgi?id=741881
2015-01-30 16:05:41 +01:00
Marco Trevisan (Treviño)
cd9676380f mir: use output names that are more conformat to the one used by Xmir
And by X itself...
2014-12-12 18:45:49 +01:00
Marco Trevisan (Treviño)
bc83282f4f mir: add renderer event listener support 2014-12-10 15:33:35 +01:00
Marco Trevisan (Treviño)
2872695fa7 mir: don't always allocate when getting the mir surface
Add proper documentation on header file
2014-12-09 22:01:32 +01:00
Marco Trevisan (Treviño)
7c71a06936 mir: fix mir surface recreation on resize, bind and update pointers
don't try to read from free'd memory allocation, copy stuff before
deinitializing the old onscreen.

Also, don't try to resize a foreign surface.
2014-12-09 20:22:53 +01:00
Marco Trevisan (Treviño)
a9a923c6f3 mir: correctly init/clear mutex and use prgname for surface 2014-12-09 20:16:36 +01:00
Marco Trevisan (Treviño)
1016fb64de mir: return proper surface / connection only when valid, without failing 2014-12-09 20:13:39 +01:00
Marco Trevisan (Treviño)
a144087085 mir: release surfaces on errors 2014-11-21 18:00:49 +01:00
Marco Trevisan (Treviño)
6aaeab0460 mir: add public method to resize a cogl onscreen
This will internally recreate a new surface with proper parameters
2014-11-21 18:00:10 +01:00
Marco Trevisan (Treviño)
77e28d4a77 mir: only allow to set foreign surfaces with hardware buffer
And return a CoglBool accordingly.
2014-11-20 07:18:26 +01:00
Marco Trevisan (Treviño)
8e6997db44 mir: return whether a foreign connection has been set or not 2014-11-20 07:17:19 +01:00
Marco Trevisan (Treviño)
e06a0b3d10 mir: release a connection on error 2014-11-18 22:16:38 +01:00
Marco Trevisan (Treviño)
b26466ad54 mir: improve error logging 2014-11-18 22:11:24 +01:00
Marco Trevisan (Treviño)
e5fd82e2a1 mir: use standard c types 2014-11-18 16:28:17 +01:00
Marco Trevisan (Treviño)
1cbc1c67a0 mir: add support for Mir Outputs 2014-11-17 18:50:30 +01:00
Marco Trevisan (Treviño)
a948c25116 mir: update the framebuffer size on resize events
We need to use a mutex as mir handles these on
different threads, also using an event idle prevents
to get initialization errors on cogl side.
2014-11-17 17:47:23 +01:00
Marco Trevisan (Treviño)
62f3f56d29 mir: set last state after initializing the surface 2014-11-17 17:45:59 +01:00
Marco Trevisan (Treviño)
1b9380ef3c mir: add support for foreign surfaces 2014-11-17 16:08:59 +01:00
Marco Trevisan (Treviño)
a3ae538c45 mir: add support for foreign display 2014-11-17 15:59:29 +01:00
Marco Trevisan (Treviño)
672eff0c6c cogl: add Mir EGL platform 2014-11-17 15:49:20 +01:00
Owen W. Taylor
4d8771a8c2 CoglTexturePixmapX11: add support for stereo content
Add cogl_texture_pixmap_x11_new_left() and
cogl_texture_pixmap_x11_new_right() (which takes the left texture
as an argument) for texture pixmap rendering with stereo content.
The underlying GLXPixmap is created using a stereo visual and shared
between the left and right textures.

Reviewed-by: Robert Bragg <robert.bragg@intel.com>
2014-07-17 19:27:13 -04:00
Owen W. Taylor
d16df5a5aa Add support for setting up stereo CoglOnscreens
If we want to show quad-buffer stereo with Cogl, we need to pick an
appropriate fbconfig for creating the CoglOnscreen objects. Add
cogl_onscreen_template_set_stereo_enabled() to indicate whether
stereo support is needed.

Add cogl_framebuffer_get_stereo_mode() to see if a framebuffer was
created with stereo support.

Add cogl_framebuffer_get_stereo_mode() to pick whether to draw to
the left, right, or both buffers.

Reviewed-by: Robert Bragg <robert.bragg@intel.com>
2014-07-17 19:27:05 -04:00
Adel Gadllah
d9afc6dada kms-winsys: Add api that tells cogl to ignore a crtc
An application might for whatever reason want to control a specific output
directly and have cogl only swap the other outputs if any. So add an api that
allows setting a crtc to be ignored.

https://bugzilla.gnome.org/show_bug.cgi?id=730536
2014-06-30 20:26:05 +02:00
Adel Gadllah
fe183554ca kms_winsys: Add cogl_kms_renderer_get_gbm api
Applications might want to get the underlying gbm device so add a getter for it.

https://bugzilla.gnome.org/show_bug.cgi?id=730536
2014-06-30 20:25:52 +02:00
Neil Roberts
52a646abc5 Use the EGL_KHR_surfacless_context extension
The surfaceless context extension can be used to bind a context
without a surface. We can use this to avoid creating a dummy surface
when the CoglContext is first created. Otherwise we have to have the
dummy surface so that we can bind it before the first onscreen is
created.

The main awkward part of this patch is that theoretically according to
the GL and GLES spec if you first bind a context without a surface
then the default state for glDrawBuffers is GL_NONE instead of
GL_BACK. In practice Mesa doesn't seem to do this but we need to be
robust against a GL implementation that does. Therefore we track when
the CoglContext is first used with a CoglOnscreen and force the
glDrawBuffers state to be GL_BACK.

There is a further awkward part in that GLES2 doesn't actually have a
glDrawBuffers state but GLES3 does. GLES3 also defaults to GL_NONE in
this case so if GLES3 is available then we have to be sure to set the
state to GL_BACK. As far as I can tell that actually makes GLES3
incompatible with GLES2 because in theory if the application is not
aware of GLES3 then it should be able to assume the draw buffer is
always GL_BACK.

Reviewed-by: Robert Bragg <robert.bragg@intel.com>
(cherry picked from commit e5f28f1e75db9bdc4f2688f420a74f908f96cf76)

Conflicts:
	cogl/winsys/cogl-winsys-egl-kms.c
	cogl/winsys/cogl-winsys-egl-x11.c
2014-06-17 13:31:03 +01:00