diff options
| author | 2024-01-01 15:02:20 -0500 | |
|---|---|---|
| committer | 2024-01-01 15:02:20 -0500 | |
| commit | 15cf34cd628851a673dec37fe7146a1488a70014 (patch) | |
| tree | a9010922b2072eea8cc1b6701e6a549afd7c8749 /src | |
| parent | Merge pull request #12536 from german77/npad_interface (diff) | |
| parent | Vulkan: Only recreate swapchain if the frame is bigger than the swap image. (diff) | |
| download | yuzu-15cf34cd628851a673dec37fe7146a1488a70014.tar.gz yuzu-15cf34cd628851a673dec37fe7146a1488a70014.tar.xz yuzu-15cf34cd628851a673dec37fe7146a1488a70014.zip | |
Merge pull request #12543 from FernandoS27/stop-liking-posts-from-ur-friends-ex
VideoCore: A few fixes to DMA and swapchain
Diffstat (limited to '')
| -rw-r--r-- | src/core/memory.h | 3 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_dma.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_present_manager.cpp | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/core/memory.h b/src/core/memory.h index 3e4d03f57..dddfaf4a4 100644 --- a/src/core/memory.h +++ b/src/core/memory.h | |||
| @@ -686,7 +686,8 @@ public: | |||
| 686 | } else { | 686 | } else { |
| 687 | this->m_memory.WriteBlockUnsafe(this->m_addr, this->data(), this->size_bytes()); | 687 | this->m_memory.WriteBlockUnsafe(this->m_addr, this->data(), this->size_bytes()); |
| 688 | } | 688 | } |
| 689 | } else if constexpr (FLAGS & GuestMemoryFlags::Safe) { | 689 | } else if constexpr ((FLAGS & GuestMemoryFlags::Safe) || |
| 690 | (FLAGS & GuestMemoryFlags::Cached)) { | ||
| 690 | this->m_memory.InvalidateRegion(this->m_addr, this->size_bytes()); | 691 | this->m_memory.InvalidateRegion(this->m_addr, this->size_bytes()); |
| 691 | } | 692 | } |
| 692 | } | 693 | } |
diff --git a/src/video_core/engines/maxwell_dma.cpp b/src/video_core/engines/maxwell_dma.cpp index 422d4d859..56fbff306 100644 --- a/src/video_core/engines/maxwell_dma.cpp +++ b/src/video_core/engines/maxwell_dma.cpp | |||
| @@ -228,7 +228,7 @@ void MaxwellDMA::CopyBlockLinearToPitch() { | |||
| 228 | 228 | ||
| 229 | Core::Memory::GpuGuestMemory<u8, Core::Memory::GuestMemoryFlags::SafeRead> tmp_read_buffer( | 229 | Core::Memory::GpuGuestMemory<u8, Core::Memory::GuestMemoryFlags::SafeRead> tmp_read_buffer( |
| 230 | memory_manager, src_operand.address, src_size, &read_buffer); | 230 | memory_manager, src_operand.address, src_size, &read_buffer); |
| 231 | Core::Memory::GpuGuestMemoryScoped<u8, Core::Memory::GuestMemoryFlags::SafeReadCachedWrite> | 231 | Core::Memory::GpuGuestMemoryScoped<u8, Core::Memory::GuestMemoryFlags::UnsafeReadCachedWrite> |
| 232 | tmp_write_buffer(memory_manager, dst_operand.address, dst_size, &write_buffer); | 232 | tmp_write_buffer(memory_manager, dst_operand.address, dst_size, &write_buffer); |
| 233 | 233 | ||
| 234 | UnswizzleSubrect(tmp_write_buffer, tmp_read_buffer, bytes_per_pixel, width, height, depth, | 234 | UnswizzleSubrect(tmp_write_buffer, tmp_read_buffer, bytes_per_pixel, width, height, depth, |
| @@ -292,7 +292,7 @@ void MaxwellDMA::CopyPitchToBlockLinear() { | |||
| 292 | GPUVAddr dst_addr = regs.offset_out; | 292 | GPUVAddr dst_addr = regs.offset_out; |
| 293 | Core::Memory::GpuGuestMemory<u8, Core::Memory::GuestMemoryFlags::SafeRead> tmp_read_buffer( | 293 | Core::Memory::GpuGuestMemory<u8, Core::Memory::GuestMemoryFlags::SafeRead> tmp_read_buffer( |
| 294 | memory_manager, src_addr, src_size, &read_buffer); | 294 | memory_manager, src_addr, src_size, &read_buffer); |
| 295 | Core::Memory::GpuGuestMemoryScoped<u8, Core::Memory::GuestMemoryFlags::SafeReadCachedWrite> | 295 | Core::Memory::GpuGuestMemoryScoped<u8, Core::Memory::GuestMemoryFlags::UnsafeReadCachedWrite> |
| 296 | tmp_write_buffer(memory_manager, dst_addr, dst_size, &write_buffer); | 296 | tmp_write_buffer(memory_manager, dst_addr, dst_size, &write_buffer); |
| 297 | 297 | ||
| 298 | // If the input is linear and the output is tiled, swizzle the input and copy it over. | 298 | // If the input is linear and the output is tiled, swizzle the input and copy it over. |
diff --git a/src/video_core/renderer_vulkan/vk_present_manager.cpp b/src/video_core/renderer_vulkan/vk_present_manager.cpp index 5e7518d96..792ed9615 100644 --- a/src/video_core/renderer_vulkan/vk_present_manager.cpp +++ b/src/video_core/renderer_vulkan/vk_present_manager.cpp | |||
| @@ -329,7 +329,7 @@ void PresentManager::CopyToSwapchainImpl(Frame* frame) { | |||
| 329 | // to account for that. | 329 | // to account for that. |
| 330 | const bool is_suboptimal = swapchain.NeedsRecreation(); | 330 | const bool is_suboptimal = swapchain.NeedsRecreation(); |
| 331 | const bool size_changed = | 331 | const bool size_changed = |
| 332 | swapchain.GetWidth() != frame->width || swapchain.GetHeight() != frame->height; | 332 | swapchain.GetWidth() < frame->width || swapchain.GetHeight() < frame->height; |
| 333 | if (is_suboptimal || size_changed) { | 333 | if (is_suboptimal || size_changed) { |
| 334 | RecreateSwapchain(frame); | 334 | RecreateSwapchain(frame); |
| 335 | } | 335 | } |