Revert "internal/graphicsdriver/metal: add in-flight semaphore"

This reverts commit db9ca28598.

Reason: This didn't seem to change the situation.

Updates #3278
This commit is contained in:
Hajime Hoshi
2025-08-25 18:14:10 +09:00
parent 3dc1c8b02b
commit aa4c2e7267
2 changed files with 1 additions and 31 deletions

View File

@@ -15,7 +15,6 @@
package metal
import (
"context"
"fmt"
"image"
"math"
@@ -24,7 +23,6 @@ import (
"unsafe"
"github.com/ebitengine/purego/objc"
"golang.org/x/sync/semaphore"
"github.com/hajimehoshi/ebiten/v2/internal/cocoa"
"github.com/hajimehoshi/ebiten/v2/internal/graphics"
@@ -46,9 +44,6 @@ type Graphics struct {
rce mtl.RenderCommandEncoder
dsss map[stencilMode]mtl.DepthStencilState
cbCompletedBlock objc.Block
inFlightSemaphore *semaphore.Weighted
screenDrawable ca.MetalDrawable
buffers map[mtl.CommandBuffer][]mtl.Buffer
@@ -108,8 +103,7 @@ func NewGraphics(colorSpace graphicsdriver.ColorSpace) (graphicsdriver.Graphics,
}
g := &Graphics{
colorSpace: colorSpace,
inFlightSemaphore: semaphore.NewWeighted(maximumDrawableCount),
colorSpace: colorSpace,
}
if runtime.GOOS != "ios" {
@@ -119,11 +113,6 @@ func NewGraphics(colorSpace graphicsdriver.ColorSpace) (graphicsdriver.Graphics,
return nil, err
}
}
g.cbCompletedBlock = objc.NewBlock(func(self objc.Block, _ objc.ID) {
g.inFlightSemaphore.Release(1)
})
return g, nil
}
@@ -839,25 +828,14 @@ func (i *Image) mtlTexture() mtl.Texture {
if i.screen {
g := i.graphics
if g.screenDrawable == (ca.MetalDrawable{}) {
// Wait for the inflight semaphore to be available.
_ = g.inFlightSemaphore.Acquire(context.Background(), 1)
i.graphics.view.waitForDisplayLinkOutputCallback()
drawable := g.view.nextDrawable()
if drawable == (ca.MetalDrawable{}) {
g.inFlightSemaphore.Release(1)
return mtl.Texture{}
}
g.screenDrawable = drawable
// After nextDrawable, it is expected some command buffers are completed.
g.gcBuffers()
// Set the completed handler to release the semaphore when the command buffer is completed.
if g.cb == (mtl.CommandBuffer{}) {
g.cb = g.cq.CommandBuffer()
}
g.cb.AddCompletedHandler(g.cbCompletedBlock)
}
return g.screenDrawable.Texture()
}

View File

@@ -563,7 +563,6 @@ var (
sel_replaceRegion_mipmapLevel_withBytes_bytesPerRow = objc.RegisterName("replaceRegion:mipmapLevel:withBytes:bytesPerRow:")
sel_getBytes_bytesPerRow_fromRegion_mipmapLevel = objc.RegisterName("getBytes:bytesPerRow:fromRegion:mipmapLevel:")
sel_respondsToSelector = objc.RegisterName("respondsToSelector:")
sel_addCompletedHandler = objc.RegisterName("addCompletedHandler:")
)
// CreateSystemDefaultDevice returns the preferred system default Metal device.
@@ -844,13 +843,6 @@ func (cb CommandBuffer) WaitUntilScheduled() {
cb.commandBuffer.Send(sel_waitUntilScheduled)
}
// AddCompletedHandler registers a completion handler the GPU device calls immediately after the GPU finishes running the commands in the command buffer.
//
// Reference: https://developer.apple.com/documentation/metal/mtlcommandbuffer/addcompletedhandler(_:)
func (cb CommandBuffer) AddCompletedHandler(block objc.Block) {
cb.commandBuffer.Send(sel_addCompletedHandler, block)
}
// RenderCommandEncoderWithDescriptor creates a render command encoder from a descriptor.
//
// Reference: https://developer.apple.com/documentation/metal/mtlcommandbuffer/1442999-rendercommandencoderwithdescript?language=objc.