diff options
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 4 | ||||
| -rw-r--r-- | src/video_core/engines/engine_upload.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/engines/puller.cpp | 4 |
4 files changed, 9 insertions, 15 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 599551013..5d3a8293b 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -1742,12 +1742,12 @@ bool BufferCache<P>::InlineMemory(VAddr dest_address, size_t copy_size, | |||
| 1742 | SynchronizeBuffer(buffer, dest_address, static_cast<u32>(copy_size)); | 1742 | SynchronizeBuffer(buffer, dest_address, static_cast<u32>(copy_size)); |
| 1743 | 1743 | ||
| 1744 | if constexpr (USE_MEMORY_MAPS) { | 1744 | if constexpr (USE_MEMORY_MAPS) { |
| 1745 | auto upload_staging = runtime.UploadStagingBuffer(copy_size); | ||
| 1745 | std::array copies{BufferCopy{ | 1746 | std::array copies{BufferCopy{ |
| 1746 | .src_offset = 0, | 1747 | .src_offset = upload_staging.offset, |
| 1747 | .dst_offset = buffer.Offset(dest_address), | 1748 | .dst_offset = buffer.Offset(dest_address), |
| 1748 | .size = copy_size, | 1749 | .size = copy_size, |
| 1749 | }}; | 1750 | }}; |
| 1750 | auto upload_staging = runtime.UploadStagingBuffer(copy_size); | ||
| 1751 | u8* const src_pointer = upload_staging.mapped_span.data(); | 1751 | u8* const src_pointer = upload_staging.mapped_span.data(); |
| 1752 | std::memcpy(src_pointer, inlined_buffer.data(), copy_size); | 1752 | std::memcpy(src_pointer, inlined_buffer.data(), copy_size); |
| 1753 | runtime.CopyBuffer(buffer, upload_staging.buffer, copies); | 1753 | runtime.CopyBuffer(buffer, upload_staging.buffer, copies); |
diff --git a/src/video_core/engines/engine_upload.cpp b/src/video_core/engines/engine_upload.cpp index a34819234..28aa85f32 100644 --- a/src/video_core/engines/engine_upload.cpp +++ b/src/video_core/engines/engine_upload.cpp | |||
| @@ -51,11 +51,11 @@ void State::ProcessData(std::span<const u8> read_buffer) { | |||
| 51 | } else { | 51 | } else { |
| 52 | for (u32 line = 0; line < regs.line_count; ++line) { | 52 | for (u32 line = 0; line < regs.line_count; ++line) { |
| 53 | const GPUVAddr dest_line = address + static_cast<size_t>(line) * regs.dest.pitch; | 53 | const GPUVAddr dest_line = address + static_cast<size_t>(line) * regs.dest.pitch; |
| 54 | memory_manager.WriteBlockUnsafe( | 54 | std::span<const u8> buffer(read_buffer.data() + |
| 55 | dest_line, read_buffer.data() + static_cast<size_t>(line) * regs.line_length_in, | 55 | static_cast<size_t>(line) * regs.line_length_in, |
| 56 | regs.line_length_in); | 56 | regs.line_length_in); |
| 57 | rasterizer->AccelerateInlineToMemory(dest_line, regs.line_length_in, buffer); | ||
| 57 | } | 58 | } |
| 58 | memory_manager.InvalidateRegion(address, regs.dest.pitch * regs.line_count); | ||
| 59 | } | 59 | } |
| 60 | } else { | 60 | } else { |
| 61 | u32 width = regs.dest.width; | 61 | u32 width = regs.dest.width; |
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 5bb1427c1..6d43e23ea 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp | |||
| @@ -249,9 +249,6 @@ void Maxwell3D::ProcessMethodCall(u32 method, u32 argument, u32 nonshadow_argume | |||
| 249 | return; | 249 | return; |
| 250 | case MAXWELL3D_REG_INDEX(fragment_barrier): | 250 | case MAXWELL3D_REG_INDEX(fragment_barrier): |
| 251 | return rasterizer->FragmentBarrier(); | 251 | return rasterizer->FragmentBarrier(); |
| 252 | case MAXWELL3D_REG_INDEX(invalidate_texture_data_cache): | ||
| 253 | rasterizer->InvalidateGPUCache(); | ||
| 254 | return rasterizer->WaitForIdle(); | ||
| 255 | case MAXWELL3D_REG_INDEX(tiled_cache_barrier): | 252 | case MAXWELL3D_REG_INDEX(tiled_cache_barrier): |
| 256 | return rasterizer->TiledCacheBarrier(); | 253 | return rasterizer->TiledCacheBarrier(); |
| 257 | } | 254 | } |
| @@ -511,10 +508,7 @@ void Maxwell3D::ProcessCounterReset() { | |||
| 511 | 508 | ||
| 512 | void Maxwell3D::ProcessSyncPoint() { | 509 | void Maxwell3D::ProcessSyncPoint() { |
| 513 | const u32 sync_point = regs.sync_info.sync_point.Value(); | 510 | const u32 sync_point = regs.sync_info.sync_point.Value(); |
| 514 | const u32 cache_flush = regs.sync_info.clean_l2.Value(); | 511 | [[maybe_unused]] const u32 cache_flush = regs.sync_info.clean_l2.Value(); |
| 515 | if (cache_flush != 0) { | ||
| 516 | rasterizer->InvalidateGPUCache(); | ||
| 517 | } | ||
| 518 | rasterizer->SignalSyncPoint(sync_point); | 512 | rasterizer->SignalSyncPoint(sync_point); |
| 519 | } | 513 | } |
| 520 | 514 | ||
diff --git a/src/video_core/engines/puller.cpp b/src/video_core/engines/puller.cpp index 4d2278811..c308ba3fc 100644 --- a/src/video_core/engines/puller.cpp +++ b/src/video_core/engines/puller.cpp | |||
| @@ -118,7 +118,7 @@ void Puller::ProcessSemaphoreRelease() { | |||
| 118 | std::function<void()> operation([this, sequence_address, payload] { | 118 | std::function<void()> operation([this, sequence_address, payload] { |
| 119 | memory_manager.Write<u32>(sequence_address, payload); | 119 | memory_manager.Write<u32>(sequence_address, payload); |
| 120 | }); | 120 | }); |
| 121 | rasterizer->SyncOperation(std::move(operation)); | 121 | rasterizer->SignalFence(std::move(operation)); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | void Puller::ProcessSemaphoreAcquire() { | 124 | void Puller::ProcessSemaphoreAcquire() { |
| @@ -151,8 +151,8 @@ void Puller::CallPullerMethod(const MethodCall& method_call) { | |||
| 151 | case BufferMethods::SemaphoreAddressLow: | 151 | case BufferMethods::SemaphoreAddressLow: |
| 152 | case BufferMethods::SemaphoreSequencePayload: | 152 | case BufferMethods::SemaphoreSequencePayload: |
| 153 | case BufferMethods::SyncpointPayload: | 153 | case BufferMethods::SyncpointPayload: |
| 154 | break; | ||
| 155 | case BufferMethods::WrcacheFlush: | 154 | case BufferMethods::WrcacheFlush: |
| 155 | break; | ||
| 156 | case BufferMethods::RefCnt: | 156 | case BufferMethods::RefCnt: |
| 157 | rasterizer->SignalReference(); | 157 | rasterizer->SignalReference(); |
| 158 | break; | 158 | break; |