IManagerDisplayService.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using Ryujinx.Common.Logging;
  2. namespace Ryujinx.HLE.HOS.Services.Vi.RootService.ApplicationDisplayService
  3. {
  4. class IManagerDisplayService : IpcService
  5. {
  6. private IApplicationDisplayService _applicationDisplayService;
  7. public IManagerDisplayService(IApplicationDisplayService applicationDisplayService)
  8. {
  9. _applicationDisplayService = applicationDisplayService;
  10. }
  11. [CommandHipc(1102)]
  12. // GetDisplayResolution(u64 display_id) -> (u64 width, u64 height)
  13. public ResultCode GetDisplayResolution(ServiceCtx context)
  14. {
  15. ulong displayId = context.RequestData.ReadUInt64();
  16. (ulong width, ulong height) = AndroidSurfaceComposerClient.GetDisplayInfo(context, displayId);
  17. context.ResponseData.Write(width);
  18. context.ResponseData.Write(height);
  19. return ResultCode.Success;
  20. }
  21. [CommandHipc(2010)]
  22. // CreateManagedLayer(u32, u64, nn::applet::AppletResourceUserId) -> u64
  23. public ResultCode CreateManagedLayer(ServiceCtx context)
  24. {
  25. long layerFlags = context.RequestData.ReadInt64();
  26. long displayId = context.RequestData.ReadInt64();
  27. long appletResourceUserId = context.RequestData.ReadInt64();
  28. ulong pid = context.Device.System.AppletState.AppletResourceUserIds.GetData<ulong>((int)appletResourceUserId);
  29. context.Device.System.SurfaceFlinger.CreateLayer(pid, out long layerId);
  30. context.Device.System.SurfaceFlinger.SetRenderLayer(layerId);
  31. context.ResponseData.Write(layerId);
  32. return ResultCode.Success;
  33. }
  34. [CommandHipc(2011)]
  35. // DestroyManagedLayer(u64)
  36. public ResultCode DestroyManagedLayer(ServiceCtx context)
  37. {
  38. long layerId = context.RequestData.ReadInt64();
  39. context.Device.System.SurfaceFlinger.CloseLayer(layerId);
  40. return ResultCode.Success;
  41. }
  42. [CommandHipc(2012)] // 7.0.0+
  43. // CreateStrayLayer(u32, u64) -> (u64, u64, buffer<bytes, 6>)
  44. public ResultCode CreateStrayLayer(ServiceCtx context)
  45. {
  46. return _applicationDisplayService.CreateStrayLayer(context);
  47. }
  48. [CommandHipc(6000)]
  49. // AddToLayerStack(u32, u64)
  50. public ResultCode AddToLayerStack(ServiceCtx context)
  51. {
  52. Logger.Stub?.PrintStub(LogClass.ServiceVi);
  53. return ResultCode.Success;
  54. }
  55. [CommandHipc(6002)]
  56. // SetLayerVisibility(b8, u64)
  57. public ResultCode SetLayerVisibility(ServiceCtx context)
  58. {
  59. Logger.Stub?.PrintStub(LogClass.ServiceVi);
  60. return ResultCode.Success;
  61. }
  62. }
  63. }