Vulkan: Fix barriers on macOS (#5700)
* Use old method on macOS * gdk suggestions * Update src/Ryujinx.Graphics.Vulkan/TextureStorage.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> * Update src/Ryujinx.Graphics.Vulkan/TextureStorage.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> --------- Co-authored-by: gdkchan <gab.dark.100@gmail.com>
This commit is contained in:
parent
fe9e19d8cc
commit
d9f9bbfaa6
1 changed files with 60 additions and 14 deletions
|
@ -453,6 +453,28 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastReadStage != PipelineStageFlags.None)
|
if (lastReadStage != PipelineStageFlags.None)
|
||||||
|
{
|
||||||
|
// This would result in a validation error, but is
|
||||||
|
// required on MoltenVK as the generic barrier results in
|
||||||
|
// severe texture flickering in some scenarios.
|
||||||
|
if (_gd.IsMoltenVk)
|
||||||
|
{
|
||||||
|
ImageAspectFlags aspectFlags = Info.Format.ConvertAspectFlags();
|
||||||
|
TextureView.InsertImageBarrier(
|
||||||
|
_gd.Api,
|
||||||
|
cbs.CommandBuffer,
|
||||||
|
_imageAuto.Get(cbs).Value,
|
||||||
|
_lastReadAccess,
|
||||||
|
dstAccessFlags,
|
||||||
|
_lastReadStage,
|
||||||
|
dstStageFlags,
|
||||||
|
aspectFlags,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
_info.GetLayers(),
|
||||||
|
_info.Levels);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
TextureView.InsertMemoryBarrier(
|
TextureView.InsertMemoryBarrier(
|
||||||
_gd.Api,
|
_gd.Api,
|
||||||
|
@ -461,6 +483,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
dstAccessFlags,
|
dstAccessFlags,
|
||||||
lastReadStage,
|
lastReadStage,
|
||||||
dstStageFlags);
|
dstStageFlags);
|
||||||
|
}
|
||||||
|
|
||||||
_lastReadAccess = AccessFlags.None;
|
_lastReadAccess = AccessFlags.None;
|
||||||
_lastReadStage = PipelineStageFlags.None;
|
_lastReadStage = PipelineStageFlags.None;
|
||||||
|
@ -473,6 +496,28 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
_lastReadStage |= dstStageFlags;
|
_lastReadStage |= dstStageFlags;
|
||||||
|
|
||||||
if (_lastModificationAccess != AccessFlags.None)
|
if (_lastModificationAccess != AccessFlags.None)
|
||||||
|
{
|
||||||
|
// This would result in a validation error, but is
|
||||||
|
// required on MoltenVK as the generic barrier results in
|
||||||
|
// severe texture flickering in some scenarios.
|
||||||
|
if (_gd.IsMoltenVk)
|
||||||
|
{
|
||||||
|
ImageAspectFlags aspectFlags = Info.Format.ConvertAspectFlags();
|
||||||
|
TextureView.InsertImageBarrier(
|
||||||
|
_gd.Api,
|
||||||
|
cbs.CommandBuffer,
|
||||||
|
_imageAuto.Get(cbs).Value,
|
||||||
|
_lastModificationAccess,
|
||||||
|
dstAccessFlags,
|
||||||
|
_lastModificationStage,
|
||||||
|
dstStageFlags,
|
||||||
|
aspectFlags,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
_info.GetLayers(),
|
||||||
|
_info.Levels);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
TextureView.InsertMemoryBarrier(
|
TextureView.InsertMemoryBarrier(
|
||||||
_gd.Api,
|
_gd.Api,
|
||||||
|
@ -481,6 +526,7 @@ namespace Ryujinx.Graphics.Vulkan
|
||||||
dstAccessFlags,
|
dstAccessFlags,
|
||||||
_lastModificationStage,
|
_lastModificationStage,
|
||||||
dstStageFlags);
|
dstStageFlags);
|
||||||
|
}
|
||||||
|
|
||||||
_lastModificationAccess = AccessFlags.None;
|
_lastModificationAccess = AccessFlags.None;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue