From bd14429f2062522054eb39c89714b8e40ed37c0b Mon Sep 17 00:00:00 2001 From: kd-11 Date: Mon, 29 Jun 2020 20:03:27 +0300 Subject: [PATCH] vk: Disable primitive restart for old GCN cards - Also adds more Navi 14 chips to detection table --- rpcs3/Emu/RSX/VK/VKHelpers.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/VKHelpers.cpp b/rpcs3/Emu/RSX/VK/VKHelpers.cpp index bef7fab67e..4df5470a5b 100644 --- a/rpcs3/Emu/RSX/VK/VKHelpers.cpp +++ b/rpcs3/Emu/RSX/VK/VKHelpers.cpp @@ -32,7 +32,7 @@ namespace vk table.add(0x15DD, chip_class::AMD_vega); // Raven Ridge table.add(0x15D8, chip_class::AMD_vega); // Raven Ridge table.add(0x7310, 0x731F, chip_class::AMD_navi); // Navi10 - table.add(0x7340, 0x7340, chip_class::AMD_navi); // Navi14 + table.add(0x7340, 0x734F, chip_class::AMD_navi); // Navi14 return table; }(); @@ -88,7 +88,7 @@ namespace vk VkFlags g_heap_compatible_buffer_types = 0; driver_vendor g_driver_vendor = driver_vendor::unknown; chip_class g_chip_class = chip_class::unknown; - bool g_drv_no_primitive_restart_flag = false; + bool g_drv_no_primitive_restart = false; bool g_drv_sanitize_fp_values = false; bool g_drv_disable_fence_reset = false; bool g_drv_emulate_cond_render = false; @@ -463,7 +463,7 @@ namespace vk { g_current_renderer = &device; g_runtime_state.clear(); - g_drv_no_primitive_restart_flag = false; + g_drv_no_primitive_restart = false; g_drv_sanitize_fp_values = false; g_drv_disable_fence_reset = false; g_drv_emulate_cond_render = (g_cfg.video.relaxed_zcull_sync && !g_current_renderer->get_conditional_render_support()); @@ -480,6 +480,9 @@ namespace vk switch (g_driver_vendor) { case driver_vendor::AMD: + // Primitive restart on older GCN is still broken + g_drv_no_primitive_restart = (g_chip_class == vk::chip_class::AMD_gcn_generic); + break; case driver_vendor::RADV: // Previous bugs with fence reset and primitive restart seem to have been fixed with newer drivers break; @@ -550,7 +553,7 @@ namespace vk bool emulate_primitive_restart(rsx::primitive_type type) { - if (g_drv_no_primitive_restart_flag) + if (g_drv_no_primitive_restart) { switch (type) {