diff --git a/src/ARMeilleure/Translation/IntervalTree.cs b/src/ARMeilleure/Translation/IntervalTree.cs index afd89b93..da29d6a6 100644 --- a/src/ARMeilleure/Translation/IntervalTree.cs +++ b/src/ARMeilleure/Translation/IntervalTree.cs @@ -189,7 +189,7 @@ namespace ARMeilleure.Translation { if (start.CompareTo(node.End) < 0) { - if (overlaps.Length >= overlapCount) + if (overlaps.Length <= overlapCount) { Array.Resize(ref overlaps, overlapCount + ArrayGrowthSize); } diff --git a/src/Ryujinx.Common/Collections/IntervalTree.cs b/src/Ryujinx.Common/Collections/IntervalTree.cs index 2ea260a5..baab579e 100644 --- a/src/Ryujinx.Common/Collections/IntervalTree.cs +++ b/src/Ryujinx.Common/Collections/IntervalTree.cs @@ -192,7 +192,7 @@ namespace Ryujinx.Common.Collections { if (start.CompareTo(overlap.End) < 0) { - if (overlaps.Length >= overlapCount) + if (overlaps.Length <= overlapCount) { Array.Resize(ref overlaps, overlapCount + ArrayGrowthSize); } diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs index 55000ac6..5048ccca 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs @@ -696,11 +696,14 @@ namespace Ryujinx.Graphics.Gpu.Image } // Find view compatible matches. - int overlapsCount; + int overlapsCount = 0; - lock (_textures) + if (info.Target != Target.TextureBuffer) { - overlapsCount = _textures.FindOverlaps(range.Value, ref _textureOverlaps); + lock (_textures) + { + overlapsCount = _textures.FindOverlaps(range.Value, ref _textureOverlaps); + } } if (_overlapInfo.Length != _textureOverlaps.Length) diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs index be33247c..746a95ff 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs @@ -79,6 +79,7 @@ namespace Ryujinx.Graphics.Gpu.Image private int[] _allOffsets; private int[] _sliceSizes; private readonly bool _is3D; + private readonly bool _isBuffer; private bool _hasMipViews; private bool _hasLayerViews; private readonly int _layers; @@ -118,6 +119,7 @@ namespace Ryujinx.Graphics.Gpu.Image _physicalMemory = physicalMemory; _is3D = storage.Info.Target == Target.Texture3D; + _isBuffer = storage.Info.Target == Target.TextureBuffer; _layers = storage.Info.GetSlices(); _levels = storage.Info.Levels; @@ -794,7 +796,11 @@ namespace Ryujinx.Graphics.Gpu.Image int targetLayerHandles = _hasLayerViews ? slices : 1; int targetLevelHandles = _hasMipViews ? levels : 1; - if (_is3D) + if (_isBuffer) + { + return; + } + else if (_is3D) { // Future mip levels come after all layers of the last mip level. Each mipmap has less layers (depth) than the last. @@ -1327,7 +1333,11 @@ namespace Ryujinx.Graphics.Gpu.Image { TextureGroupHandle[] handles; - if (!(_hasMipViews || _hasLayerViews)) + if (_isBuffer) + { + handles = Array.Empty(); + } + else if (!(_hasMipViews || _hasLayerViews)) { // Single dirty region. var cpuRegionHandles = new RegionHandle[TextureRange.Count];