diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/TextureStorage.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Vulkan/TextureStorage.cs | 19 |
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) |