diff --git a/Ryujinx.Graphics.GAL/IPipeline.cs b/Ryujinx.Graphics.GAL/IPipeline.cs index 41e35dd4..1a5f1cf0 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 31769f5a..d9e7582b 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 a89fc379..730ff40a 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 e308becf..c2a42370 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)