summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorGravatar Franco M2023-11-04 21:28:16 -0300
committerGravatar GitHub2023-11-04 21:28:16 -0300
commit728aca770317b3f86961c8669ba9ae5c68570d3f (patch)
tree29adffcb1d264cc16cacb478a8f6645ef6259b3b /src/video_core
parentWe dont need that (diff)
parentMerge pull request #11952 from liamwhite/opus_stereo_count (diff)
downloadyuzu-728aca770317b3f86961c8669ba9ae5c68570d3f.tar.gz
yuzu-728aca770317b3f86961c8669ba9ae5c68570d3f.tar.xz
yuzu-728aca770317b3f86961c8669ba9ae5c68570d3f.zip
Merge branch 'master' into new-shortcut
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h13
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp2
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp8
-rw-r--r--src/video_core/renderer_vulkan/vk_state_tracker.cpp2
-rw-r--r--src/video_core/renderer_vulkan/vk_swapchain.cpp6
5 files changed, 22 insertions, 9 deletions
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<P>::BindHostComputeTextureBuffers() {
1067 1067
1068template <class P> 1068template <class P>
1069void BufferCache<P>::DoUpdateGraphicsBuffers(bool is_indexed) { 1069void BufferCache<P>::DoUpdateGraphicsBuffers(bool is_indexed) {
1070 do { 1070 BufferOperations([&]() {
1071 channel_state->has_deleted_buffers = false;
1072 if (is_indexed) { 1071 if (is_indexed) {
1073 UpdateIndexBuffer(); 1072 UpdateIndexBuffer();
1074 } 1073 }
@@ -1082,14 +1081,16 @@ void BufferCache<P>::DoUpdateGraphicsBuffers(bool is_indexed) {
1082 if (current_draw_indirect) { 1081 if (current_draw_indirect) {
1083 UpdateDrawIndirect(); 1082 UpdateDrawIndirect();
1084 } 1083 }
1085 } while (channel_state->has_deleted_buffers); 1084 });
1086} 1085}
1087 1086
1088template <class P> 1087template <class P>
1089void BufferCache<P>::DoUpdateComputeBuffers() { 1088void BufferCache<P>::DoUpdateComputeBuffers() {
1090 UpdateComputeUniformBuffers(); 1089 BufferOperations([&]() {
1091 UpdateComputeStorageBuffers(); 1090 UpdateComputeUniformBuffers();
1092 UpdateComputeTextureBuffers(); 1091 UpdateComputeStorageBuffers();
1092 UpdateComputeTextureBuffers();
1093 });
1093} 1094}
1094 1095
1095template <class P> 1096template <class P>
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
358 .has_broken_spirv_subgroup_mask_vector_extract_dynamic = 358 .has_broken_spirv_subgroup_mask_vector_extract_dynamic =
359 driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY, 359 driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY,
360 .has_broken_robust = 360 .has_broken_robust =
361 device.IsNvidia() && device.GetNvidiaArch() <= NvidiaArchitecture::Arch_Maxwell, 361 device.IsNvidia() && device.GetNvidiaArch() <= NvidiaArchitecture::Arch_Pascal,
362 }; 362 };
363 363
364 host_info = Shader::HostTranslateInfo{ 364 host_info = Shader::HostTranslateInfo{
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 465eac37e..3983b2eb7 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -13,6 +13,7 @@
13#include "common/microprofile.h" 13#include "common/microprofile.h"
14#include "common/scope_exit.h" 14#include "common/scope_exit.h"
15#include "common/settings.h" 15#include "common/settings.h"
16#include "video_core/buffer_cache/buffer_cache.h"
16#include "video_core/control/channel_state.h" 17#include "video_core/control/channel_state.h"
17#include "video_core/engines/draw_manager.h" 18#include "video_core/engines/draw_manager.h"
18#include "video_core/engines/kepler_compute.h" 19#include "video_core/engines/kepler_compute.h"
@@ -285,6 +286,7 @@ void RasterizerVulkan::DrawTexture() {
285 286
286 query_cache.NotifySegment(true); 287 query_cache.NotifySegment(true);
287 288
289 std::scoped_lock l{texture_cache.mutex};
288 texture_cache.SynchronizeGraphicsDescriptors(); 290 texture_cache.SynchronizeGraphicsDescriptors();
289 texture_cache.UpdateRenderTargets(false); 291 texture_cache.UpdateRenderTargets(false);
290 292
@@ -921,9 +923,13 @@ void RasterizerVulkan::UpdateDynamicStates() {
921} 923}
922 924
923void RasterizerVulkan::HandleTransformFeedback() { 925void RasterizerVulkan::HandleTransformFeedback() {
926 static std::once_flag warn_unsupported;
927
924 const auto& regs = maxwell3d->regs; 928 const auto& regs = maxwell3d->regs;
925 if (!device.IsExtTransformFeedbackSupported()) { 929 if (!device.IsExtTransformFeedbackSupported()) {
926 LOG_ERROR(Render_Vulkan, "Transform feedbacks used but not supported"); 930 std::call_once(warn_unsupported, [&] {
931 LOG_ERROR(Render_Vulkan, "Transform feedbacks used but not supported");
932 });
927 return; 933 return;
928 } 934 }
929 query_cache.CounterEnable(VideoCommon::QueryType::StreamingByteCount, 935 query_cache.CounterEnable(VideoCommon::QueryType::StreamingByteCount,
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) {
190void SetupDirtyViewportSwizzles(Tables& tables) { 190void SetupDirtyViewportSwizzles(Tables& tables) {
191 static constexpr size_t swizzle_offset = 6; 191 static constexpr size_t swizzle_offset = 6;
192 for (size_t index = 0; index < Regs::NumViewports; ++index) { 192 for (size_t index = 0; index < Regs::NumViewports; ++index) {
193 tables[0][OFF(viewport_transform) + index * NUM(viewport_transform[0]) + swizzle_offset] = 193 tables[1][OFF(viewport_transform) + index * NUM(viewport_transform[0]) + swizzle_offset] =
194 ViewportSwizzles; 194 ViewportSwizzles;
195 } 195 }
196} 196}
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() {
147 case VK_ERROR_OUT_OF_DATE_KHR: 147 case VK_ERROR_OUT_OF_DATE_KHR:
148 is_outdated = true; 148 is_outdated = true;
149 break; 149 break;
150 case VK_ERROR_SURFACE_LOST_KHR:
151 vk::Check(result);
152 break;
150 default: 153 default:
151 LOG_ERROR(Render_Vulkan, "vkAcquireNextImageKHR returned {}", vk::ToString(result)); 154 LOG_ERROR(Render_Vulkan, "vkAcquireNextImageKHR returned {}", vk::ToString(result));
152 break; 155 break;
@@ -180,6 +183,9 @@ void Swapchain::Present(VkSemaphore render_semaphore) {
180 case VK_ERROR_OUT_OF_DATE_KHR: 183 case VK_ERROR_OUT_OF_DATE_KHR:
181 is_outdated = true; 184 is_outdated = true;
182 break; 185 break;
186 case VK_ERROR_SURFACE_LOST_KHR:
187 vk::Check(result);
188 break;
183 default: 189 default:
184 LOG_CRITICAL(Render_Vulkan, "Failed to present with error {}", vk::ToString(result)); 190 LOG_CRITICAL(Render_Vulkan, "Failed to present with error {}", vk::ToString(result));
185 break; 191 break;