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

View File

@@ -563,7 +563,6 @@ var (
sel_replaceRegion_mipmapLevel_withBytes_bytesPerRow = objc.RegisterName("replaceRegion:mipmapLevel:withBytes:bytesPerRow:") sel_replaceRegion_mipmapLevel_withBytes_bytesPerRow = objc.RegisterName("replaceRegion:mipmapLevel:withBytes:bytesPerRow:")
sel_getBytes_bytesPerRow_fromRegion_mipmapLevel = objc.RegisterName("getBytes:bytesPerRow:fromRegion:mipmapLevel:") sel_getBytes_bytesPerRow_fromRegion_mipmapLevel = objc.RegisterName("getBytes:bytesPerRow:fromRegion:mipmapLevel:")
sel_respondsToSelector = objc.RegisterName("respondsToSelector:") sel_respondsToSelector = objc.RegisterName("respondsToSelector:")
sel_addCompletedHandler = objc.RegisterName("addCompletedHandler:")
) )
// CreateSystemDefaultDevice returns the preferred system default Metal device. // CreateSystemDefaultDevice returns the preferred system default Metal device.
@@ -844,13 +843,6 @@ func (cb CommandBuffer) WaitUntilScheduled() {
cb.commandBuffer.Send(sel_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. // RenderCommandEncoderWithDescriptor creates a render command encoder from a descriptor.
// //
// Reference: https://developer.apple.com/documentation/metal/mtlcommandbuffer/1442999-rendercommandencoderwithdescript?language=objc. // Reference: https://developer.apple.com/documentation/metal/mtlcommandbuffer/1442999-rendercommandencoderwithdescript?language=objc.