Просмотр исходного кода

Merge pull request #340 from mailwl/vi-update

Service/VI: stub SetLayerVisibility, fix GetDisplayResolution output
bunnei 8 лет назад
Родитель
Сommit
1df3a7710e
1 измененных файлов с 27 добавлено и 7 удалено
  1. 27 7
      src/core/hle/service/vi/vi.cpp

+ 27 - 7
src/core/hle/service/vi/vi.cpp

@@ -582,7 +582,7 @@ public:
             {2203, nullptr, "SetLayerSize"},
             {2204, nullptr, "GetLayerZ"},
             {2205, &ISystemDisplayService::SetLayerZ, "SetLayerZ"},
-            {2207, nullptr, "SetLayerVisibility"},
+            {2207, &ISystemDisplayService::SetLayerVisibility, "SetLayerVisibility"},
             {2209, nullptr, "SetLayerAlpha"},
             {2312, nullptr, "CreateStrayLayer"},
             {2400, nullptr, "OpenIndirectLayer"},
@@ -632,6 +632,16 @@ private:
         IPC::ResponseBuilder rb = rp.MakeBuilder(2, 0, 0);
         rb.Push(RESULT_SUCCESS);
     }
+
+    void SetLayerVisibility(Kernel::HLERequestContext& ctx) {
+        IPC::RequestParser rp{ctx};
+        u64 layer_id = rp.Pop<u64>();
+        bool visibility = rp.Pop<bool>();
+        IPC::ResponseBuilder rb = rp.MakeBuilder(2, 0, 0);
+        rb.Push(RESULT_SUCCESS);
+        LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x%x, visibility=%u", layer_id,
+                    visibility);
+    }
 };
 
 class IManagerDisplayService final : public ServiceFramework<IManagerDisplayService> {
@@ -663,7 +673,7 @@ public:
             {4206, nullptr, "SetDefaultDisplay"},
             {6000, &IManagerDisplayService::AddToLayerStack, "AddToLayerStack"},
             {6001, nullptr, "RemoveFromLayerStack"},
-            {6002, nullptr, "SetLayerVisibility"},
+            {6002, &IManagerDisplayService::SetLayerVisibility, "SetLayerVisibility"},
             {6003, nullptr, "SetLayerConfig"},
             {6004, nullptr, "AttachLayerPresentationTracer"},
             {6005, nullptr, "DetachLayerPresentationTracer"},
@@ -745,6 +755,16 @@ private:
         rb.Push(RESULT_SUCCESS);
     }
 
+    void SetLayerVisibility(Kernel::HLERequestContext& ctx) {
+        IPC::RequestParser rp{ctx};
+        u64 layer_id = rp.Pop<u64>();
+        bool visibility = rp.Pop<bool>();
+        IPC::ResponseBuilder rb = rp.MakeBuilder(2, 0, 0);
+        rb.Push(RESULT_SUCCESS);
+        LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x%x, visibility=%u", layer_id,
+                    visibility);
+    }
+
     std::shared_ptr<NVFlinger::NVFlinger> nv_flinger;
 };
 
@@ -815,15 +835,15 @@ private:
         IPC::RequestParser rp{ctx};
         u64 display_id = rp.Pop<u64>();
 
-        IPC::ResponseBuilder rb = rp.MakeBuilder(4, 0, 0);
+        IPC::ResponseBuilder rb = rp.MakeBuilder(6, 0, 0);
         rb.Push(RESULT_SUCCESS);
 
         if (Settings::values.use_docked_mode) {
-            rb.Push(static_cast<u32>(DisplayResolution::DockedWidth));
-            rb.Push(static_cast<u32>(DisplayResolution::DockedHeight));
+            rb.Push(static_cast<u64>(DisplayResolution::DockedWidth));
+            rb.Push(static_cast<u64>(DisplayResolution::DockedHeight));
         } else {
-            rb.Push(static_cast<u32>(DisplayResolution::UndockedWidth));
-            rb.Push(static_cast<u32>(DisplayResolution::UndockedHeight));
+            rb.Push(static_cast<u64>(DisplayResolution::UndockedWidth));
+            rb.Push(static_cast<u64>(DisplayResolution::UndockedHeight));
         }
     }