From 0604b142637e9308b6d85872fbd2d45fda978553 Mon Sep 17 00:00:00 2001
From: Liam
Date: Mon, 23 Oct 2023 09:08:57 -0400
Subject: Manually robust on Pascal and earlier
---
src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src/video_core')
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
index 804b95989..22bf8cc77 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
@@ -358,7 +358,7 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, const Device& device
.has_broken_spirv_subgroup_mask_vector_extract_dynamic =
driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY,
.has_broken_robust =
- device.IsNvidia() && device.GetNvidiaArch() <= NvidiaArchitecture::Arch_Maxwell,
+ device.IsNvidia() && device.GetNvidiaArch() <= NvidiaArchitecture::Arch_Pascal,
};
host_info = Shader::HostTranslateInfo{
--
cgit v1.2.3
From 68f25217b879dc53721c8ae8686505f58fd1c630 Mon Sep 17 00:00:00 2001
From: Kelebek1
Date: Mon, 23 Oct 2023 15:08:56 +0100
Subject: Add missing dowhile loops around FindBuffer calls
---
src/video_core/buffer_cache/buffer_cache.h | 13 +++++++------
src/video_core/renderer_vulkan/vk_rasterizer.cpp | 2 ++
2 files changed, 9 insertions(+), 6 deletions(-)
(limited to 'src/video_core')
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index 9b2698fad..081a574e8 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -1067,8 +1067,7 @@ void BufferCache
::BindHostComputeTextureBuffers() {
template
void BufferCache::DoUpdateGraphicsBuffers(bool is_indexed) {
- do {
- channel_state->has_deleted_buffers = false;
+ BufferOperations([&]() {
if (is_indexed) {
UpdateIndexBuffer();
}
@@ -1082,14 +1081,16 @@ void BufferCache
::DoUpdateGraphicsBuffers(bool is_indexed) {
if (current_draw_indirect) {
UpdateDrawIndirect();
}
- } while (channel_state->has_deleted_buffers);
+ });
}
template
void BufferCache::DoUpdateComputeBuffers() {
- UpdateComputeUniformBuffers();
- UpdateComputeStorageBuffers();
- UpdateComputeTextureBuffers();
+ BufferOperations([&]() {
+ UpdateComputeUniformBuffers();
+ UpdateComputeStorageBuffers();
+ UpdateComputeTextureBuffers();
+ });
}
template
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 465eac37e..059b7cb40 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -13,6 +13,7 @@
#include "common/microprofile.h"
#include "common/scope_exit.h"
#include "common/settings.h"
+#include "video_core/buffer_cache/buffer_cache.h"
#include "video_core/control/channel_state.h"
#include "video_core/engines/draw_manager.h"
#include "video_core/engines/kepler_compute.h"
@@ -285,6 +286,7 @@ void RasterizerVulkan::DrawTexture() {
query_cache.NotifySegment(true);
+ std::scoped_lock l{texture_cache.mutex};
texture_cache.SynchronizeGraphicsDescriptors();
texture_cache.UpdateRenderTargets(false);
--
cgit v1.2.3
From 21c631b33bd05fab0bb96dfb774b63048ff22e83 Mon Sep 17 00:00:00 2001
From: Liam
Date: Thu, 26 Oct 2023 19:24:00 -0400
Subject: renderer_vulkan: fix viewport swizzle dirty state tracking
---
src/video_core/renderer_vulkan/vk_state_tracker.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src/video_core')
diff --git a/src/video_core/renderer_vulkan/vk_state_tracker.cpp b/src/video_core/renderer_vulkan/vk_state_tracker.cpp
index d56558a83..daaea2979 100644
--- a/src/video_core/renderer_vulkan/vk_state_tracker.cpp
+++ b/src/video_core/renderer_vulkan/vk_state_tracker.cpp
@@ -190,7 +190,7 @@ void SetupDirtySpecialOps(Tables& tables) {
void SetupDirtyViewportSwizzles(Tables& tables) {
static constexpr size_t swizzle_offset = 6;
for (size_t index = 0; index < Regs::NumViewports; ++index) {
- tables[0][OFF(viewport_transform) + index * NUM(viewport_transform[0]) + swizzle_offset] =
+ tables[1][OFF(viewport_transform) + index * NUM(viewport_transform[0]) + swizzle_offset] =
ViewportSwizzles;
}
}
--
cgit v1.2.3
From 8427b9d49d2332c5a2b6a8d68c531a43f9cc3ad1 Mon Sep 17 00:00:00 2001
From: Liam
Date: Sun, 29 Oct 2023 15:31:05 -0400
Subject: renderer_vulkan: ensure exception on surface loss
---
src/video_core/renderer_vulkan/vk_swapchain.cpp | 6 ++++++
1 file changed, 6 insertions(+)
(limited to 'src/video_core')
diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp
index 81ef98f61..821f44f1a 100644
--- a/src/video_core/renderer_vulkan/vk_swapchain.cpp
+++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp
@@ -147,6 +147,9 @@ bool Swapchain::AcquireNextImage() {
case VK_ERROR_OUT_OF_DATE_KHR:
is_outdated = true;
break;
+ case VK_ERROR_SURFACE_LOST_KHR:
+ vk::Check(result);
+ break;
default:
LOG_ERROR(Render_Vulkan, "vkAcquireNextImageKHR returned {}", vk::ToString(result));
break;
@@ -180,6 +183,9 @@ void Swapchain::Present(VkSemaphore render_semaphore) {
case VK_ERROR_OUT_OF_DATE_KHR:
is_outdated = true;
break;
+ case VK_ERROR_SURFACE_LOST_KHR:
+ vk::Check(result);
+ break;
default:
LOG_CRITICAL(Render_Vulkan, "Failed to present with error {}", vk::ToString(result));
break;
--
cgit v1.2.3
From 41701052d3ebbd2ed746beef342e1bdeaa9374e6 Mon Sep 17 00:00:00 2001
From: Liam
Date: Wed, 1 Nov 2023 20:47:08 -0400
Subject: renderer_vulkan: minimize transform feedback support log
---
src/video_core/renderer_vulkan/vk_rasterizer.cpp | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
(limited to 'src/video_core')
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 059b7cb40..3983b2eb7 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -923,9 +923,13 @@ void RasterizerVulkan::UpdateDynamicStates() {
}
void RasterizerVulkan::HandleTransformFeedback() {
+ static std::once_flag warn_unsupported;
+
const auto& regs = maxwell3d->regs;
if (!device.IsExtTransformFeedbackSupported()) {
- LOG_ERROR(Render_Vulkan, "Transform feedbacks used but not supported");
+ std::call_once(warn_unsupported, [&] {
+ LOG_ERROR(Render_Vulkan, "Transform feedbacks used but not supported");
+ });
return;
}
query_cache.CounterEnable(VideoCommon::QueryType::StreamingByteCount,
--
cgit v1.2.3