summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h4
-rw-r--r--src/video_core/engines/engine_upload.cpp8
-rw-r--r--src/video_core/engines/maxwell_3d.cpp8
-rw-r--r--src/video_core/engines/puller.cpp4
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
512void Maxwell3D::ProcessSyncPoint() { 509void 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
124void Puller::ProcessSemaphoreAcquire() { 124void 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;