Mesa (staging/19.3): Revert "gallium: Fix big-endian addressing of non-bitmask array formats."

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Feb 11 17:47:46 UTC 2020


Module: Mesa
Branch: staging/19.3
Commit: 8f630dc7c5483a75fe8fd890be03586dfa79779b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f630dc7c5483a75fe8fd890be03586dfa79779b

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Feb  5 10:38:57 2020 -0800

Revert "gallium: Fix big-endian addressing of non-bitmask array formats."

This reverts the functional part of commit
d17ff2f7f1864c81c1e00d04baf20f953c6d276a, leaving the unit test for
mesa/pipe agreement on what's an array.

The issue is that the util_channel_desc.shift values on array formats are
not used for bit addressing in memory, they're bit addressing within a
word treating a pixel of the format as a native type, as seen by
llvmpipe's use of the values to do shifts (see
lp_build_unpack_arith_rgba_aos() for example).  This means the values are
nonsensical for 3-byte RGB, but then llvmpipe doesn't expose those formats
so it works out.

I still want to clean up our big-endian format handling at some point, but
let's fix the s390x regression first, sort out our format unit tests in
CI, then be able to refactor with confidence.

Fixes: d17ff2f7f186 ("gallium: Fix big-endian addressing of non-bitmask array formats.")
Closes: #2472
Acked-by: Marek Olšák <marek.olsak at amd.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3721>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3721>
(cherry picked from commit 1886dbfe7362baa221009371434f158b97183164)

---

 .pick_status.json                            |  2 +-
 src/gallium/auxiliary/util/u_format_parse.py | 23 ++++++-----------------
 2 files changed, 7 insertions(+), 18 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index c45df7b02a6..5d320ee9517 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -85,7 +85,7 @@
         "description": "Revert \"gallium: Fix big-endian addressing of non-bitmask array formats.\"",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": "d17ff2f7f1864c81c1e00d04baf20f953c6d276a"
     },
diff --git a/src/gallium/auxiliary/util/u_format_parse.py b/src/gallium/auxiliary/util/u_format_parse.py
index 541ae69d4dc..b9627055cda 100644
--- a/src/gallium/auxiliary/util/u_format_parse.py
+++ b/src/gallium/auxiliary/util/u_format_parse.py
@@ -379,27 +379,16 @@ 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
 



More information about the mesa-commit mailing list