Fix a potential GPFIFO submission race (#3378)
The syncpoint maximum value represents the maximum possible syncpt value at a given time, however due to PBs being submitted before max was incremented, for a brief moment of time this is not the case which could lead to invalid behaviour if a game waits on the fence at that specific time.
This commit is contained in:
parent
d03124a992
commit
2073ba2919
1 changed files with 2 additions and 2 deletions
|
@ -429,8 +429,6 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostChannel
|
||||||
Channel.PushHostCommandBuffer(CreateWaitCommandBuffer(header.Fence));
|
Channel.PushHostCommandBuffer(CreateWaitCommandBuffer(header.Fence));
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.PushEntries(entries);
|
|
||||||
|
|
||||||
header.Fence.Id = _channelSyncpoint.Id;
|
header.Fence.Id = _channelSyncpoint.Id;
|
||||||
|
|
||||||
if (header.Flags.HasFlag(SubmitGpfifoFlags.FenceIncrement) || header.Flags.HasFlag(SubmitGpfifoFlags.IncrementWithValue))
|
if (header.Flags.HasFlag(SubmitGpfifoFlags.FenceIncrement) || header.Flags.HasFlag(SubmitGpfifoFlags.IncrementWithValue))
|
||||||
|
@ -449,6 +447,8 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostChannel
|
||||||
header.Fence.Value = _device.System.HostSyncpoint.ReadSyncpointMaxValue(header.Fence.Id);
|
header.Fence.Value = _device.System.HostSyncpoint.ReadSyncpointMaxValue(header.Fence.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Channel.PushEntries(entries);
|
||||||
|
|
||||||
if (header.Flags.HasFlag(SubmitGpfifoFlags.FenceIncrement))
|
if (header.Flags.HasFlag(SubmitGpfifoFlags.FenceIncrement))
|
||||||
{
|
{
|
||||||
Channel.PushHostCommandBuffer(CreateIncrementCommandBuffer(ref header.Fence, header.Flags));
|
Channel.PushHostCommandBuffer(CreateIncrementCommandBuffer(ref header.Fence, header.Flags));
|
||||||
|
|
Loading…
Reference in a new issue