mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-10-05 07:57:10 +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
|
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()
|
||||||
}
|
}
|
||||||
|
@@ -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.
|
||||||
|
Reference in New Issue
Block a user