Surface Flinger: Fix an oversight when closing a layer (#2192)

* Surface Flinger: Fix an oversight when closing a layer

As the title say.
I also took the liberty of changing the logic on how we select the
current layer being rendered to make it more explicit when opening and
creating layers.

NOTE: Found by Ac_k.

* check for RenderLayerId and not the dictionary size

This fix a possible race condition between the time you create a layer and set the one currently used for rendering
This commit is contained in:
Mary 2021-04-13 02:56:16 +02:00 committed by GitHub
parent 5cb83293bc
commit 73881fad19
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 9 deletions

View file

@ -126,6 +126,8 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
IBinder producer = context.Device.System.SurfaceFlinger.OpenLayer(context.Request.HandleDesc.PId, layerId);
context.Device.System.SurfaceFlinger.SetRenderLayer(layerId);
Parcel parcel = new Parcel(0x28, 0x4);
parcel.WriteObject(producer, "dispdrv\0");
@ -164,6 +166,8 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService
IBinder producer = context.Device.System.SurfaceFlinger.CreateLayer(0, out long layerId);
context.Device.System.SurfaceFlinger.SetRenderLayer(layerId);
Parcel parcel = new Parcel(0x28, 0x4);
parcel.WriteObject(producer, "dispdrv\0");