From 08332bdc041a594d389b0b732b3c4b5f8573e3fb Mon Sep 17 00:00:00 2001
From: riperiperi <rhy3756547@hotmail.com>
Date: Tue, 20 Oct 2020 22:56:23 +0100
Subject: [PATCH] Ensure storage is set for Buffer Textures when binding an
 Image. (#1627)

---
 Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
index 87b0f444f3..be78c827cc 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs
@@ -290,6 +290,14 @@ namespace Ryujinx.Graphics.Gpu.Image
 
                 ITexture hostTexture = texture?.GetTargetTexture(binding.Target);
 
+                if (hostTexture != null && texture.Info.Target == Target.TextureBuffer)
+                {
+                    // Ensure that the buffer texture is using the correct buffer as storage.
+                    // Buffers are frequently re-created to accomodate larger data, so we need to re-bind
+                    // to ensure we're not using a old buffer that was already deleted.
+                    _context.Methods.BufferManager.SetBufferTextureStorage(hostTexture, texture.Address, texture.Size, _isCompute);
+                }
+
                 if (_imageState[stageIndex][index].Texture != hostTexture || _rebind)
                 {
                     _imageState[stageIndex][index].Texture = hostTexture;