Use GetBufferType0x21 on TransactParcelAuto aswell

This commit is contained in:
gdkchan 2018-06-02 20:40:26 -03:00
parent 250e2084f4
commit e7efee7909
3 changed files with 14 additions and 10 deletions

View File

@ -176,12 +176,16 @@ namespace Ryujinx.Core.OsHle.Ipc
public (long Position, long Size) GetBufferType0x21()
{
if (PtrBuff.Count > 0 && PtrBuff[0].Position != 0 && PtrBuff[0].Size != 0)
if (PtrBuff.Count != 0 &&
PtrBuff[0].Position != 0 &&
PtrBuff[0].Size != 0)
{
return (PtrBuff[0].Position, PtrBuff[0].Size);
}
if (SendBuff.Count > 0 && SendBuff[0].Position != 0 && SendBuff[0].Size != 0)
if (SendBuff.Count != 0 &&
SendBuff[0].Position != 0 &&
SendBuff[0].Size != 0)
{
return (SendBuff[0].Position, SendBuff[0].Size);
}
@ -191,12 +195,16 @@ namespace Ryujinx.Core.OsHle.Ipc
public (long Position, long Size) GetBufferType0x22()
{
if (RecvListBuff.Count > 0 && RecvListBuff[0].Position != 0 && RecvListBuff[0].Size != 0)
if (RecvListBuff.Count != 0 &&
RecvListBuff[0].Position != 0 &&
RecvListBuff[0].Size != 0)
{
return (RecvListBuff[0].Position, RecvListBuff[0].Size);
}
if (ReceiveBuff.Count > 0 && ReceiveBuff[0].Position != 0 && ReceiveBuff[0].Size != 0)
if (ReceiveBuff.Count != 0 &&
ReceiveBuff[0].Position != 0 &&
ReceiveBuff[0].Size != 0)
{
return (ReceiveBuff[0].Position, ReceiveBuff[0].Size);
}

View File

@ -48,16 +48,12 @@ namespace Ryujinx.Core.OsHle.Services.Vi
return Flinger.ProcessParcelRequest(Context, Data, Code);
}
//TransactParcelAuto(i32, u32, u32, buffer<unknown, 0x21, 0>) -> buffer<unknown, 0x22, 0>
//Buffer C (PtrBuff) and X (ReceiveListBuff) can be used here...
//But they are all null during all my tests.
public long TransactParcelAuto(ServiceCtx Context)
{
int Id = Context.RequestData.ReadInt32();
int Code = Context.RequestData.ReadInt32();
long DataPos = Context.Request.SendBuff[0].Position;
long DataSize = Context.Request.SendBuff[0].Size;
(long DataPos, long DataSize) = Context.Request.GetBufferType0x21();
byte[] Data = AMemoryHelper.ReadBytes(Context.Memory, DataPos, DataSize);