Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b1bd6a50b5 | ||
|
70895bdb04 | ||
|
830cbf91bb |
@@ -597,6 +597,8 @@ namespace Ryujinx.Graphics.OpenGL
|
||||
GL.EndTransformFeedback();
|
||||
}
|
||||
|
||||
GL.ClipControl(ClipOrigin.UpperLeft, ClipDepthMode.NegativeOneToOne);
|
||||
|
||||
_drawTexture.Draw(
|
||||
view,
|
||||
samp,
|
||||
@@ -627,6 +629,8 @@ namespace Ryujinx.Graphics.OpenGL
|
||||
{
|
||||
GL.BeginTransformFeedback(_tfTopology);
|
||||
}
|
||||
|
||||
RestoreClipControl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -735,11 +735,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
|
||||
ulong argsPtr,
|
||||
ulong stackTop,
|
||||
int priority,
|
||||
int cpuCore)
|
||||
int cpuCore,
|
||||
ThreadStart customThreadStart = null)
|
||||
{
|
||||
lock (_processLock)
|
||||
{
|
||||
return thread.Initialize(entrypoint, argsPtr, stackTop, priority, cpuCore, this, ThreadType.User, null);
|
||||
return thread.Initialize(entrypoint, argsPtr, stackTop, priority, cpuCore, this, ThreadType.User, customThreadStart);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -2350,6 +2350,18 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
||||
[PointerSized] ulong stackTop,
|
||||
int priority,
|
||||
int cpuCore)
|
||||
{
|
||||
return CreateThread(out handle, entrypoint, argsPtr, stackTop, priority, cpuCore, null);
|
||||
}
|
||||
|
||||
public KernelResult CreateThread(
|
||||
out int handle,
|
||||
ulong entrypoint,
|
||||
ulong argsPtr,
|
||||
ulong stackTop,
|
||||
int priority,
|
||||
int cpuCore,
|
||||
ThreadStart customThreadStart)
|
||||
{
|
||||
handle = 0;
|
||||
|
||||
@@ -2386,7 +2398,8 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
||||
argsPtr,
|
||||
stackTop,
|
||||
priority,
|
||||
cpuCore);
|
||||
cpuCore,
|
||||
customThreadStart);
|
||||
|
||||
if (result == KernelResult.Success)
|
||||
{
|
||||
|
@@ -1,3 +1,4 @@
|
||||
using Ryujinx.Common.Logging;
|
||||
using Ryujinx.HLE.HOS.Ipc;
|
||||
using Ryujinx.HLE.HOS.Kernel;
|
||||
using Ryujinx.HLE.HOS.Kernel.Common;
|
||||
@@ -38,15 +39,15 @@ namespace Ryujinx.HLE.HOS.Services
|
||||
private readonly Dictionary<int, Func<IpcService>> _ports = new Dictionary<int, Func<IpcService>>();
|
||||
|
||||
public ManualResetEvent InitDone { get; }
|
||||
public Func<IpcService> SmObjectFactory { get; }
|
||||
public string Name { get; }
|
||||
public Func<IpcService> SmObjectFactory { get; }
|
||||
|
||||
public ServerBase(KernelContext context, string name, Func<IpcService> smObjectFactory = null)
|
||||
{
|
||||
InitDone = new ManualResetEvent(false);
|
||||
_context = context;
|
||||
Name = name;
|
||||
SmObjectFactory = smObjectFactory;
|
||||
_context = context;
|
||||
|
||||
const ProcessCreationFlags flags =
|
||||
ProcessCreationFlags.EnableAslr |
|
||||
@@ -56,7 +57,7 @@ namespace Ryujinx.HLE.HOS.Services
|
||||
|
||||
ProcessCreationInfo creationInfo = new ProcessCreationInfo("Service", 1, 0, 0x8000000, 1, flags, 0, 0);
|
||||
|
||||
KernelStatic.StartInitialProcess(context, creationInfo, DefaultCapabilities, 44, ServerLoop);
|
||||
KernelStatic.StartInitialProcess(context, creationInfo, DefaultCapabilities, 44, Main);
|
||||
}
|
||||
|
||||
private void AddPort(int serverPortHandle, Func<IpcService> objectFactory)
|
||||
@@ -80,6 +81,11 @@ namespace Ryujinx.HLE.HOS.Services
|
||||
_sessions.Add(serverSessionHandle, obj);
|
||||
}
|
||||
|
||||
private void Main()
|
||||
{
|
||||
ServerLoop();
|
||||
}
|
||||
|
||||
private void ServerLoop()
|
||||
{
|
||||
_selfProcess = KernelStatic.GetCurrentProcess();
|
||||
|
@@ -8,7 +8,6 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||
{
|
||||
private ulong _value;
|
||||
private readonly EventFdFlags _flags;
|
||||
private AutoResetEvent _event;
|
||||
|
||||
private object _lock = new object();
|
||||
|
||||
@@ -19,9 +18,13 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||
|
||||
public EventFileDescriptor(ulong value, EventFdFlags flags)
|
||||
{
|
||||
// FIXME: We should support blocking operations.
|
||||
// Right now they can't be supported because it would cause the
|
||||
// service to lock up as we only have one thread processing requests.
|
||||
flags |= EventFdFlags.NonBlocking;
|
||||
|
||||
_value = value;
|
||||
_flags = flags;
|
||||
_event = new AutoResetEvent(false);
|
||||
|
||||
WriteEvent = new ManualResetEvent(true);
|
||||
ReadEvent = new ManualResetEvent(true);
|
||||
@@ -31,7 +34,6 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_event.Dispose();
|
||||
WriteEvent.Dispose();
|
||||
ReadEvent.Dispose();
|
||||
}
|
||||
@@ -57,7 +59,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||
{
|
||||
while (_value == 0)
|
||||
{
|
||||
_event.WaitOne();
|
||||
Monitor.Wait(_lock);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -106,7 +108,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||
{
|
||||
if (Blocking)
|
||||
{
|
||||
_event.WaitOne();
|
||||
Monitor.Wait(_lock);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -119,7 +121,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
||||
writeSize = sizeof(ulong);
|
||||
|
||||
_value += count;
|
||||
_event.Set();
|
||||
Monitor.Pulse(_lock);
|
||||
|
||||
WriteEvent.Set();
|
||||
|
||||
|
Reference in New Issue
Block a user