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
