From 0649da4cfb1944a089621fee75c6456e59834e03 Mon Sep 17 00:00:00 2001 From: Ani Date: Wed, 21 Aug 2024 18:53:49 +0100 Subject: [PATCH] vk: Add driver vendor V3DV (Broadcom on Mesa) VK_DRIVER_ID_MESA_V3DV --- rpcs3/Emu/RSX/VK/VKCompute.cpp | 1 + rpcs3/Emu/RSX/VK/VKHelpers.cpp | 3 +++ rpcs3/Emu/RSX/VK/VKRenderTargets.h | 1 + rpcs3/Emu/RSX/VK/vkutils/chip_class.h | 3 ++- rpcs3/Emu/RSX/VK/vkutils/device.cpp | 7 +++++++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/VK/VKCompute.cpp b/rpcs3/Emu/RSX/VK/VKCompute.cpp index 69f85e7c38..cc0246f3e2 100644 --- a/rpcs3/Emu/RSX/VK/VKCompute.cpp +++ b/rpcs3/Emu/RSX/VK/VKCompute.cpp @@ -77,6 +77,7 @@ namespace vk optimal_group_size = 128; break; case vk::driver_vendor::LAVAPIPE: + case vk::driver_vendor::V3DV: // TODO: Actually bench this. Using 32 for now to match other common configurations. case vk::driver_vendor::DOZEN: // Actual optimal size depends on the D3D device. Use 32 since it should work well on both AMD and NVIDIA diff --git a/rpcs3/Emu/RSX/VK/VKHelpers.cpp b/rpcs3/Emu/RSX/VK/VKHelpers.cpp index b89bd97d29..ada6c13f2c 100644 --- a/rpcs3/Emu/RSX/VK/VKHelpers.cpp +++ b/rpcs3/Emu/RSX/VK/VKHelpers.cpp @@ -124,6 +124,9 @@ namespace vk case driver_vendor::LAVAPIPE: // This software device works well, with poor performance as the only downside break; + case driver_vendor::V3DV: + // Broadcom GPUs need more testing, driver currently largely unstable + break; case driver_vendor::DOZEN: // This driver is often picked by mistake when the user meant to select something else. Complain loudly. #ifdef _WIN32 diff --git a/rpcs3/Emu/RSX/VK/VKRenderTargets.h b/rpcs3/Emu/RSX/VK/VKRenderTargets.h index 2f4a81b104..e1d1d5230a 100644 --- a/rpcs3/Emu/RSX/VK/VKRenderTargets.h +++ b/rpcs3/Emu/RSX/VK/VKRenderTargets.h @@ -188,6 +188,7 @@ namespace vk case driver_vendor::MVK: case driver_vendor::DOZEN: case driver_vendor::LAVAPIPE: + case driver_vendor::V3DV: break; } diff --git a/rpcs3/Emu/RSX/VK/vkutils/chip_class.h b/rpcs3/Emu/RSX/VK/vkutils/chip_class.h index d6dc990c69..c1dcfcb900 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/chip_class.h +++ b/rpcs3/Emu/RSX/VK/vkutils/chip_class.h @@ -50,7 +50,8 @@ namespace vk MVK, DOZEN, LAVAPIPE, - NVK + NVK, + V3DV }; driver_vendor get_driver_vendor(); diff --git a/rpcs3/Emu/RSX/VK/vkutils/device.cpp b/rpcs3/Emu/RSX/VK/vkutils/device.cpp index 6d14d7dffa..9f47f3ebda 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/device.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/device.cpp @@ -265,6 +265,11 @@ namespace vk return driver_vendor::LAVAPIPE; } + if (gpu_name.find("V3D") != umax) + { + return driver_vendor::V3DV; + } + return driver_vendor::unknown; } else @@ -288,6 +293,8 @@ namespace vk return driver_vendor::LAVAPIPE; case VK_DRIVER_ID_MESA_NVK: return driver_vendor::NVK; + case VK_DRIVER_ID_MESA_V3DV: + return driver_vendor::V3DV; default: // Mobile? return driver_vendor::unknown;