Backport more color fixes to really fix RHBZ #1428559
This commit is contained in:
parent
d12509b7f6
commit
c24f6328ae
162
0001-cogl-Add-pixel_format_to_gl_with_target-driver-vfunc.patch
Normal file
162
0001-cogl-Add-pixel_format_to_gl_with_target-driver-vfunc.patch
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
From aa5738c777883f270ae9cb3b2988d194792fed75 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Fri, 3 Mar 2017 17:11:19 +0100
|
||||||
|
Subject: [PATCH 1/2] cogl: Add pixel_format_to_gl_with_target driver vfunc
|
||||||
|
|
||||||
|
This is used by the GL driver in order to determine whether swizzling
|
||||||
|
actually applies given the bitmap and target texture internal format.
|
||||||
|
If both agree that they store BGRA, then swizzling may apply.
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=779234
|
||||||
|
---
|
||||||
|
cogl/cogl/cogl-driver.h | 7 +++++++
|
||||||
|
cogl/cogl/driver/gl/gl/cogl-driver-gl.c | 29 +++++++++++++++++++++++------
|
||||||
|
cogl/cogl/driver/gl/gles/cogl-driver-gles.c | 26 +++++++++++++++++++++-----
|
||||||
|
cogl/cogl/driver/nop/cogl-driver-nop.c | 1 +
|
||||||
|
4 files changed, 52 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cogl/cogl/cogl-driver.h b/cogl/cogl/cogl-driver.h
|
||||||
|
index 648228c6f..85aa0d870 100644
|
||||||
|
--- a/cogl/cogl/cogl-driver.h
|
||||||
|
+++ b/cogl/cogl/cogl-driver.h
|
||||||
|
@@ -55,6 +55,13 @@ struct _CoglDriverVtable
|
||||||
|
GLenum *out_glintformat,
|
||||||
|
GLenum *out_glformat,
|
||||||
|
GLenum *out_gltype);
|
||||||
|
+ CoglPixelFormat
|
||||||
|
+ (* pixel_format_to_gl_with_target) (CoglContext *context,
|
||||||
|
+ CoglPixelFormat format,
|
||||||
|
+ CoglPixelFormat target_format,
|
||||||
|
+ GLenum *out_glintformat,
|
||||||
|
+ GLenum *out_glformat,
|
||||||
|
+ GLenum *out_gltype);
|
||||||
|
|
||||||
|
CoglBool
|
||||||
|
(* update_features) (CoglContext *context,
|
||||||
|
diff --git a/cogl/cogl/driver/gl/gl/cogl-driver-gl.c b/cogl/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||||
|
index 1cc63e82f..178262ac0 100644
|
||||||
|
--- a/cogl/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||||
|
+++ b/cogl/cogl/driver/gl/gl/cogl-driver-gl.c
|
||||||
|
@@ -96,11 +96,12 @@ _cogl_driver_pixel_format_from_gl_internal (CoglContext *context,
|
||||||
|
}
|
||||||
|
|
||||||
|
static CoglPixelFormat
|
||||||
|
-_cogl_driver_pixel_format_to_gl (CoglContext *context,
|
||||||
|
- CoglPixelFormat format,
|
||||||
|
- GLenum *out_glintformat,
|
||||||
|
- GLenum *out_glformat,
|
||||||
|
- GLenum *out_gltype)
|
||||||
|
+_cogl_driver_pixel_format_to_gl_with_target (CoglContext *context,
|
||||||
|
+ CoglPixelFormat format,
|
||||||
|
+ CoglPixelFormat target_format,
|
||||||
|
+ GLenum *out_glintformat,
|
||||||
|
+ GLenum *out_glformat,
|
||||||
|
+ GLenum *out_gltype)
|
||||||
|
{
|
||||||
|
CoglPixelFormat required_format;
|
||||||
|
GLenum glintformat = 0;
|
||||||
|
@@ -178,7 +179,8 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
|
||||||
|
* and buffer format are the same here, the pixels
|
||||||
|
* will be flipped through this extension.
|
||||||
|
*/
|
||||||
|
- if (_cogl_has_private_feature
|
||||||
|
+ if (target_format == format &&
|
||||||
|
+ _cogl_has_private_feature
|
||||||
|
(context, COGL_PRIVATE_FEATURE_TEXTURE_SWIZZLE))
|
||||||
|
glformat = GL_RGBA;
|
||||||
|
else
|
||||||
|
@@ -297,6 +299,20 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
|
||||||
|
return required_format;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static CoglPixelFormat
|
||||||
|
+_cogl_driver_pixel_format_to_gl (CoglContext *context,
|
||||||
|
+ CoglPixelFormat format,
|
||||||
|
+ GLenum *out_glintformat,
|
||||||
|
+ GLenum *out_glformat,
|
||||||
|
+ GLenum *out_gltype)
|
||||||
|
+{
|
||||||
|
+ return _cogl_driver_pixel_format_to_gl_with_target (context,
|
||||||
|
+ format, format,
|
||||||
|
+ out_glintformat,
|
||||||
|
+ out_glformat,
|
||||||
|
+ out_gltype);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static CoglBool
|
||||||
|
_cogl_get_gl_version (CoglContext *ctx,
|
||||||
|
int *major_out,
|
||||||
|
@@ -677,6 +693,7 @@ _cogl_driver_gl =
|
||||||
|
{
|
||||||
|
_cogl_driver_pixel_format_from_gl_internal,
|
||||||
|
_cogl_driver_pixel_format_to_gl,
|
||||||
|
+ _cogl_driver_pixel_format_to_gl_with_target,
|
||||||
|
_cogl_driver_update_features,
|
||||||
|
_cogl_offscreen_gl_allocate,
|
||||||
|
_cogl_offscreen_gl_free,
|
||||||
|
diff --git a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||||
|
index bf63fcc16..521f6ef3d 100644
|
||||||
|
--- a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||||
|
+++ b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
|
||||||
|
@@ -67,11 +67,12 @@ _cogl_driver_pixel_format_from_gl_internal (CoglContext *context,
|
||||||
|
}
|
||||||
|
|
||||||
|
static CoglPixelFormat
|
||||||
|
-_cogl_driver_pixel_format_to_gl (CoglContext *context,
|
||||||
|
- CoglPixelFormat format,
|
||||||
|
- GLenum *out_glintformat,
|
||||||
|
- GLenum *out_glformat,
|
||||||
|
- GLenum *out_gltype)
|
||||||
|
+_cogl_driver_pixel_format_to_gl_with_target (CoglContext *context,
|
||||||
|
+ CoglPixelFormat format,
|
||||||
|
+ CoglPixelFormat target_format,
|
||||||
|
+ GLenum *out_glintformat,
|
||||||
|
+ GLenum *out_glformat,
|
||||||
|
+ GLenum *out_gltype)
|
||||||
|
{
|
||||||
|
CoglPixelFormat required_format;
|
||||||
|
GLenum glintformat;
|
||||||
|
@@ -219,6 +220,20 @@ _cogl_driver_pixel_format_to_gl (CoglContext *context,
|
||||||
|
return required_format;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static CoglPixelFormat
|
||||||
|
+_cogl_driver_pixel_format_to_gl (CoglContext *context,
|
||||||
|
+ CoglPixelFormat format,
|
||||||
|
+ GLenum *out_glintformat,
|
||||||
|
+ GLenum *out_glformat,
|
||||||
|
+ GLenum *out_gltype)
|
||||||
|
+{
|
||||||
|
+ return _cogl_driver_pixel_format_to_gl_with_target (context,
|
||||||
|
+ format, format,
|
||||||
|
+ out_glintformat,
|
||||||
|
+ out_glformat,
|
||||||
|
+ out_gltype);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static CoglBool
|
||||||
|
_cogl_get_gl_version (CoglContext *ctx,
|
||||||
|
int *major_out,
|
||||||
|
@@ -457,6 +472,7 @@ _cogl_driver_gles =
|
||||||
|
{
|
||||||
|
_cogl_driver_pixel_format_from_gl_internal,
|
||||||
|
_cogl_driver_pixel_format_to_gl,
|
||||||
|
+ _cogl_driver_pixel_format_to_gl_with_target,
|
||||||
|
_cogl_driver_update_features,
|
||||||
|
_cogl_offscreen_gl_allocate,
|
||||||
|
_cogl_offscreen_gl_free,
|
||||||
|
diff --git a/cogl/cogl/driver/nop/cogl-driver-nop.c b/cogl/cogl/driver/nop/cogl-driver-nop.c
|
||||||
|
index d9b1d0f1f..6e04e7164 100644
|
||||||
|
--- a/cogl/cogl/driver/nop/cogl-driver-nop.c
|
||||||
|
+++ b/cogl/cogl/driver/nop/cogl-driver-nop.c
|
||||||
|
@@ -61,6 +61,7 @@ _cogl_driver_nop =
|
||||||
|
{
|
||||||
|
NULL, /* pixel_format_from_gl_internal */
|
||||||
|
NULL, /* pixel_format_to_gl */
|
||||||
|
+ NULL, /* pixel_format_to_gl_with_target */
|
||||||
|
_cogl_driver_update_features,
|
||||||
|
_cogl_offscreen_nop_allocate,
|
||||||
|
_cogl_offscreen_nop_free,
|
||||||
|
--
|
||||||
|
2.12.0
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 35388fb33cb39a311b4ccc504ac15a6c5d226dab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
Date: Fri, 3 Mar 2017 17:13:10 +0100
|
||||||
|
Subject: [PATCH 2/2] cogl: Use pixel_format_to_gl_with_target on bitmap
|
||||||
|
uploading paths
|
||||||
|
|
||||||
|
We already do have a texture with an internal format in these paths,
|
||||||
|
so we should check the required format according to it.
|
||||||
|
|
||||||
|
This fixes CoglAtlasTexture (and CoglPangoRenderer indirectly), as
|
||||||
|
it forces a RGBA format on its texture, but pixel_format_to_gl()
|
||||||
|
anyway assumed swizzling is performed on the texture, while it is
|
||||||
|
not the case.
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=779234
|
||||||
|
---
|
||||||
|
cogl/cogl/driver/gl/cogl-texture-2d-gl.c | 11 ++++++-----
|
||||||
|
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cogl/cogl/driver/gl/cogl-texture-2d-gl.c b/cogl/cogl/driver/gl/cogl-texture-2d-gl.c
|
||||||
|
index 375edcb14..d1eff4507 100644
|
||||||
|
--- a/cogl/cogl/driver/gl/cogl-texture-2d-gl.c
|
||||||
|
+++ b/cogl/cogl/driver/gl/cogl-texture-2d-gl.c
|
||||||
|
@@ -772,11 +772,12 @@ _cogl_texture_2d_gl_copy_from_bitmap (CoglTexture2D *tex_2d,
|
||||||
|
|
||||||
|
upload_format = cogl_bitmap_get_format (upload_bmp);
|
||||||
|
|
||||||
|
- ctx->driver_vtable->pixel_format_to_gl (ctx,
|
||||||
|
- upload_format,
|
||||||
|
- NULL, /* internal format */
|
||||||
|
- &gl_format,
|
||||||
|
- &gl_type);
|
||||||
|
+ ctx->driver_vtable->pixel_format_to_gl_with_target (ctx,
|
||||||
|
+ upload_format,
|
||||||
|
+ _cogl_texture_get_format (tex),
|
||||||
|
+ NULL, /* internal gl format */
|
||||||
|
+ &gl_format,
|
||||||
|
+ &gl_type);
|
||||||
|
|
||||||
|
/* If this touches the first pixel then we'll update our copy */
|
||||||
|
if (dst_x == 0 && dst_y == 0 &&
|
||||||
|
--
|
||||||
|
2.12.0
|
||||||
|
|
13
mutter.spec
13
mutter.spec
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
Name: mutter
|
Name: mutter
|
||||||
Version: 3.23.91
|
Version: 3.23.91
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
Summary: Window and compositing manager based on Clutter
|
Summary: Window and compositing manager based on Clutter
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -14,9 +14,13 @@ URL: http://www.gnome.org
|
|||||||
Source0: http://download.gnome.org/sources/%{name}/3.23/%{name}-%{version}.tar.xz
|
Source0: http://download.gnome.org/sources/%{name}/3.23/%{name}-%{version}.tar.xz
|
||||||
|
|
||||||
Patch0: startup-notification.patch
|
Patch0: startup-notification.patch
|
||||||
# Backport of fix for color issue in 3.23.91:
|
# Backport of fixes for color issues in 3.23.91:
|
||||||
# https://git.gnome.org/browse/mutter/commit/?id=95e9fa10ef20a23912186c0cc701ab8f5a97f1a0
|
# https://git.gnome.org/browse/mutter/commit/?id=95e9fa10ef20a23912186c0cc701ab8f5a97f1a0
|
||||||
Patch1: 0001-cogl-Read-pixels-in-the-correct-32bit-format-as-per-.patch
|
Patch1: 0001-cogl-Read-pixels-in-the-correct-32bit-format-as-per-.patch
|
||||||
|
# https://git.gnome.org/browse/mutter/commit/?id=aa5738c777883f270ae9cb3b2988d194792fed75
|
||||||
|
Patch2: 0001-cogl-Add-pixel_format_to_gl_with_target-driver-vfunc.patch
|
||||||
|
# https://git.gnome.org/browse/mutter/commit/?id=35388fb33cb39a311b4ccc504ac15a6c5d226dab
|
||||||
|
Patch3: 0002-cogl-Use-pixel_format_to_gl_with_target-on-bitmap-up.patch
|
||||||
|
|
||||||
BuildRequires: chrpath
|
BuildRequires: chrpath
|
||||||
BuildRequires: pango-devel
|
BuildRequires: pango-devel
|
||||||
@ -112,6 +116,8 @@ the functionality of the installed %{name} package.
|
|||||||
%setup -q
|
%setup -q
|
||||||
#patch0 -p1
|
#patch0 -p1
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -f -i
|
autoreconf -f -i
|
||||||
@ -184,6 +190,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
|
|||||||
%{_datadir}/mutter/tests
|
%{_datadir}/mutter/tests
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Mar 07 2017 Adam Williamson <awilliam@redhat.com> - 3.23.91-3
|
||||||
|
- Backport more color fixes, should really fix BGO #779234, RHBZ #1428559
|
||||||
|
|
||||||
* Thu Mar 02 2017 Adam Williamson <awilliam@redhat.com> - 3.23.91-2
|
* Thu Mar 02 2017 Adam Williamson <awilliam@redhat.com> - 3.23.91-2
|
||||||
- Backport fix for a color issue in 3.23.91 (BGO #779234, RHBZ #1428559)
|
- Backport fix for a color issue in 3.23.91 (BGO #779234, RHBZ #1428559)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user