Improve Buffer Textures and flush Image Stores (#2088)

* Improve Buffer Textures and flush Image Stores

Fixes a number of issues with buffer textures:

- Reworked Buffer Textures to create their buffers in the TextureManager, then bind them with the BufferManager later.
  - Fixes an issue where a buffer texture's buffer could be invalidated after it is bound, but before use.
- Fixed width unpacking for large buffer textures. The width is now 32-bit rather than 16.
- Force buffer textures to be rebound whenever any buffer is created, as using the handle id wasn't reliable, and the cost of binding isn't too high.

Fixes vertex explosions and flickering animations in UE4 games.

* Set ImageStore flag... for ImageStore.

* Check the offset and size.
This commit is contained in:
riperiperi 2021-03-08 21:43:39 +00:00 committed by GitHub
parent da283ff3c3
commit 1623ab524f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 154 additions and 30 deletions

View file

@ -30,6 +30,8 @@ namespace Ryujinx.Graphics.OpenGL
internal ResourcePool ResourcePool { get; }
internal int BufferCount { get; private set; }
public string GpuVendor { get; private set; }
public string GpuRenderer { get; private set; }
public string GpuVersion { get; private set; }
@ -52,6 +54,8 @@ namespace Ryujinx.Graphics.OpenGL
public BufferHandle CreateBuffer(int size)
{
BufferCount++;
return Buffer.Create(size);
}
@ -69,7 +73,7 @@ namespace Ryujinx.Graphics.OpenGL
{
if (info.Target == Target.TextureBuffer)
{
return new TextureBuffer(info);
return new TextureBuffer(this, info);
}
else
{