aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/TextureStorage.cs')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/TextureStorage.cs19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs b/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs
index 1aaf2fbbe..f36db68de 100644
--- a/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs
+++ b/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs
@@ -38,6 +38,8 @@ namespace Ryujinx.Graphics.Vulkan
38 38
39 public TextureCreateInfo Info => _info; 39 public TextureCreateInfo Info => _info;
40 40
41 public bool Disposed { get; private set; }
42
41 private readonly Image _image; 43 private readonly Image _image;
42 private readonly Auto<DisposableImage> _imageAuto; 44 private readonly Auto<DisposableImage> _imageAuto;
43 private readonly Auto<MemoryAllocation> _allocationAuto; 45 private readonly Auto<MemoryAllocation> _allocationAuto;
@@ -433,6 +435,17 @@ namespace Ryujinx.Graphics.Vulkan
433 return FormatCapabilities.IsD24S8(Info.Format) && VkFormat == VkFormat.D32SfloatS8Uint; 435 return FormatCapabilities.IsD24S8(Info.Format) && VkFormat == VkFormat.D32SfloatS8Uint;
434 } 436 }
435 437
438 public void AddStoreOpUsage(bool depthStencil)
439 {
440 _lastModificationStage = depthStencil ?
441 PipelineStageFlags.LateFragmentTestsBit :
442 PipelineStageFlags.ColorAttachmentOutputBit;
443
444 _lastModificationAccess = depthStencil ?
445 AccessFlags.DepthStencilAttachmentWriteBit :
446 AccessFlags.ColorAttachmentWriteBit;
447 }
448
436 public void QueueLoadOpBarrier(CommandBufferScoped cbs, bool depthStencil) 449 public void QueueLoadOpBarrier(CommandBufferScoped cbs, bool depthStencil)
437 { 450 {
438 PipelineStageFlags srcStageFlags = _lastReadStage | _lastModificationStage; 451 PipelineStageFlags srcStageFlags = _lastReadStage | _lastModificationStage;
@@ -458,7 +471,7 @@ namespace Ryujinx.Graphics.Vulkan
458 _info.GetLayers(), 471 _info.GetLayers(),
459 _info.Levels); 472 _info.Levels);
460 473
461 _gd.Barriers.QueueBarrier(barrier, srcStageFlags, dstStageFlags); 474 _gd.Barriers.QueueBarrier(barrier, this, srcStageFlags, dstStageFlags);
462 475
463 _lastReadStage = PipelineStageFlags.None; 476 _lastReadStage = PipelineStageFlags.None;
464 _lastReadAccess = AccessFlags.None; 477 _lastReadAccess = AccessFlags.None;
@@ -491,7 +504,7 @@ namespace Ryujinx.Graphics.Vulkan
491 _info.GetLayers(), 504 _info.GetLayers(),
492 _info.Levels); 505 _info.Levels);
493 506
494 _gd.Barriers.QueueBarrier(barrier, _lastModificationStage, dstStageFlags); 507 _gd.Barriers.QueueBarrier(barrier, this, _lastModificationStage, dstStageFlags);
495 508
496 _lastModificationAccess = AccessFlags.None; 509 _lastModificationAccess = AccessFlags.None;
497 } 510 }
@@ -514,6 +527,8 @@ namespace Ryujinx.Graphics.Vulkan
514 527
515 public void Dispose() 528 public void Dispose()
516 { 529 {
530 Disposed = true;
531
517 if (_aliasedStorages != null) 532 if (_aliasedStorages != null)
518 { 533 {
519 foreach (var storage in _aliasedStorages.Values) 534 foreach (var storage in _aliasedStorages.Values)