diff options
Diffstat (limited to 'Ryujinx.Graphics.Gpu')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Constants.cs | 2 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/Methods.cs | 15 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/State/GpuState.cs | 3 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/State/GpuStateTable.cs | 6 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/State/MethodOffset.cs | 1 |
5 files changed, 23 insertions, 4 deletions
diff --git a/Ryujinx.Graphics.Gpu/Constants.cs b/Ryujinx.Graphics.Gpu/Constants.cs index cc476654..3175ebd2 100644 --- a/Ryujinx.Graphics.Gpu/Constants.cs +++ b/Ryujinx.Graphics.Gpu/Constants.cs @@ -53,6 +53,6 @@ namespace Ryujinx.Graphics.Gpu /// <summary> /// Maximum number of viewports. /// </summary> - public const int TotalViewports = 8; + public const int TotalViewports = 16; } }
\ No newline at end of file diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs index 18720440..50913801 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs @@ -108,6 +108,11 @@ namespace Ryujinx.Graphics.Gpu.Engine UpdateShaderState(state); } + if (state.QueryModified(MethodOffset.RasterizeEnable)) + { + UpdateRasterizerState(state); + } + if (state.QueryModified(MethodOffset.RtColorState, MethodOffset.RtDepthStencilState, MethodOffset.RtControl, @@ -212,6 +217,16 @@ namespace Ryujinx.Graphics.Gpu.Engine } /// <summary> + /// Updates Rasterizer primitive discard state based on guest gpu state. + /// </summary> + /// <param name="state">Current GPU state</param> + private void UpdateRasterizerState(GpuState state) + { + Boolean32 enable = state.Get<Boolean32>(MethodOffset.RasterizeEnable); + _context.Renderer.Pipeline.SetRasterizerDiscard(!enable); + } + + /// <summary> /// Ensures that the bindings are visible to the host GPU. /// Note: this actually performs the binding using the host graphics API. /// </summary> diff --git a/Ryujinx.Graphics.Gpu/State/GpuState.cs b/Ryujinx.Graphics.Gpu/State/GpuState.cs index de09f3e7..4b81029c 100644 --- a/Ryujinx.Graphics.Gpu/State/GpuState.cs +++ b/Ryujinx.Graphics.Gpu/State/GpuState.cs @@ -117,6 +117,9 @@ namespace Ryujinx.Graphics.Gpu.State /// </summary> private void InitializeDefaultState() { + // Enable Rasterizer + _backingMemory[(int)MethodOffset.RasterizeEnable] = 1; + // Depth ranges. for (int index = 0; index < 8; index++) { diff --git a/Ryujinx.Graphics.Gpu/State/GpuStateTable.cs b/Ryujinx.Graphics.Gpu/State/GpuStateTable.cs index 8631efcc..e59a3aaf 100644 --- a/Ryujinx.Graphics.Gpu/State/GpuStateTable.cs +++ b/Ryujinx.Graphics.Gpu/State/GpuStateTable.cs @@ -53,11 +53,11 @@ namespace Ryujinx.Graphics.Gpu.State public static TableItem[] Table = new TableItem[] { new TableItem(MethodOffset.RtColorState, typeof(RtColorState), 8), - new TableItem(MethodOffset.ViewportTransform, typeof(ViewportTransform), 8), - new TableItem(MethodOffset.ViewportExtents, typeof(ViewportExtents), 8), + new TableItem(MethodOffset.ViewportTransform, typeof(ViewportTransform), Constants.TotalViewports), + new TableItem(MethodOffset.ViewportExtents, typeof(ViewportExtents), Constants.TotalViewports), new TableItem(MethodOffset.VertexBufferDrawState, typeof(VertexBufferDrawState), 1), new TableItem(MethodOffset.DepthBiasState, typeof(DepthBiasState), 1), - new TableItem(MethodOffset.ScissorState, typeof(ScissorState), 8), + new TableItem(MethodOffset.ScissorState, typeof(ScissorState), Constants.TotalViewports), new TableItem(MethodOffset.StencilBackMasks, typeof(StencilBackMasks), 1), new TableItem(MethodOffset.RtDepthStencilState, typeof(RtDepthStencilState), 1), new TableItem(MethodOffset.VertexAttribState, typeof(VertexAttribState), 16), diff --git a/Ryujinx.Graphics.Gpu/State/MethodOffset.cs b/Ryujinx.Graphics.Gpu/State/MethodOffset.cs index 0a720b2c..a178c2f8 100644 --- a/Ryujinx.Graphics.Gpu/State/MethodOffset.cs +++ b/Ryujinx.Graphics.Gpu/State/MethodOffset.cs @@ -16,6 +16,7 @@ namespace Ryujinx.Graphics.Gpu.State DispatchParamsAddress = 0xad, Dispatch = 0xaf, CopyBuffer = 0xc0, + RasterizeEnable = 0xdf, CopyBufferParams = 0x100, CopyBufferSwizzle = 0x1c2, CopyBufferDstTexture = 0x1c3, |
