From f373f870f769ef65c435aa307dc3fa1be6dc6fae Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sat, 1 Feb 2020 20:19:46 -0300 Subject: [PATCH] Support configurable point size (#916) --- Ryujinx.Graphics.GAL/IPipeline.cs | 2 ++ Ryujinx.Graphics.Gpu/Engine/Methods.cs | 16 ++++++++++++++++ Ryujinx.Graphics.Gpu/State/MethodOffset.cs | 1 + Ryujinx.Graphics.OpenGL/Pipeline.cs | 5 +++++ 4 files changed, 24 insertions(+) diff --git a/Ryujinx.Graphics.GAL/IPipeline.cs b/Ryujinx.Graphics.GAL/IPipeline.cs index 41e35dd40..1a5f1cf02 100644 --- a/Ryujinx.Graphics.GAL/IPipeline.cs +++ b/Ryujinx.Graphics.GAL/IPipeline.cs @@ -42,6 +42,8 @@ namespace Ryujinx.Graphics.GAL void SetImage(int index, ShaderStage stage, ITexture texture); + void SetPointSize(float size); + void SetPrimitiveRestart(bool enable, int index); void SetPrimitiveTopology(PrimitiveTopology topology); diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs index 31769f5a2..d9e7582b7 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs @@ -161,6 +161,11 @@ namespace Ryujinx.Graphics.Gpu.Engine UpdateVertexAttribState(state); } + if (state.QueryModified(MethodOffset.PointSize)) + { + UpdatePointSizeState(state); + } + if (state.QueryModified(MethodOffset.PrimitiveRestartState)) { UpdatePrimitiveRestartState(state); @@ -507,6 +512,17 @@ namespace Ryujinx.Graphics.Gpu.Engine _context.Renderer.Pipeline.SetVertexAttribs(vertexAttribs); } + /// + /// Updates host point size based on guest GPU state. + /// + /// Current GPU state + private void UpdatePointSizeState(GpuState state) + { + float size = state.Get(MethodOffset.PointSize); + + _context.Renderer.Pipeline.SetPointSize(size); + } + /// /// Updates host primitive restart based on guest GPU state. /// diff --git a/Ryujinx.Graphics.Gpu/State/MethodOffset.cs b/Ryujinx.Graphics.Gpu/State/MethodOffset.cs index a89fc3797..730ff40af 100644 --- a/Ryujinx.Graphics.Gpu/State/MethodOffset.cs +++ b/Ryujinx.Graphics.Gpu/State/MethodOffset.cs @@ -53,6 +53,7 @@ namespace Ryujinx.Graphics.Gpu.State YControl = 0x4eb, FirstVertex = 0x50d, FirstInstance = 0x50e, + PointSize = 0x546, ResetCounter = 0x54c, RtDepthStencilEnable = 0x54e, ConditionState = 0x554, diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs index e308becfe..c2a42370d 100644 --- a/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -601,6 +601,11 @@ namespace Ryujinx.Graphics.OpenGL _vertexArray.SetIndexBuffer((Buffer)buffer.Buffer); } + public void SetPointSize(float size) + { + GL.PointSize(size); + } + public void SetPrimitiveRestart(bool enable, int index) { if (!enable)