Hello community,

here is the log from the commit of package Mesa for openSUSE:Factory checked in 
at 2017-04-17 10:20:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/Mesa (Old)
 and      /work/SRC/openSUSE:Factory/.Mesa.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "Mesa"

Mon Apr 17 10:20:20 2017 rev:287 rq:487587 version:unknown

Changes:
--------
--- /work/SRC/openSUSE:Factory/Mesa/Mesa.changes        2017-04-07 
14:18:52.438810242 +0200
+++ /work/SRC/openSUSE:Factory/.Mesa.new/Mesa.changes   2017-04-17 
10:20:27.319973601 +0200
@@ -1,0 +2,34 @@
+Wed Apr 12 13:41:30 UTC 2017 - [email protected]
+
+- only reverse-apply 'U_draw-use-SoA-fetch-not-AoS-one.patch' on 
+  s390x (bsc#1032272)
+
+-------------------------------------------------------------------
+Wed Apr 12 12:31:34 UTC 2017 - [email protected]
+
+- build wayland on Leap >= 42.3
+- separate package 'Mesa-dri-nouveau' on Leap
+
+-------------------------------------------------------------------
+Wed Apr 12 12:15:27 UTC 2017 - [email protected]
+
+- removed broken locking patches for nouveau DRI driver
+  * N_01-WIP-nouveau-add-locking.patch
+  * 
N_02-nouveau-more-locking-make-sure-that-fence-work-is-always-done-with-the-push-mutex-acquired.patch
+  * N_03-nv30-locking-fixes.patch
+  * N_04-nv50-Fix-double-lock-in-nv50_hw_sm_get_query_result.patch
+  * N_05-Use-nv50_render_condition-in-nv50_blitctx_post_blit.patch
+
+-------------------------------------------------------------------
+Wed Apr 12 09:44:35 UTC 2017 - [email protected]
+
+- let Mesa require Mesa-libGL1 for a libglvnd build (bsc#1033708)
+
+-------------------------------------------------------------------
+Fri Apr  7 14:51:09 UTC 2017 - [email protected]
+
+- U_draw-use-SoA-fetch-not-AoS-one.patch 
+  * reverse-apply this patch to fix OpenGL support on s390x
+    (bsc#1032272)
+
+-------------------------------------------------------------------

Old:
----
  N_01-WIP-nouveau-add-locking.patch
  
N_02-nouveau-more-locking-make-sure-that-fence-work-is-always-done-with-the-push-mutex-acquired.patch
  N_03-nv30-locking-fixes.patch
  N_04-nv50-Fix-double-lock-in-nv50_hw_sm_get_query_result.patch
  N_05-Use-nv50_render_condition-in-nv50_blitctx_post_blit.patch

New:
----
  U_draw-use-SoA-fetch-not-AoS-one.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ Mesa.spec ++++++
--- /var/tmp/diff_new_pack.JaNnXt/_old  2017-04-17 10:20:28.583794613 +0200
+++ /var/tmp/diff_new_pack.JaNnXt/_new  2017-04-17 10:20:28.587794047 +0200
@@ -16,10 +16,6 @@
 #
 
 
-# Only enable the Nouveau locking patches if you know what you're doing.
-# They may fix KDE on Nouveau. They may also deadlock your userland.
-%define use_broken_nouveau_locking_patches 0
-
 %define libglvnd 0
 %if 0%{?suse_version} >= 1330
 %define libglvnd 1
@@ -90,13 +86,8 @@
 Patch33:        
archlinux_0001-EGL-Implement-the-libglvnd-interface-for-EGL-v2.patch
 Patch34:        
archlinux_0002-fixup-EGL-Implement-the-libglvnd-interface-for-EGL-v.patch
 Patch35:        
fedora_0001-glxglvnddispatch-Add-missing-dispatch-for-GetDriverC.patch
-
-# Nouveau multithreading workarounds from 
https://github.com/imirkin/mesa/commits/locking
-Patch61:        N_01-WIP-nouveau-add-locking.patch
-Patch62:        
N_02-nouveau-more-locking-make-sure-that-fence-work-is-always-done-with-the-push-mutex-acquired.patch
-Patch63:        N_03-nv30-locking-fixes.patch
-Patch64:        N_04-nv50-Fix-double-lock-in-nv50_hw_sm_get_query_result.patch
-Patch65:        N_05-Use-nv50_render_condition-in-nv50_blitctx_post_blit.patch
+# reverse-apply this to fix OpenGL support on s390x (bsc#1032272)
+Patch40:        U_draw-use-SoA-fetch-not-AoS-one.patch
 
 BuildRequires:  autoconf >= 2.60
 BuildRequires:  automake
@@ -163,9 +154,9 @@
 %endif
 %endif
 # Requirements for wayland bumped up from 17.0
-%if 0%{?suse_version} > 1320
-BuildRequires:  pkgconfig(wayland-client)
-BuildRequires:  pkgconfig(wayland-server)
+%if 0%{?suse_version} > 1320 || (0%{?sle_version} >= 120300 && 
0%{?is_opensuse})
+BuildRequires:  pkgconfig(wayland-client) >= 1.11
+BuildRequires:  pkgconfig(wayland-server) >= 1.11
 %endif
 %ifarch aarch64 %arm ppc64 ppc64le s390x %ix86 x86_64
 BuildRequires:  llvm-devel
@@ -178,6 +169,7 @@
 %endif
 
 %if 0%{?libglvnd}
+Requires:       Mesa-libGL1  = %{version}
 Requires:       libglvnd0 >= 0.1.0
 %endif
 
@@ -214,7 +206,7 @@
 Obsoletes:      xorg-x11-Mesa-devel < %{version}
 Provides:       Mesa-libIndirectGL-devel = %{version}
 Obsoletes:      Mesa-libIndirectGL-devel < %{version}
-%if 0%{?suse_version} > 1320
+%if 0%{?suse_version} > 1320 || (0%{?sle_version} >= 120300 && 
0%{?is_opensuse})
 Requires:       libwayland-egl-devel
 %endif
 
@@ -399,8 +391,8 @@
 
 %package -n libOSMesa8
 Summary:        Mesa Off-screen rendering extension
-Group:          System/Libraries
 # Wrongly named package shipped .so.8
+Group:          System/Libraries
 Obsoletes:      libOSMesa9 < %{version}-%{release}
 Provides:       libOSMesa9 = %{version}-%{release}
 
@@ -506,8 +498,8 @@
 
 %package libd3d
 Summary:        Mesa Direct3D9 state tracker
-Group:          System/Libraries
 # Manually provide d3d library (bnc#918294)
+Group:          System/Libraries
 %ifarch x86_64 s390x ppc64le aarch64
 Provides:       d3dadapter9.so.1()(64bit)
 %else
@@ -667,12 +659,9 @@
 %patch35 -p1
 %endif
 
-%if %{use_broken_nouveau_locking_patches}
-%patch61 -p1
-%patch62 -p1
-%patch63 -p1
-%patch64 -p1
-%patch65 -p1
+# reverse-apply this patch to fix OpenGL support on s390x (bsc#1032272)
+%ifarch s390x
+%patch40 -R -p1
 %endif
 
 # Remove requires to libglvnd0/libglvnd-devel from baselibs.conf when
@@ -683,7 +672,7 @@
 %endif
 
 %build
-%if 0%{?suse_version} > 1320
+%if 0%{?suse_version} > 1320 || (0%{?sle_version} >= 120300 && 
0%{?is_opensuse})
 egl_platforms=x11,drm,wayland
 %else
 egl_platforms=x11,drm
@@ -854,10 +843,12 @@
 %config %{_sysconfdir}/drirc
 %dir %{_libdir}/dri
 %{_libdir}/dri/*_dri.so
+%if 0%{?is_opensuse}
 %ifarch %ix86 x86_64 aarch64 %arm ppc64 ppc64le
 %exclude %{_libdir}/dri/nouveau_dri.so
 %exclude %{_libdir}/dri/nouveau_vieux_dri.so
 %endif
+%endif
 %if 0%{with_opencl}
 # only built with opencl
 %dir %{_libdir}/gallium-pipe/
@@ -953,7 +944,7 @@
 %{_libdir}/libOSMesa.so
 %{_libdir}/pkgconfig/osmesa.pc
 
-%if 0%{?suse_version} > 1320
+%if 0%{?suse_version} > 1320 || (0%{?sle_version} >= 120300 && 
0%{?is_opensuse})
 %files -n libwayland-egl1
 %defattr(-,root,root)
 %{_libdir}/libwayland-egl.so.1*
@@ -1049,11 +1040,13 @@
 %{_includedir}/GL/internal
 %{_libdir}/pkgconfig/dri.pc
 
+%if 0%{?is_opensuse}
 %ifarch %ix86 x86_64 aarch64 %arm ppc64 ppc64le
 %files -n Mesa-dri-nouveau
 %{_libdir}/dri/nouveau_dri.so
 %{_libdir}/dri/nouveau_vieux_dri.so
 %endif
+%endif
 
 %files devel
 %defattr(-,root,root)


++++++ U_draw-use-SoA-fetch-not-AoS-one.patch ++++++
>From e827d9175675aaa6cfc0b981e2a80685fb7b3a74 Mon Sep 17 00:00:00 2001
From: Roland Scheidegger <[email protected]>
Date: Wed, 21 Dec 2016 04:43:07 +0100
Subject: [PATCH] draw: use SoA fetch, not AoS one

Now that there's some SoA fetch which never falls back, we should always get
results which are better or at least not worse (something like rgba32f will
stay the same).

For cases which get way better, think something like R16_UNORM with 8-wide
vectors: this was 8 sign-extend fetches, 8 cvt, 8 muls, followed by
a couple of shuffles to stitch things together (if it is smart enough,
6 unpacks) and then a (8-wide) transpose (not sure if llvm could even
optimize the shuffles + transpose, since the 16bit values were actually
sign-extended to 128bit before being cast to a float vec, so that would be
another 8 unpacks). Now that is just 8 fetches (directly inserted into
vector, albeit there's one 128bit insert needed), 1 cvt, 1 mul.

v2: ditch the old AoS code instead of just disabling it.

Reviewed-by: Jose Fonseca <[email protected]>
---
 src/gallium/auxiliary/draw/draw_llvm.c | 71 +++++++++++-----------------------
 1 file changed, 23 insertions(+), 48 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 19b75a5003..8952dc8d3b 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -713,39 +713,6 @@ fetch_instanced(struct gallivm_state *gallivm,
 
 
 static void
-convert_to_soa(struct gallivm_state *gallivm,
-               LLVMValueRef src_aos[LP_MAX_VECTOR_WIDTH / 32],
-               LLVMValueRef dst_soa[TGSI_NUM_CHANNELS],
-               const struct lp_type soa_type)
-{
-   unsigned j, k;
-   struct lp_type aos_channel_type = soa_type;
-
-   LLVMValueRef aos_channels[TGSI_NUM_CHANNELS];
-   unsigned pixels_per_channel = soa_type.length / TGSI_NUM_CHANNELS;
-
-   debug_assert(TGSI_NUM_CHANNELS == 4);
-   debug_assert((soa_type.length % TGSI_NUM_CHANNELS) == 0);
-
-   aos_channel_type.length >>= 1;
-
-   for (j = 0; j < TGSI_NUM_CHANNELS; ++j) {
-      LLVMValueRef channel[LP_MAX_VECTOR_LENGTH] = { 0 };
-
-      assert(pixels_per_channel <= LP_MAX_VECTOR_LENGTH);
-
-      for (k = 0; k < pixels_per_channel; ++k) {
-         channel[k] = src_aos[j + TGSI_NUM_CHANNELS * k];
-      }
-
-      aos_channels[j] = lp_build_concat(gallivm, channel, aos_channel_type, 
pixels_per_channel);
-   }
-
-   lp_build_transpose_aos(gallivm, soa_type, aos_channels, dst_soa);
-}
-
-
-static void
 fetch_vector(struct gallivm_state *gallivm,
              const struct util_format_description *format_desc,
              struct lp_type vs_type,
@@ -755,11 +722,10 @@ fetch_vector(struct gallivm_state *gallivm,
              LLVMValueRef *inputs,
              LLVMValueRef indices)
 {
-   LLVMValueRef zero = LLVMConstNull(LLVMInt32TypeInContext(gallivm->context));
    LLVMBuilderRef builder = gallivm->builder;
    struct lp_build_context blduivec;
+   struct lp_type fetch_type = vs_type;
    LLVMValueRef offset, valid_mask;
-   LLVMValueRef aos_fetch[LP_MAX_VECTOR_WIDTH / 32];
    unsigned i;
 
    lp_build_context_init(&blduivec, gallivm, lp_uint_type(vs_type));
@@ -783,28 +749,37 @@ fetch_vector(struct gallivm_state *gallivm,
    }
 
    /*
-    * Note: we probably really want to use SoA fetch, not AoS one (albeit
-    * for most formats it will amount to the same as this isn't very
-    * optimized). But looks dangerous since it assumes alignment.
+    * Unlike fetch_instanced, use SoA fetch instead of multiple AoS fetches.
+    * This should always produce better code.
     */
-   for (i = 0; i < vs_type.length; i++) {
-      LLVMValueRef offset1, elem;
-      elem = lp_build_const_int32(gallivm, i);
-      offset1 = LLVMBuildExtractElement(builder, offset, elem, "");
 
-      aos_fetch[i] = lp_build_fetch_rgba_aos(gallivm, format_desc,
-                                             lp_float32_vec4_type(),
-                                             FALSE, map_ptr, offset1,
-                                             zero, zero, NULL);
+   /* The type handling is annoying here... */
+   if (format_desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB &&
+       format_desc->channel[0].pure_integer) {
+      if (format_desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
+         fetch_type = lp_type_int_vec(vs_type.width, vs_type.width * 
vs_type.length);
+      }
+      else if (format_desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {
+         fetch_type = lp_type_uint_vec(vs_type.width, vs_type.width * 
vs_type.length);
+      }
    }
-   convert_to_soa(gallivm, aos_fetch, inputs, vs_type);
+
+   lp_build_fetch_rgba_soa(gallivm, format_desc,
+                           fetch_type, FALSE, map_ptr, offset,
+                           blduivec.zero, blduivec.zero,
+                           NULL, inputs);
 
    for (i = 0; i < TGSI_NUM_CHANNELS; i++) {
+      inputs[i] = LLVMBuildBitCast(builder, inputs[i],
+                                   lp_build_vec_type(gallivm, vs_type), "");
+   }
+
+   /* out-of-bound fetches return all zeros */
+   for (i = 0; i < TGSI_NUM_CHANNELS; i++) {
       inputs[i] = LLVMBuildBitCast(builder, inputs[i], blduivec.vec_type, "");
       inputs[i] = LLVMBuildAnd(builder, inputs[i], valid_mask, "");
       inputs[i] = LLVMBuildBitCast(builder, inputs[i],
                                    lp_build_vec_type(gallivm, vs_type), "");
-
    }
 }
 
-- 
2.12.0



Reply via email to