diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2020-07-26 18:11:28 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-26 18:11:28 -0300 |
| commit | 51fbc1fde4363760bb47a2a5c960476ffceeac17 (patch) | |
| tree | dbda81cd56f3747cff4328da227a898910832392 | |
| parent | 8dbcae1ff88927dc0734d5f0e24fbf8781d68590 (diff) | |
Use polygon offset clamp if supported (#1429)
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/Methods.cs | 4 | ||||
| -rw-r--r-- | Ryujinx.Graphics.OpenGL/HwCapabilities.cs | 2 | ||||
| -rw-r--r-- | Ryujinx.Graphics.OpenGL/Pipeline.cs | 11 |
3 files changed, 12 insertions, 5 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs index e84687ef..fbde0f0a 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs @@ -568,7 +568,7 @@ namespace Ryujinx.Graphics.Gpu.Engine enables |= (depthBias.LineEnable ? PolygonModeMask.Line : 0); enables |= (depthBias.FillEnable ? PolygonModeMask.Fill : 0); - _context.Renderer.Pipeline.SetDepthBias(enables, factor, units, clamp); + _context.Renderer.Pipeline.SetDepthBias(enables, factor, units / 2f, clamp); } /// <summary> @@ -697,7 +697,7 @@ namespace Ryujinx.Graphics.Gpu.Engine float size = state.Get<float>(MethodOffset.PointSize); bool isProgramPointSize = state.Get<Boolean32>(MethodOffset.VertexProgramPointSize); bool enablePointSprite = state.Get<Boolean32>(MethodOffset.PointSpriteEnable); - + // TODO: Need to figure out a way to map PointCoordReplace enable bit. Origin origin = (state.Get<int>(MethodOffset.PointCoordReplace) & 4) == 0 ? Origin.LowerLeft : Origin.UpperLeft; diff --git a/Ryujinx.Graphics.OpenGL/HwCapabilities.cs b/Ryujinx.Graphics.OpenGL/HwCapabilities.cs index 14515b61..9278c59e 100644 --- a/Ryujinx.Graphics.OpenGL/HwCapabilities.cs +++ b/Ryujinx.Graphics.OpenGL/HwCapabilities.cs @@ -7,6 +7,7 @@ namespace Ryujinx.Graphics.OpenGL { private static readonly Lazy<bool> _supportsAstcCompression = new Lazy<bool>(() => HasExtension("GL_KHR_texture_compression_astc_ldr")); private static readonly Lazy<bool> _supportsImageLoadFormatted = new Lazy<bool>(() => HasExtension("GL_EXT_shader_image_load_formatted")); + private static readonly Lazy<bool> _supportsPolygonOffsetClamp = new Lazy<bool>(() => HasExtension("GL_EXT_polygon_offset_clamp")); private static readonly Lazy<bool> _supportsViewportSwizzle = new Lazy<bool>(() => HasExtension("GL_NV_viewport_swizzle")); private static readonly Lazy<int> _maximumComputeSharedMemorySize = new Lazy<int>(() => GetLimit(All.MaxComputeSharedMemorySize)); @@ -28,6 +29,7 @@ namespace Ryujinx.Graphics.OpenGL public static bool SupportsAstcCompression => _supportsAstcCompression.Value; public static bool SupportsImageLoadFormatted => _supportsImageLoadFormatted.Value; + public static bool SupportsPolygonOffsetClamp => _supportsPolygonOffsetClamp.Value; public static bool SupportsViewportSwizzle => _supportsViewportSwizzle.Value; public static bool SupportsNonConstantTextureOffset => _gpuVendor.Value == GpuVendor.Nvidia; diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs index 09ba9be0..4f3c2a29 100644 --- a/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -610,9 +610,14 @@ namespace Ryujinx.Graphics.OpenGL return; } - GL.PolygonOffset(factor, units / 2f); - // TODO: Enable when GL_EXT_polygon_offset_clamp is supported. - // GL.PolygonOffsetClamp(factor, units, clamp); + if (HwCapabilities.SupportsPolygonOffsetClamp) + { + GL.PolygonOffsetClamp(factor, units, clamp); + } + else + { + GL.PolygonOffset(factor, units); + } } public void SetDepthClamp(bool clamp) |
