- U_gallium-Fix-big-endian-addressing-of-non-bitmask-arr.patch
* reverse apply since it caused a regression in rendering on s390x (bsc#1162252) OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=921
This commit is contained in:
parent
665cf7fc96
commit
101cb57bbd
@ -1,3 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 3 17:17:44 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
|
||||||
|
|
||||||
|
- U_gallium-Fix-big-endian-addressing-of-non-bitmask-arr.patch
|
||||||
|
* reverse apply since it caused a regression in rendering on
|
||||||
|
s390x (bsc#1162252)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Jan 29 22:56:19 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
|
Wed Jan 29 22:56:19 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
|
||||||
|
|
||||||
|
@ -126,6 +126,7 @@ Source6: %{name}-rpmlintrc
|
|||||||
Source7: Mesa.keyring
|
Source7: Mesa.keyring
|
||||||
Patch1: n_opencl_dep_libclang.patch
|
Patch1: n_opencl_dep_libclang.patch
|
||||||
Patch2: n_add-Mesa-headers-again.patch
|
Patch2: n_add-Mesa-headers-again.patch
|
||||||
|
Patch3: U_gallium-Fix-big-endian-addressing-of-non-bitmask-arr.patch
|
||||||
# never to be upstreamed
|
# never to be upstreamed
|
||||||
Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch
|
Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch
|
||||||
Patch58: u_dep_xcb.patch
|
Patch58: u_dep_xcb.patch
|
||||||
@ -747,6 +748,8 @@ rm -rf docs/README.{VMS,WIN32,OS2}
|
|||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
|
# reverse apply since it caused a regression in rendering on s390x (bsc#1162252)
|
||||||
|
%patch3 -p1 -R
|
||||||
%patch54 -p1
|
%patch54 -p1
|
||||||
%patch58 -p1
|
%patch58 -p1
|
||||||
%patch61 -p1
|
%patch61 -p1
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 3 17:17:44 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
|
||||||
|
|
||||||
|
- U_gallium-Fix-big-endian-addressing-of-non-bitmask-arr.patch
|
||||||
|
* reverse apply since it caused a regression in rendering on
|
||||||
|
s390x (bsc#1162252)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Jan 29 22:56:19 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
|
Wed Jan 29 22:56:19 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
|
||||||
|
|
||||||
|
@ -125,6 +125,7 @@ Source6: %{name}-rpmlintrc
|
|||||||
Source7: Mesa.keyring
|
Source7: Mesa.keyring
|
||||||
Patch1: n_opencl_dep_libclang.patch
|
Patch1: n_opencl_dep_libclang.patch
|
||||||
Patch2: n_add-Mesa-headers-again.patch
|
Patch2: n_add-Mesa-headers-again.patch
|
||||||
|
Patch3: U_gallium-Fix-big-endian-addressing-of-non-bitmask-arr.patch
|
||||||
# never to be upstreamed
|
# never to be upstreamed
|
||||||
Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch
|
Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch
|
||||||
Patch58: u_dep_xcb.patch
|
Patch58: u_dep_xcb.patch
|
||||||
@ -746,6 +747,8 @@ rm -rf docs/README.{VMS,WIN32,OS2}
|
|||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
|
# reverse apply since it caused a regression in rendering on s390x (bsc#1162252)
|
||||||
|
%patch3 -p1 -R
|
||||||
%patch54 -p1
|
%patch54 -p1
|
||||||
%patch58 -p1
|
%patch58 -p1
|
||||||
%patch61 -p1
|
%patch61 -p1
|
||||||
|
113
U_gallium-Fix-big-endian-addressing-of-non-bitmask-arr.patch
Normal file
113
U_gallium-Fix-big-endian-addressing-of-non-bitmask-arr.patch
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
From d17ff2f7f1864c81c1e00d04baf20f953c6d276a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eric Anholt <eric@anholt.net>
|
||||||
|
Date: Thu, 15 Aug 2019 15:38:00 -0700
|
||||||
|
Subject: [PATCH] gallium: Fix big-endian addressing of non-bitmask array
|
||||||
|
formats.
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
The formats affected are:
|
||||||
|
|
||||||
|
- LA x (16_FLOAT, 32_FLOAT, 32_UINT, 32_SINT)
|
||||||
|
- R8G8B8 x (UNORM, SNORM, SRGB, USCALED, SSCALED, UINT, SINT)
|
||||||
|
- RG/RGB/RGBA x (64_FLOAT, 32_FLOAT, 16_FLOAT, 32_UNORM, 32_SNORM,
|
||||||
|
32_USCALED, 32_SSCALED, 32_FIXED, 32_UINT, 32_SINT)
|
||||||
|
- RGB/RGBA x (16_UNORM, 16_SNORM, 16_USCALED, 16_SSCALED,
|
||||||
|
16_UINT, 16_SINT)
|
||||||
|
- RGBx16 x (UNORM, SNORM, FLOAT, UINT, SINT)
|
||||||
|
- RGBx32 x (FLOAT, UINT, SINT)
|
||||||
|
- RA x (16_FLOAT, 32_FLOAT, 32_UINT, 32_SINT)
|
||||||
|
|
||||||
|
The updated st_formats.c unit test checks that the formats affected by
|
||||||
|
this change are all array formats in the equivalent Mesa format (if
|
||||||
|
any). Mesa's array format definition is clear: the value stored is an
|
||||||
|
array (increasing memory address) of values of the channel's type.
|
||||||
|
It's also the only thing that makes sense for the RGB types, or very
|
||||||
|
large types like RGBA64_FLOAT (A should not move to the low address
|
||||||
|
because the cpu is BE).
|
||||||
|
|
||||||
|
Acked-by: Roland Scheidegger <sroland@vmware.com>
|
||||||
|
Acked-by: Adam Jackson <ajax@redhat.com>
|
||||||
|
Tested-by: Matt Turner <mattst88@gmail.com> (unit tests on BE)
|
||||||
|
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
|
||||||
|
---
|
||||||
|
src/gallium/auxiliary/util/u_format_parse.py | 23 +++++++++++++++++------
|
||||||
|
src/mesa/state_tracker/tests/st_format.c | 23 +++++++++++++++++++++++
|
||||||
|
2 files changed, 40 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/gallium/auxiliary/util/u_format_parse.py b/src/gallium/auxiliary/util/u_format_parse.py
|
||||||
|
index b9627055cda..541ae69d4dc 100644
|
||||||
|
--- a/src/gallium/auxiliary/util/u_format_parse.py
|
||||||
|
+++ b/src/gallium/auxiliary/util/u_format_parse.py
|
||||||
|
@@ -379,16 +379,27 @@ def parse(filename):
|
||||||
|
channel.shift = le_shift
|
||||||
|
le_shift += channel.size
|
||||||
|
|
||||||
|
- be_shift = 0
|
||||||
|
- for channel in be_channels[3::-1]:
|
||||||
|
- channel.shift = be_shift
|
||||||
|
- be_shift += channel.size
|
||||||
|
-
|
||||||
|
- assert le_shift == be_shift
|
||||||
|
for i in range(4):
|
||||||
|
assert (le_swizzles[i] != SWIZZLE_NONE) == (be_swizzles[i] != SWIZZLE_NONE)
|
||||||
|
|
||||||
|
format = Format(name, layout, block_width, block_height, block_depth, le_channels, le_swizzles, be_channels, be_swizzles, colorspace)
|
||||||
|
+
|
||||||
|
+ if format.is_array() and not format.is_bitmask():
|
||||||
|
+ # Formats accessed as arrays by the pack functions (R32G32_FLOAT or
|
||||||
|
+ # R8G8B8_UNORM, for example) should not be channel-ordering-reversed
|
||||||
|
+ # for BE.
|
||||||
|
+ # Note that __eq__ on channels ignores .shift!
|
||||||
|
+ assert(format.be_channels == format.le_channels)
|
||||||
|
+ assert(format.be_swizzles == format.le_swizzles)
|
||||||
|
+ format.be_channels = format.le_channels
|
||||||
|
+ else:
|
||||||
|
+ be_shift = 0
|
||||||
|
+ for channel in format.be_channels[3::-1]:
|
||||||
|
+ channel.shift = be_shift
|
||||||
|
+ be_shift += channel.size
|
||||||
|
+
|
||||||
|
+ assert le_shift == be_shift
|
||||||
|
+
|
||||||
|
formats.append(format)
|
||||||
|
return formats
|
||||||
|
|
||||||
|
diff --git a/src/mesa/state_tracker/tests/st_format.c b/src/mesa/state_tracker/tests/st_format.c
|
||||||
|
index 12cb74bd0be..e42a1873d5e 100644
|
||||||
|
--- a/src/mesa/state_tracker/tests/st_format.c
|
||||||
|
+++ b/src/mesa/state_tracker/tests/st_format.c
|
||||||
|
@@ -87,6 +87,29 @@ int main(int argc, char **argv)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (mf != MESA_FORMAT_NONE) {
|
||||||
|
+ const struct util_format_description *desc = util_format_description(i);
|
||||||
|
+
|
||||||
|
+ /* Make sure that gallium and Mesa agree on whether the format is an
|
||||||
|
+ * array format.
|
||||||
|
+ */
|
||||||
|
+ if (desc->nr_channels > 1) {
|
||||||
|
+ bool mesa_array = (_mesa_get_format_layout(mf) ==
|
||||||
|
+ MESA_FORMAT_LAYOUT_ARRAY);
|
||||||
|
+ bool gallium_array = desc->is_array && !desc->is_bitmask;
|
||||||
|
+ /* We should probably be checking equality here, but we have some
|
||||||
|
+ * UINT and SINT types that are array formats in Mesa but not in
|
||||||
|
+ * gallium.
|
||||||
|
+ */
|
||||||
|
+ if (gallium_array && !mesa_array) {
|
||||||
|
+ fprintf(stderr, "%s is %sarray, %s is %sarray\n",
|
||||||
|
+ util_format_short_name(i),
|
||||||
|
+ gallium_array ? "" : "not ",
|
||||||
|
+ _mesa_get_format_name(mf),
|
||||||
|
+ mesa_array ? "" : "not ");
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
enum pipe_format pf =
|
||||||
|
st_mesa_format_to_pipe_format(st, mf);
|
||||||
|
if (pf != i) {
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
Loading…
Reference in New Issue
Block a user