Low level graphics API prerequisites (#319)
* Add GalPipelineState and IGalPipeline * Separate UploadVertex call * Add ConstBuffer cache * Move Vertex Assembly into GalPipelineState * Move Uniform binds to GalPipelineState * Move framebuffer flip into a buffer * Rebase * Fix regression * Move clear values from VertexEndGl to ClearBuffers * Rename obscure names O->Old S->New
This commit is contained in:
parent
652238f526
commit
25dd5f4238
20 changed files with 854 additions and 702 deletions
66
Ryujinx.Graphics/Gal/OpenGL/OGLConstBuffer.cs
Normal file
66
Ryujinx.Graphics/Gal/OpenGL/OGLConstBuffer.cs
Normal file
|
@ -0,0 +1,66 @@
|
|||
using OpenTK.Graphics.OpenGL;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.Graphics.Gal.OpenGL
|
||||
{
|
||||
class OGLConstBuffer : IGalConstBuffer
|
||||
{
|
||||
private OGLCachedResource<OGLStreamBuffer> Cache;
|
||||
|
||||
public OGLConstBuffer()
|
||||
{
|
||||
Cache = new OGLCachedResource<OGLStreamBuffer>(DeleteBuffer);
|
||||
}
|
||||
|
||||
public void LockCache()
|
||||
{
|
||||
Cache.Lock();
|
||||
}
|
||||
|
||||
public void UnlockCache()
|
||||
{
|
||||
Cache.Unlock();
|
||||
}
|
||||
|
||||
public void Create(long Key, long Size)
|
||||
{
|
||||
OGLStreamBuffer Buffer = new OGLStreamBuffer(BufferTarget.UniformBuffer, Size);
|
||||
|
||||
Cache.AddOrUpdate(Key, Buffer, Size);
|
||||
}
|
||||
|
||||
public bool IsCached(long Key, long Size)
|
||||
{
|
||||
return Cache.TryGetSize(Key, out long CachedSize) && CachedSize == Size;
|
||||
}
|
||||
|
||||
public void SetData(long Key, long Size, IntPtr HostAddress)
|
||||
{
|
||||
if (!Cache.TryGetValue(Key, out OGLStreamBuffer Buffer))
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
|
||||
Buffer.SetData(Size, HostAddress);
|
||||
}
|
||||
|
||||
public bool TryGetUbo(long Key, out int UboHandle)
|
||||
{
|
||||
if (Cache.TryGetValue(Key, out OGLStreamBuffer Buffer))
|
||||
{
|
||||
UboHandle = Buffer.Handle;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
UboHandle = 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void DeleteBuffer(OGLStreamBuffer Buffer)
|
||||
{
|
||||
Buffer.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue