mac/vulkan: workaround for MoltenVK problem that causes flicker

MoltenVK itself tries to work around a supposedly Metal problem that
itself causes flicker, black screens or broken rendering. it sets the
drawableSize to 1x1 to forcefully complete the presentation. though if
1x1 resolution frame is presented it causes a visual flicker or rather
a solid coloured frame. it causes even more problems since sometimes it
does not reset the drawableSize to the proper resolution and keeps
rendering everything in 1x1.

work around this workaround by discarding drawableSize that are <=1 in
any direction.

Fixes #13505
This commit is contained in:
der richter 2024-03-06 21:24:13 +01:00 committed by Jan Ekström
parent 665a472098
commit 6016423427
1 changed files with 11 additions and 0 deletions

View File

@ -20,6 +20,17 @@ import Cocoa
class MetalLayer: CAMetalLayer {
unowned var common: MacCommon
// workaround for a MoltenVK workaround that sets the drawableSize to 1x1 to forcefully complete
// the presentation, this causes flicker and the drawableSize possibly staying at 1x1
override var drawableSize: CGSize {
get { return super.drawableSize }
set {
if Int(newValue.width) > 1 && Int(newValue.height) > 1 {
super.drawableSize = newValue
}
}
}
init(common com: MacCommon) {
common = com
super.init()