diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/vi/vi.cpp | 137 |
1 files changed, 74 insertions, 63 deletions
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index 311b0c765..e343257f0 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp | |||
| @@ -502,10 +502,12 @@ private: | |||
| 502 | 502 | ||
| 503 | void TransactParcel(Kernel::HLERequestContext& ctx) { | 503 | void TransactParcel(Kernel::HLERequestContext& ctx) { |
| 504 | IPC::RequestParser rp{ctx}; | 504 | IPC::RequestParser rp{ctx}; |
| 505 | u32 id = rp.Pop<u32>(); | 505 | const u32 id = rp.Pop<u32>(); |
| 506 | auto transaction = static_cast<TransactionId>(rp.Pop<u32>()); | 506 | const auto transaction = static_cast<TransactionId>(rp.Pop<u32>()); |
| 507 | u32 flags = rp.Pop<u32>(); | 507 | const u32 flags = rp.Pop<u32>(); |
| 508 | LOG_DEBUG(Service_VI, "called, transaction={:X}", static_cast<u32>(transaction)); | 508 | |
| 509 | LOG_DEBUG(Service_VI, "called. id=0x{:08X} transaction={:X}, flags=0x{:08X}", id, | ||
| 510 | static_cast<u32>(transaction), flags); | ||
| 509 | 511 | ||
| 510 | auto buffer_queue = nv_flinger->GetBufferQueue(id); | 512 | auto buffer_queue = nv_flinger->GetBufferQueue(id); |
| 511 | 513 | ||
| @@ -593,9 +595,10 @@ private: | |||
| 593 | 595 | ||
| 594 | void AdjustRefcount(Kernel::HLERequestContext& ctx) { | 596 | void AdjustRefcount(Kernel::HLERequestContext& ctx) { |
| 595 | IPC::RequestParser rp{ctx}; | 597 | IPC::RequestParser rp{ctx}; |
| 596 | u32 id = rp.Pop<u32>(); | 598 | const u32 id = rp.Pop<u32>(); |
| 597 | s32 addval = rp.PopRaw<s32>(); | 599 | const s32 addval = rp.PopRaw<s32>(); |
| 598 | u32 type = rp.Pop<u32>(); | 600 | const u32 type = rp.Pop<u32>(); |
| 601 | |||
| 599 | LOG_WARNING(Service_VI, "(STUBBED) called id={}, addval={:08X}, type={:08X}", id, addval, | 602 | LOG_WARNING(Service_VI, "(STUBBED) called id={}, addval={:08X}, type={:08X}", id, addval, |
| 600 | type); | 603 | type); |
| 601 | 604 | ||
| @@ -605,11 +608,12 @@ private: | |||
| 605 | 608 | ||
| 606 | void GetNativeHandle(Kernel::HLERequestContext& ctx) { | 609 | void GetNativeHandle(Kernel::HLERequestContext& ctx) { |
| 607 | IPC::RequestParser rp{ctx}; | 610 | IPC::RequestParser rp{ctx}; |
| 608 | u32 id = rp.Pop<u32>(); | 611 | const u32 id = rp.Pop<u32>(); |
| 609 | u32 unknown = rp.Pop<u32>(); | 612 | const u32 unknown = rp.Pop<u32>(); |
| 613 | |||
| 610 | LOG_WARNING(Service_VI, "(STUBBED) called id={}, unknown={:08X}", id, unknown); | 614 | LOG_WARNING(Service_VI, "(STUBBED) called id={}, unknown={:08X}", id, unknown); |
| 611 | 615 | ||
| 612 | auto buffer_queue = nv_flinger->GetBufferQueue(id); | 616 | const auto buffer_queue = nv_flinger->GetBufferQueue(id); |
| 613 | 617 | ||
| 614 | // TODO(Subv): Find out what this actually is. | 618 | // TODO(Subv): Find out what this actually is. |
| 615 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 619 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| @@ -674,11 +678,12 @@ public: | |||
| 674 | 678 | ||
| 675 | private: | 679 | private: |
| 676 | void SetLayerZ(Kernel::HLERequestContext& ctx) { | 680 | void SetLayerZ(Kernel::HLERequestContext& ctx) { |
| 677 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 678 | |||
| 679 | IPC::RequestParser rp{ctx}; | 681 | IPC::RequestParser rp{ctx}; |
| 680 | u64 layer_id = rp.Pop<u64>(); | 682 | const u64 layer_id = rp.Pop<u64>(); |
| 681 | u64 z_value = rp.Pop<u64>(); | 683 | const u64 z_value = rp.Pop<u64>(); |
| 684 | |||
| 685 | LOG_WARNING(Service_VI, "(STUBBED) called. layer_id=0x{:016X}, z_value=0x{:016X}", layer_id, | ||
| 686 | z_value); | ||
| 682 | 687 | ||
| 683 | IPC::ResponseBuilder rb{ctx, 2}; | 688 | IPC::ResponseBuilder rb{ctx, 2}; |
| 684 | rb.Push(RESULT_SUCCESS); | 689 | rb.Push(RESULT_SUCCESS); |
| @@ -686,8 +691,9 @@ private: | |||
| 686 | 691 | ||
| 687 | void SetLayerVisibility(Kernel::HLERequestContext& ctx) { | 692 | void SetLayerVisibility(Kernel::HLERequestContext& ctx) { |
| 688 | IPC::RequestParser rp{ctx}; | 693 | IPC::RequestParser rp{ctx}; |
| 689 | u64 layer_id = rp.Pop<u64>(); | 694 | const u64 layer_id = rp.Pop<u64>(); |
| 690 | bool visibility = rp.Pop<bool>(); | 695 | const bool visibility = rp.Pop<bool>(); |
| 696 | |||
| 691 | LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:08X}, visibility={}", layer_id, | 697 | LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:08X}, visibility={}", layer_id, |
| 692 | visibility); | 698 | visibility); |
| 693 | 699 | ||
| @@ -796,25 +802,27 @@ public: | |||
| 796 | 802 | ||
| 797 | private: | 803 | private: |
| 798 | void CloseDisplay(Kernel::HLERequestContext& ctx) { | 804 | void CloseDisplay(Kernel::HLERequestContext& ctx) { |
| 799 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 800 | |||
| 801 | IPC::RequestParser rp{ctx}; | 805 | IPC::RequestParser rp{ctx}; |
| 802 | u64 display = rp.Pop<u64>(); | 806 | const u64 display = rp.Pop<u64>(); |
| 807 | |||
| 808 | LOG_WARNING(Service_VI, "(STUBBED) called. display=0x{:016X}", display); | ||
| 803 | 809 | ||
| 804 | IPC::ResponseBuilder rb{ctx, 2}; | 810 | IPC::ResponseBuilder rb{ctx, 2}; |
| 805 | rb.Push(RESULT_SUCCESS); | 811 | rb.Push(RESULT_SUCCESS); |
| 806 | } | 812 | } |
| 807 | 813 | ||
| 808 | void CreateManagedLayer(Kernel::HLERequestContext& ctx) { | 814 | void CreateManagedLayer(Kernel::HLERequestContext& ctx) { |
| 809 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 810 | |||
| 811 | IPC::RequestParser rp{ctx}; | 815 | IPC::RequestParser rp{ctx}; |
| 812 | u32 unknown = rp.Pop<u32>(); | 816 | const u32 unknown = rp.Pop<u32>(); |
| 813 | rp.Skip(1, false); | 817 | rp.Skip(1, false); |
| 814 | u64 display = rp.Pop<u64>(); | 818 | const u64 display = rp.Pop<u64>(); |
| 815 | u64 aruid = rp.Pop<u64>(); | 819 | const u64 aruid = rp.Pop<u64>(); |
| 816 | 820 | ||
| 817 | u64 layer_id = nv_flinger->CreateLayer(display); | 821 | LOG_WARNING(Service_VI, |
| 822 | "(STUBBED) called. unknown=0x{:08X}, display=0x{:016X}, aruid=0x{:016X}", | ||
| 823 | unknown, display, aruid); | ||
| 824 | |||
| 825 | const u64 layer_id = nv_flinger->CreateLayer(display); | ||
| 818 | 826 | ||
| 819 | IPC::ResponseBuilder rb{ctx, 4}; | 827 | IPC::ResponseBuilder rb{ctx, 4}; |
| 820 | rb.Push(RESULT_SUCCESS); | 828 | rb.Push(RESULT_SUCCESS); |
| @@ -822,11 +830,12 @@ private: | |||
| 822 | } | 830 | } |
| 823 | 831 | ||
| 824 | void AddToLayerStack(Kernel::HLERequestContext& ctx) { | 832 | void AddToLayerStack(Kernel::HLERequestContext& ctx) { |
| 825 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 826 | |||
| 827 | IPC::RequestParser rp{ctx}; | 833 | IPC::RequestParser rp{ctx}; |
| 828 | u32 stack = rp.Pop<u32>(); | 834 | const u32 stack = rp.Pop<u32>(); |
| 829 | u64 layer_id = rp.Pop<u64>(); | 835 | const u64 layer_id = rp.Pop<u64>(); |
| 836 | |||
| 837 | LOG_WARNING(Service_VI, "(STUBBED) called. stack=0x{:08X}, layer_id=0x{:016X}", stack, | ||
| 838 | layer_id); | ||
| 830 | 839 | ||
| 831 | IPC::ResponseBuilder rb{ctx, 2}; | 840 | IPC::ResponseBuilder rb{ctx, 2}; |
| 832 | rb.Push(RESULT_SUCCESS); | 841 | rb.Push(RESULT_SUCCESS); |
| @@ -834,8 +843,9 @@ private: | |||
| 834 | 843 | ||
| 835 | void SetLayerVisibility(Kernel::HLERequestContext& ctx) { | 844 | void SetLayerVisibility(Kernel::HLERequestContext& ctx) { |
| 836 | IPC::RequestParser rp{ctx}; | 845 | IPC::RequestParser rp{ctx}; |
| 837 | u64 layer_id = rp.Pop<u64>(); | 846 | const u64 layer_id = rp.Pop<u64>(); |
| 838 | bool visibility = rp.Pop<bool>(); | 847 | const bool visibility = rp.Pop<bool>(); |
| 848 | |||
| 839 | LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:X}, visibility={}", layer_id, | 849 | LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:X}, visibility={}", layer_id, |
| 840 | visibility); | 850 | visibility); |
| 841 | 851 | ||
| @@ -901,20 +911,20 @@ private: | |||
| 901 | } | 911 | } |
| 902 | 912 | ||
| 903 | void CloseDisplay(Kernel::HLERequestContext& ctx) { | 913 | void CloseDisplay(Kernel::HLERequestContext& ctx) { |
| 904 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 905 | |||
| 906 | IPC::RequestParser rp{ctx}; | 914 | IPC::RequestParser rp{ctx}; |
| 907 | u64 display_id = rp.Pop<u64>(); | 915 | const u64 display_id = rp.Pop<u64>(); |
| 916 | |||
| 917 | LOG_WARNING(Service_VI, "(STUBBED) called. display_id=0x{:016X}", display_id); | ||
| 908 | 918 | ||
| 909 | IPC::ResponseBuilder rb{ctx, 2}; | 919 | IPC::ResponseBuilder rb{ctx, 2}; |
| 910 | rb.Push(RESULT_SUCCESS); | 920 | rb.Push(RESULT_SUCCESS); |
| 911 | } | 921 | } |
| 912 | 922 | ||
| 913 | void GetDisplayResolution(Kernel::HLERequestContext& ctx) { | 923 | void GetDisplayResolution(Kernel::HLERequestContext& ctx) { |
| 914 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 915 | |||
| 916 | IPC::RequestParser rp{ctx}; | 924 | IPC::RequestParser rp{ctx}; |
| 917 | u64 display_id = rp.Pop<u64>(); | 925 | const u64 display_id = rp.Pop<u64>(); |
| 926 | |||
| 927 | LOG_WARNING(Service_VI, "(STUBBED) called. display_id=0x{:016X}", display_id); | ||
| 918 | 928 | ||
| 919 | IPC::ResponseBuilder rb{ctx, 6}; | 929 | IPC::ResponseBuilder rb{ctx, 6}; |
| 920 | rb.Push(RESULT_SUCCESS); | 930 | rb.Push(RESULT_SUCCESS); |
| @@ -933,11 +943,12 @@ private: | |||
| 933 | } | 943 | } |
| 934 | 944 | ||
| 935 | void SetLayerScalingMode(Kernel::HLERequestContext& ctx) { | 945 | void SetLayerScalingMode(Kernel::HLERequestContext& ctx) { |
| 936 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 937 | |||
| 938 | IPC::RequestParser rp{ctx}; | 946 | IPC::RequestParser rp{ctx}; |
| 939 | u32 scaling_mode = rp.Pop<u32>(); | 947 | const u32 scaling_mode = rp.Pop<u32>(); |
| 940 | u64 unknown = rp.Pop<u64>(); | 948 | const u64 unknown = rp.Pop<u64>(); |
| 949 | |||
| 950 | LOG_WARNING(Service_VI, "(STUBBED) called. scaling_mode=0x{:08X}, unknown=0x{:016X}", | ||
| 951 | scaling_mode, unknown); | ||
| 941 | 952 | ||
| 942 | IPC::ResponseBuilder rb{ctx, 2}; | 953 | IPC::ResponseBuilder rb{ctx, 2}; |
| 943 | rb.Push(RESULT_SUCCESS); | 954 | rb.Push(RESULT_SUCCESS); |
| @@ -957,19 +968,19 @@ private: | |||
| 957 | } | 968 | } |
| 958 | 969 | ||
| 959 | void OpenLayer(Kernel::HLERequestContext& ctx) { | 970 | void OpenLayer(Kernel::HLERequestContext& ctx) { |
| 960 | LOG_DEBUG(Service_VI, "called"); | ||
| 961 | |||
| 962 | IPC::RequestParser rp{ctx}; | 971 | IPC::RequestParser rp{ctx}; |
| 963 | auto name_buf = rp.PopRaw<std::array<u8, 0x40>>(); | 972 | const auto name_buf = rp.PopRaw<std::array<u8, 0x40>>(); |
| 964 | auto end = std::find(name_buf.begin(), name_buf.end(), '\0'); | 973 | const auto end = std::find(name_buf.begin(), name_buf.end(), '\0'); |
| 965 | 974 | ||
| 966 | std::string display_name(name_buf.begin(), end); | 975 | const std::string display_name(name_buf.begin(), end); |
| 967 | 976 | ||
| 968 | u64 layer_id = rp.Pop<u64>(); | 977 | const u64 layer_id = rp.Pop<u64>(); |
| 969 | u64 aruid = rp.Pop<u64>(); | 978 | const u64 aruid = rp.Pop<u64>(); |
| 970 | 979 | ||
| 971 | u64 display_id = nv_flinger->OpenDisplay(display_name); | 980 | LOG_DEBUG(Service_VI, "called. layer_id=0x{:016X}, aruid=0x{:016X}", layer_id, aruid); |
| 972 | u32 buffer_queue_id = nv_flinger->GetBufferQueueId(display_id, layer_id); | 981 | |
| 982 | const u64 display_id = nv_flinger->OpenDisplay(display_name); | ||
| 983 | const u32 buffer_queue_id = nv_flinger->GetBufferQueueId(display_id, layer_id); | ||
| 973 | 984 | ||
| 974 | NativeWindow native_window{buffer_queue_id}; | 985 | NativeWindow native_window{buffer_queue_id}; |
| 975 | IPC::ResponseBuilder rb{ctx, 4}; | 986 | IPC::ResponseBuilder rb{ctx, 4}; |
| @@ -978,17 +989,17 @@ private: | |||
| 978 | } | 989 | } |
| 979 | 990 | ||
| 980 | void CreateStrayLayer(Kernel::HLERequestContext& ctx) { | 991 | void CreateStrayLayer(Kernel::HLERequestContext& ctx) { |
| 981 | LOG_DEBUG(Service_VI, "called"); | ||
| 982 | |||
| 983 | IPC::RequestParser rp{ctx}; | 992 | IPC::RequestParser rp{ctx}; |
| 984 | u32 flags = rp.Pop<u32>(); | 993 | const u32 flags = rp.Pop<u32>(); |
| 985 | rp.Pop<u32>(); // padding | 994 | rp.Pop<u32>(); // padding |
| 986 | u64 display_id = rp.Pop<u64>(); | 995 | const u64 display_id = rp.Pop<u64>(); |
| 996 | |||
| 997 | LOG_DEBUG(Service_VI, "called. flags=0x{:08X}, display_id=0x{:016X}", flags, display_id); | ||
| 987 | 998 | ||
| 988 | // TODO(Subv): What's the difference between a Stray and a Managed layer? | 999 | // TODO(Subv): What's the difference between a Stray and a Managed layer? |
| 989 | 1000 | ||
| 990 | u64 layer_id = nv_flinger->CreateLayer(display_id); | 1001 | const u64 layer_id = nv_flinger->CreateLayer(display_id); |
| 991 | u32 buffer_queue_id = nv_flinger->GetBufferQueueId(display_id, layer_id); | 1002 | const u32 buffer_queue_id = nv_flinger->GetBufferQueueId(display_id, layer_id); |
| 992 | 1003 | ||
| 993 | NativeWindow native_window{buffer_queue_id}; | 1004 | NativeWindow native_window{buffer_queue_id}; |
| 994 | IPC::ResponseBuilder rb{ctx, 6}; | 1005 | IPC::ResponseBuilder rb{ctx, 6}; |
| @@ -998,22 +1009,22 @@ private: | |||
| 998 | } | 1009 | } |
| 999 | 1010 | ||
| 1000 | void DestroyStrayLayer(Kernel::HLERequestContext& ctx) { | 1011 | void DestroyStrayLayer(Kernel::HLERequestContext& ctx) { |
| 1001 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 1002 | |||
| 1003 | IPC::RequestParser rp{ctx}; | 1012 | IPC::RequestParser rp{ctx}; |
| 1004 | u64 layer_id = rp.Pop<u64>(); | 1013 | const u64 layer_id = rp.Pop<u64>(); |
| 1014 | |||
| 1015 | LOG_WARNING(Service_VI, "(STUBBED) called. layer_id=0x{:016X}", layer_id); | ||
| 1005 | 1016 | ||
| 1006 | IPC::ResponseBuilder rb{ctx, 2}; | 1017 | IPC::ResponseBuilder rb{ctx, 2}; |
| 1007 | rb.Push(RESULT_SUCCESS); | 1018 | rb.Push(RESULT_SUCCESS); |
| 1008 | } | 1019 | } |
| 1009 | 1020 | ||
| 1010 | void GetDisplayVsyncEvent(Kernel::HLERequestContext& ctx) { | 1021 | void GetDisplayVsyncEvent(Kernel::HLERequestContext& ctx) { |
| 1011 | LOG_WARNING(Service_VI, "(STUBBED) called"); | ||
| 1012 | |||
| 1013 | IPC::RequestParser rp{ctx}; | 1022 | IPC::RequestParser rp{ctx}; |
| 1014 | u64 display_id = rp.Pop<u64>(); | 1023 | const u64 display_id = rp.Pop<u64>(); |
| 1024 | |||
| 1025 | LOG_WARNING(Service_VI, "(STUBBED) called. display_id=0x{:016X}", display_id); | ||
| 1015 | 1026 | ||
| 1016 | auto vsync_event = nv_flinger->GetVsyncEvent(display_id); | 1027 | const auto vsync_event = nv_flinger->GetVsyncEvent(display_id); |
| 1017 | 1028 | ||
| 1018 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 1029 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 1019 | rb.Push(RESULT_SUCCESS); | 1030 | rb.Push(RESULT_SUCCESS); |