diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2018-08-15 15:59:51 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-15 15:59:51 -0300 |
| commit | c393cdf8e3775bc95850e4d8c8e4c446b286d3b4 (patch) | |
| tree | 25035a244741d2daf3f7d6be8b23153ff061ea15 /Ryujinx.Graphics | |
| parent | 76d95dee05e3c51c18e1799f54cc407e0f633b4e (diff) | |
More flexible memory manager (#307)
* Keep track mapped buffers with fixed offsets
* Started rewriting the memory manager
* Initial support for MapPhysicalMemory and UnmapPhysicalMemory, other tweaks
* MapPhysicalMemory/UnmapPhysicalMemory support, other tweaks
* Rebased
* Optimize the map/unmap physical memory svcs
* Integrate shared font support
* Fix address space reserve alignment
* Some fixes related to gpu memory mapping
* Some cleanup
* Only try uploading const buffers that are really used
* Check if memory region is contiguous
* Rebased
* Add missing count increment on IsRegionModified
* Check for reads/writes outside of the address space, optimize translation with a tail call
Diffstat (limited to 'Ryujinx.Graphics')
| -rw-r--r-- | Ryujinx.Graphics/Gal/IGalShader.cs | 1 | ||||
| -rw-r--r-- | Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs | 2 | ||||
| -rw-r--r-- | Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs | 16 | ||||
| -rw-r--r-- | Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs | 21 |
4 files changed, 26 insertions, 14 deletions
diff --git a/Ryujinx.Graphics/Gal/IGalShader.cs b/Ryujinx.Graphics/Gal/IGalShader.cs index a9bd1381..5174c039 100644 --- a/Ryujinx.Graphics/Gal/IGalShader.cs +++ b/Ryujinx.Graphics/Gal/IGalShader.cs @@ -9,6 +9,7 @@ namespace Ryujinx.Graphics.Gal void Create(IGalMemory Memory, long VpAPos, long Key, GalShaderType Type); + IEnumerable<ShaderDeclInfo> GetConstBufferUsage(long Key); IEnumerable<ShaderDeclInfo> GetTextureUsage(long Key); void EnsureTextureBinding(string UniformName, int Value); diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs index 54f984cd..c9e7f6c3 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLPipeline.cs @@ -279,7 +279,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL { if (Stage != null) { - foreach (ShaderDeclInfo DeclInfo in Stage.UniformUsage) + foreach (ShaderDeclInfo DeclInfo in Stage.ConstBufferUsage) { long Key = New.ConstBufferKeys[(int)Stage.Type][DeclInfo.Cbuf]; diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs index 4792bc5e..9c7b8668 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLShader.cs @@ -72,8 +72,18 @@ namespace Ryujinx.Graphics.Gal.OpenGL return new OGLShaderStage( Type, Program.Code, - Program.Textures, - Program.Uniforms); + Program.Uniforms, + Program.Textures); + } + + public IEnumerable<ShaderDeclInfo> GetConstBufferUsage(long Key) + { + if (Stages.TryGetValue(Key, out OGLShaderStage Stage)) + { + return Stage.ConstBufferUsage; + } + + return Enumerable.Empty<ShaderDeclInfo>(); } public IEnumerable<ShaderDeclInfo> GetTextureUsage(long Key) @@ -224,7 +234,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL { if (Stage != null) { - foreach (ShaderDeclInfo DeclInfo in Stage.UniformUsage) + foreach (ShaderDeclInfo DeclInfo in Stage.ConstBufferUsage) { int BlockIndex = GL.GetUniformBlockIndex(ProgramHandle, DeclInfo.Name); diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs index 731994ce..c4e6a881 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLShaderProgram.cs @@ -1,6 +1,7 @@ using OpenTK.Graphics.OpenGL; using System; using System.Collections.Generic; +using System.Linq; namespace Ryujinx.Graphics.Gal.OpenGL { @@ -23,19 +24,19 @@ namespace Ryujinx.Graphics.Gal.OpenGL public string Code { get; private set; } - public IEnumerable<ShaderDeclInfo> TextureUsage { get; private set; } - public IEnumerable<ShaderDeclInfo> UniformUsage { get; private set; } + public IEnumerable<ShaderDeclInfo> ConstBufferUsage { get; private set; } + public IEnumerable<ShaderDeclInfo> TextureUsage { get; private set; } public OGLShaderStage( - GalShaderType Type, - string Code, - IEnumerable<ShaderDeclInfo> TextureUsage, - IEnumerable<ShaderDeclInfo> UniformUsage) + GalShaderType Type, + string Code, + IEnumerable<ShaderDeclInfo> ConstBufferUsage, + IEnumerable<ShaderDeclInfo> TextureUsage) { - this.Type = Type; - this.Code = Code; - this.TextureUsage = TextureUsage; - this.UniformUsage = UniformUsage; + this.Type = Type; + this.Code = Code; + this.ConstBufferUsage = ConstBufferUsage; + this.TextureUsage = TextureUsage; } public void Compile() |
