Skip to content

Commit

Permalink
Update mesa PKGBUILD to 22.2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
0cc4m committed Nov 6, 2022
1 parent 1437c41 commit 19537b7
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Date: Sun, 12 Jun 2022 23:59:05 +0300
Subject: [PATCH] anv: force MEDIA_INTERFACE_DESCRIPTOR_LOAD reemit after
3D->GPGPU switch

Seems to fix a hang in Age of Empire 4 where the HW is hung on a
PIPE_CONTROL after a GPGPU_WALKER but no
MEDIA_INTERFACE_DESCRIPTOR_LOAD was emitted since the switch from 3D
to GPGPU.

This would happen in the following case :

vkCmdBindPipeline(COMPUTE, cs_pipeline);
vkCmdDispatch(...);
vkCmdBindPipeline(GRAPHICS, gfx_pipeline);
vkCmdDraw(...);
vkCmdDispatch(...);

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
src/intel/vulkan/genX_cmd_buffer.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index 240630d84124..77822ec89404 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -5917,6 +5917,11 @@ genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer,
}
#endif

+#if GFX_VERx10 == 120
+ if (pipeline == _3D)
+ cmd_buffer->state.compute.pipeline_dirty = true;
+#endif
+
/* From "BXML » GT » MI » vol1a GPU Overview » [Instruction]
* PIPELINE_SELECT [DevBWR+]":
*
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Date: Sat, 25 Jun 2022 23:38:45 +0300
Subject: [PATCH] intel/fs: always mask the bottom bits of the sampler extended
descriptor

Fixes a hang in Age Of Empire 4. The HW is hang with the sampler input
unit busy. Replaying on simulation showed the extended message length
in the extended descriptor is invalid. Since the Anv ensures the input
is correct in anv_surface_state_to_handle(), the likely reason for
this issue is the use of VK_VALVE_mutable_descriptor_type and the
application leaving a previous value for a different descriptor type.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
src/intel/compiler/brw_fs.cpp | 2 +-
.../compiler/brw_lower_logical_sends.cpp | 20 +++++++++++++++----
2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp
index 0f282dcd345f..165d8b33b677 100644
--- a/src/intel/compiler/brw_fs.cpp
+++ b/src/intel/compiler/brw_fs.cpp
@@ -4421,7 +4421,7 @@ brw_fb_write_msg_control(const fs_inst *inst,
return mctl;
}

- /**
+/**
* Predicate the specified instruction on the sample mask.
*/
void
diff --git a/src/intel/compiler/brw_lower_logical_sends.cpp b/src/intel/compiler/brw_lower_logical_sends.cpp
index 255ce7594811..e99c7b8ab844 100644
--- a/src/intel/compiler/brw_lower_logical_sends.cpp
+++ b/src/intel/compiler/brw_lower_logical_sends.cpp
@@ -1112,30 +1112,42 @@ lower_sampler_logical_send_gfx7(const fs_builder &bld, fs_inst *inst, opcode op,
inst->src[1] = brw_imm_ud(0);
} else if (surface_handle.file != BAD_FILE) {
/* Bindless surface */
+ const fs_builder ubld = bld.group(1, 0).exec_all();
assert(devinfo->ver >= 9);
inst->desc = brw_sampler_desc(devinfo,
GFX9_BTI_BINDLESS,
sampler.file == IMM ? sampler.ud % 16 : 0,
msg_type,
simd_mode,
0 /* return_format unused on gfx7+ */);

/* For bindless samplers, the entire address is included in the message
* header so we can leave the portion in the message descriptor 0.
*/
if (sampler_handle.file != BAD_FILE || sampler.file == IMM) {
inst->src[0] = brw_imm_ud(0);
} else {
- const fs_builder ubld = bld.group(1, 0).exec_all();
fs_reg desc = ubld.vgrf(BRW_REGISTER_TYPE_UD);
ubld.SHL(desc, sampler, brw_imm_ud(8));
inst->src[0] = desc;
}

- /* We assume that the driver provided the handle in the top 20 bits so
- * we can use the surface handle directly as the extended descriptor.
+ /* We previously assumed that the driver provided the handle in the top
+ * 20 bits (leaving the bottom 12 bits at 0). But with extensions like
+ * VK_VALVE_mutable_descriptor_type, the application is more in control
+ * of the content of VkDescriptors which is where we store
+ * surface/sampler offsets. We experience GPU hangs because the
+ * application left an invalid value in the descriptor (probably used
+ * for another descriptor type than sampler) and the lower 12bits of the
+ * surface handle overlapping with the extended descriptor length make
+ * the HW hang. The following AND() clears those bits and fixes a hang
+ * in Age Of Empire 4.
*/
- inst->src[1] = retype(surface_handle, BRW_REGISTER_TYPE_UD);
+ fs_reg ex_desc = ubld.vgrf(BRW_REGISTER_TYPE_UD);
+ ubld.AND(ex_desc,
+ retype(surface_handle, BRW_REGISTER_TYPE_UD),
+ brw_imm_ud(INTEL_MASK(31, 12)));
+ inst->src[1] = component(ex_desc, 0);
} else {
/* Immediate portion of the descriptor */
inst->desc = brw_sampler_desc(devinfo,
27 changes: 16 additions & 11 deletions mesa-archlinux-arm/mesa/PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ highmem=1
pkgbase=mesa
pkgname=('vulkan-mesa-layers' 'opencl-mesa' 'vulkan-radeon' 'vulkan-swrast' 'vulkan-broadcom' 'vulkan-panfrost' 'libva-mesa-driver' 'mesa-vdpau' 'mesa')
pkgdesc="An open-source implementation of the OpenGL specification"
pkgver=22.1.6
pkgver=22.2.1
pkgrel=1
arch=('x86_64')
makedepends=('python-mako' 'libxml2' 'libx11' 'xorgproto' 'libdrm' 'libxshmfence' 'libxxf86vm'
Expand All @@ -23,12 +23,16 @@ makedepends=('python-mako' 'libxml2' 'libx11' 'xorgproto' 'libdrm' 'libxshmfence
'systemd' 'valgrind' 'glslang' 'vulkan-icd-loader' 'directx-headers' 'cmake' 'meson')
url="https://www.mesa3d.org/"
license=('custom')
options=('debug')
options=('debug' '!lto')
source=(https://mesa.freedesktop.org/archive/mesa-${pkgver}.tar.xz{,.sig}
0001-anv-force-MEDIA_INTERFACE_DESCRIPTOR_LOAD-reemit-aft.patch
0002-intel-fs-always-mask-the-bottom-bits-of-the-sampler-.patch
rockchip-ebc.patch
LICENSE)
sha512sums=('3b2a0bb781c3d540401e6f51e3cf0d87d4e22923b6a5a4ea9d8ce5c79b4a2d5e8b1c237a36325d7d7178448ae102470ebefb312644dc09818cce91fd5439cb07'
sha512sums=('cb69c808453474f77aad68afae7cdb427e6720e1d2259f7b911a5476a03144bbe8adfbe040f9bed3954d92805eea302757b76fd29f03f692f725c0fd2295df7e'
'SKIP'
'9bf47019a7c1da6724393cf571c6e1ce6b56ca24fe32045bc056d2e1bb2584f6a81e886dd8b2f1b1aabb953367dd068f9833f520fa41a9b2bbce20fdc15d07b4'
'3df104f4abbecb12fcf9631cabdc7fe883b6c529abebaf36a0d47933ebd0c57235f11767060604dec71acefdf55f2f025eb997b1dd1cf0b92c02af0a604cae98'
'6f7ce6d12b6659b530ee38f180f9183d2ba890979f900d05f872dcf807ba45386b85223cbc7736ed659f31c7e82b2423062af42613a37476793aa0840ce491f7'
'f9f0d0ccf166fe6cb684478b6f1e1ab1f2850431c06aa041738563eb1808a004e52cdec823c103c9e180f03ffc083e95974d291353f0220fe52ae6d4897fecc7')
validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D' # Emil Velikov <emil.l.velikov@gmail.com>
Expand All @@ -41,29 +45,29 @@ validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D' # Emil Velikov <emil.l
prepare() {
cd mesa-$pkgver

# https://gitlab.freedesktop.org/mesa/mesa/-/issues/7111
# https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17247
# https://github.com/HansKristian-Work/vkd3d-proton/issues/1200
patch -Np1 -i ../0001-anv-force-MEDIA_INTERFACE_DESCRIPTOR_LOAD-reemit-aft.patch
patch -Np1 -i ../0002-intel-fs-always-mask-the-bottom-bits-of-the-sampler-.patch

# Add rockchip-ebc support
patch -p1 -i "${srcdir}/rockchip-ebc.patch"
}

build() {
case "${CARCH}" in
armv7h) GALLIUM=",etnaviv,kmsro,lima,panfrost,tegra,v3d,vc4" ;;
aarch64) GALLIUM=",etnaviv,kmsro,lima,panfrost,v3d,vc4" ;;
aarch64) GALLIUM=",etnaviv,kmsro,lima,panfrost,svga,v3d,vc4" ;;
esac

# Build only minimal debug info to reduce size
CFLAGS+=' -g1'
CXXFLAGS+=' -g1'

# https://gitlab.freedesktop.org/mesa/mesa/-/issues/6229
if [[ $CARCH != "aarch64" ]]; then
CFLAGS+=' -mtls-dialect=gnu'
CXXFLAGS+=' -mtls-dialect=gnu'
fi

arch-meson mesa-$pkgver build \
-D b_lto=$([[ $CARCH == aarch64 ]] && echo true || echo false) \
-D b_ndebug=true \
-D b_lto=false \
-D platforms=x11,wayland \
-D gallium-drivers=r300,r600,radeonsi,freedreno,nouveau,swrast,virgl,zink,d3d12${GALLIUM} \
-D vulkan-drivers=amd,swrast,broadcom,panfrost \
Expand All @@ -89,6 +93,7 @@ build() {
-D osmesa=true \
-D shared-glapi=enabled \
-D microsoft-clc=disabled \
-D video-codecs=vc1dec,h264dec,h264enc,h265dec,h265enc \
-D valgrind=enabled

# Print config
Expand Down

0 comments on commit 19537b7

Please sign in to comment.