From 7f419d7ab2213459b1964039bc31d13b7ce7d00a Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 11 Aug 2025 17:55:14 +0200 Subject: [PATCH] radv/amdgpu: fix creation with different but unused RADV_PERFTEST flags This fixes an issue with Hellblade Senua's Sacrifice because RADV_PERFTEST_RT_WAVE_64 is set using drirc, but if two devices are created RADV_PERFTEST flags might differ. The proposed solution is to filter out unused RADV_PERFTEST flags for the winsys. Cc: mesa-stable Signed-off-by: Samuel Pitoiset Part-of: (cherry picked from commit 0c9f07929535fd0137d321926f5e9a1d51304d38) --- .pick_status.json | 2 +- src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index aa675b9ca6c..b6cf0dcd82d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -664,7 +664,7 @@ "description": "radv/amdgpu: fix creation with different but unused RADV_PERFTEST flags", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c index a2ebb948e9d..8284e82cbe3 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c @@ -170,6 +170,13 @@ radv_amdgpu_winsys_get_sync_types(struct radeon_winsys *rws) return ws->sync_types; } +static uint64_t +radv_amdgpu_winsys_filter_perftest_flags(uint64_t perftest_flags) +{ + return perftest_flags & (RADV_PERFTEST_LOCAL_BOS | RADV_PERFTEST_NO_SAM | + RADV_PERFTEST_SAM | RADV_PERFTEST_BO_LIST); +} + VkResult radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags, bool reserve_vmid, bool is_virtio, struct radeon_winsys **winsys) @@ -180,6 +187,8 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags, ac_drm_device *dev; struct radv_amdgpu_winsys *ws = NULL; + perftest_flags = radv_amdgpu_winsys_filter_perftest_flags(perftest_flags); + r = ac_drm_device_initialize(fd, is_virtio, &drm_major, &drm_minor, &dev); if (r) { fprintf(stderr, "radv/amdgpu: failed to initialize device.\n");