mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-09-26 20:11:28 +08:00
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:
@@ -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()
|
||||
}
|
||||
|
@@ -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.
|
||||
|
Reference in New Issue
Block a user