فهرست منبع

Use polygon offset clamp if supported (#1429)

gdkchan 5 سال پیش
والد
کامیت
51fbc1fde4
3فایلهای تغییر یافته به همراه12 افزوده شده و 5 حذف شده
  1. 2 2
      Ryujinx.Graphics.Gpu/Engine/Methods.cs
  2. 2 0
      Ryujinx.Graphics.OpenGL/HwCapabilities.cs
  3. 8 3
      Ryujinx.Graphics.OpenGL/Pipeline.cs

+ 2 - 2
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;
 

+ 2 - 0
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;
 

+ 8 - 3
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)