summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar bunnei2018-02-12 19:40:19 -0500
committerGravatar bunnei2018-02-12 21:24:38 -0500
commit4f969e22713ee510ef29741773b8d6721ebe9e49 (patch)
tree35927f7af56d534f594e108085ce61c54c1ed1fd /src/core
parentMerge pull request #180 from MerryMage/f/dynarmic/direct-page-table (diff)
downloadyuzu-4f969e22713ee510ef29741773b8d6721ebe9e49.tar.gz
yuzu-4f969e22713ee510ef29741773b8d6721ebe9e49.tar.xz
yuzu-4f969e22713ee510ef29741773b8d6721ebe9e49.zip
TransactParcel: Move WriteBlock to narrowest scope.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/service/vi/vi.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp
index dd4d3e517..7d9a41ded 100644
--- a/src/core/hle/service/vi/vi.cpp
+++ b/src/core/hle/service/vi/vi.cpp
@@ -442,18 +442,20 @@ private:
442 void TransactParcel(u32 id, TransactionId transaction, const std::vector<u8>& input_data, 442 void TransactParcel(u32 id, TransactionId transaction, const std::vector<u8>& input_data,
443 VAddr output_addr, u64 output_size) { 443 VAddr output_addr, u64 output_size) {
444 auto buffer_queue = nv_flinger->GetBufferQueue(id); 444 auto buffer_queue = nv_flinger->GetBufferQueue(id);
445 std::vector<u8> response_buffer; 445
446 if (transaction == TransactionId::Connect) { 446 if (transaction == TransactionId::Connect) {
447 IGBPConnectRequestParcel request{input_data}; 447 IGBPConnectRequestParcel request{input_data};
448 IGBPConnectResponseParcel response{1280, 720}; 448 IGBPConnectResponseParcel response{1280, 720};
449 response_buffer = response.Serialize(); 449 std::vector<u8> response_buffer = response.Serialize();
450 Memory::WriteBlock(output_addr, response_buffer.data(), response_buffer.size());
450 } else if (transaction == TransactionId::SetPreallocatedBuffer) { 451 } else if (transaction == TransactionId::SetPreallocatedBuffer) {
451 IGBPSetPreallocatedBufferRequestParcel request{input_data}; 452 IGBPSetPreallocatedBufferRequestParcel request{input_data};
452 453
453 buffer_queue->SetPreallocatedBuffer(request.data.slot, request.buffer); 454 buffer_queue->SetPreallocatedBuffer(request.data.slot, request.buffer);
454 455
455 IGBPSetPreallocatedBufferResponseParcel response{}; 456 IGBPSetPreallocatedBufferResponseParcel response{};
456 response_buffer = response.Serialize(); 457 std::vector<u8> response_buffer = response.Serialize();
458 Memory::WriteBlock(output_addr, response_buffer.data(), response_buffer.size());
457 } else if (transaction == TransactionId::DequeueBuffer) { 459 } else if (transaction == TransactionId::DequeueBuffer) {
458 IGBPDequeueBufferRequestParcel request{input_data}; 460 IGBPDequeueBufferRequestParcel request{input_data};
459 461
@@ -461,21 +463,24 @@ private:
461 request.data.height); 463 request.data.height);
462 464
463 IGBPDequeueBufferResponseParcel response{slot}; 465 IGBPDequeueBufferResponseParcel response{slot};
464 response_buffer = response.Serialize(); 466 std::vector<u8> response_buffer = response.Serialize();
467 Memory::WriteBlock(output_addr, response_buffer.data(), response_buffer.size());
465 } else if (transaction == TransactionId::RequestBuffer) { 468 } else if (transaction == TransactionId::RequestBuffer) {
466 IGBPRequestBufferRequestParcel request{input_data}; 469 IGBPRequestBufferRequestParcel request{input_data};
467 470
468 auto& buffer = buffer_queue->RequestBuffer(request.slot); 471 auto& buffer = buffer_queue->RequestBuffer(request.slot);
469 472
470 IGBPRequestBufferResponseParcel response{buffer}; 473 IGBPRequestBufferResponseParcel response{buffer};
471 response_buffer = response.Serialize(); 474 std::vector<u8> response_buffer = response.Serialize();
475 Memory::WriteBlock(output_addr, response_buffer.data(), response_buffer.size());
472 } else if (transaction == TransactionId::QueueBuffer) { 476 } else if (transaction == TransactionId::QueueBuffer) {
473 IGBPQueueBufferRequestParcel request{input_data}; 477 IGBPQueueBufferRequestParcel request{input_data};
474 478
475 buffer_queue->QueueBuffer(request.data.slot, request.data.transform); 479 buffer_queue->QueueBuffer(request.data.slot, request.data.transform);
476 480
477 IGBPQueueBufferResponseParcel response{1280, 720}; 481 IGBPQueueBufferResponseParcel response{1280, 720};
478 response_buffer = response.Serialize(); 482 std::vector<u8> response_buffer = response.Serialize();
483 Memory::WriteBlock(output_addr, response_buffer.data(), response_buffer.size());
479 } else if (transaction == TransactionId::Query) { 484 } else if (transaction == TransactionId::Query) {
480 IGBPQueryRequestParcel request{input_data}; 485 IGBPQueryRequestParcel request{input_data};
481 486
@@ -483,13 +488,11 @@ private:
483 buffer_queue->Query(static_cast<NVFlinger::BufferQueue::QueryType>(request.type)); 488 buffer_queue->Query(static_cast<NVFlinger::BufferQueue::QueryType>(request.type));
484 489
485 IGBPQueryResponseParcel response{value}; 490 IGBPQueryResponseParcel response{value};
486 response_buffer = response.Serialize(); 491 std::vector<u8> response_buffer = response.Serialize();
487 492 Memory::WriteBlock(output_addr, response_buffer.data(), response_buffer.size());
488 } else { 493 } else {
489 ASSERT_MSG(false, "Unimplemented"); 494 ASSERT_MSG(false, "Unimplemented");
490 } 495 }
491
492 Memory::WriteBlock(output_addr, response_buffer.data(), output_size);
493 } 496 }
494 497
495 void TransactParcel(Kernel::HLERequestContext& ctx) { 498 void TransactParcel(Kernel::HLERequestContext& ctx) {