aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIsaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com>2023-09-23 18:32:36 -0400
committerGitHub <noreply@github.com>2023-09-23 19:32:36 -0300
commitd9f9bbfaa6b3400a4f33e342e6c290afe796123a (patch)
tree9ff2892f10577aa1edf7aa61493cdbb5ee312657 /src
parentfe9e19d8ccf1823a0891d2df198292e0b0d53132 (diff)
Vulkan: Fix barriers on macOS (#5700)1.1.1022
* 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>
Diffstat (limited to 'src')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/TextureStorage.cs74
1 files changed, 60 insertions, 14 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs b/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs
index e9c2bf1e..5a6216c2 100644
--- a/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs
+++ b/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs
@@ -454,13 +454,36 @@ namespace Ryujinx.Graphics.Vulkan
if (lastReadStage != PipelineStageFlags.None)
{
- TextureView.InsertMemoryBarrier(
- _gd.Api,
- cbs.CommandBuffer,
- _lastReadAccess,
- dstAccessFlags,
- lastReadStage,
- dstStageFlags);
+ // 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(
+ _gd.Api,
+ cbs.CommandBuffer,
+ _lastReadAccess,
+ dstAccessFlags,
+ lastReadStage,
+ dstStageFlags);
+ }
_lastReadAccess = AccessFlags.None;
_lastReadStage = PipelineStageFlags.None;
@@ -474,13 +497,36 @@ namespace Ryujinx.Graphics.Vulkan
if (_lastModificationAccess != AccessFlags.None)
{
- TextureView.InsertMemoryBarrier(
- _gd.Api,
- cbs.CommandBuffer,
- _lastModificationAccess,
- dstAccessFlags,
- _lastModificationStage,
- dstStageFlags);
+ // 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(
+ _gd.Api,
+ cbs.CommandBuffer,
+ _lastModificationAccess,
+ dstAccessFlags,
+ _lastModificationStage,
+ dstStageFlags);
+ }
_lastModificationAccess = AccessFlags.None;
}